13.1.2 Relationale Datenbank


Die Isotopendaten, die im letzten Kapitel im Internet gesammelt wurden, sollen jetzt in eine relationale Datenbank eingefügt werden. Im folgenden verwenden wir die SQLite-Datenbank, mit der eine relationale Datenbank in einer einzigen Datei gespeichert wird. Bearbeiten werden wir die Datenbank mit der quellfreien Software "DB Browser for SQLite".

Datenbank-Browser installieren
  • Windows: Laden Sie den "DB Browser for SQLite - .zip (no installer) for 64-bit Windows" von folgender Seite herunter: sqlitebrowser.org/dl

  • macOS: Laden Sie den "DB Browser for SQLite von folgender Seite herunter: sqlitebrowser.org/dl

Unter Windows gehen Sie dann wie folgt vor:

  • Im Download-Ordner finden Sie die Datei "DB.Browser.for.SQLite-x.x.x-win64.zip". Entpacken Sie diese Datei.
  • Im entpackten Ordner "DB.Browser.for.SQLite-x.x.x-win64" gibt es den Ordner "DB Browser for SQLite". Kopieren Sie diesen Ordner an einen Speicherort Ihrer Wahl.
  • Im Ordner "DB Browser for SQLite" finden Sie die Datei "DB Browser for SQLite.exe". Doppelklicken Sie auf diese Datei um den DB Browser zu starten.

Sie sollten folgende Programmoberfläche sehen:

Programm starten

  • Klicken Sie auf "Neue Datenbank", geben Sie als Dateiname "Isotope" ein, wählen Sie einen geeigneten Speicherort und klicken Sie dann auf "Speichern".

In dem von Ihnen gewählten Speicherort wird die Datei "Isotope.db" angelegt und es erscheint folgender Dialog:

Tabelle anlegen

Wir wollen die Isotopen-Tabelle aus der generierten Textdatei erstellen lassen. Klicken Sie deswegen auf "Abbrechen" und laden Sie folgende Datei auf ihren PC herunter (Rechtsklick - Ziel speichern unter): isotope_gefiltert.txt.

Klicken Sie im DB Browser auf "Datei - Import - Tabelle aus CSV-Datei":

Tabelle importieren

Im Dialog wählen Sie als Dateityp unten rechts "Text Files (*.txt)" und wählen Sie die gerade heruntergeladene Datei. Sie sollten folgenden Dialog sehen:

CSV-Datei importieren

Tragen Sie als Tabellenname "Isotope" ein und aktivieren Sie "Spaltenname in erster Zeile". Klicken Sie dann auf "OK", so dass die Daten importiert werden. Sie sollten eine Tabelle "Isotope" unter "Tabellen" sehen:

Tabelle Isotope

Klicken Sie auf "Datei - Änderungen schreiben" um die Datenbank zu speichern. Alle Daten der Datenbank sind in der Datei "Isotope.db" gespeichert. Die gespeicherten Daten können Sie ansehen, indem Sie auf den Tab "Daten durchsuchen" klicken:

Ansicht Daten

Die Spalten A, Z und N sind für Laien unverständlich, deswegen sollen diese umbenannt werden. Klicken Sie im Tab "Datenbankstruktur" mit der rechten Maustaste auf die Tabelle "Isotope", dann im Kontextmenü auf "Tabelle verändern" und doppelklicken Sie dann auf "A". Ändern Sie den Namen das Attributs auf "Massenzahl". Gehen Sie genauso vor um "Z" in Protonenzahl und "N" in Neutronenzahl umzubennen. Die Tabelle sollte dann wie folgt aussehen:

Attribute umbenennen

In der Tabelle "Isotope" sind die Abkürzungen für die Isotope eingetragen. In die Datenbank soll jetzt eine zweite Tabelle eingefügt werden, in welcher die Elementabkürzungen und die Elementnamen eingetragen werden. Fügen Sie wie oben beschrieben die Daten der folgenden Datei als neue Tabelle in die Datenbank ein: elementnamen.txt

Die Datenbank sollte jetzt wie folgt aussehen:

Elementnamen

Die Datenbank ist jetzt mit Daten befüllt.

Oft interessiert nur eine Teilmenge der vorhandenen Daten einer Datenbank. Um gezielt aus einer Datenbank bestimmte Daten abrufen zu können, wurde die Sprache "SQL" entwickelt. "SQL" steht für "Structured Query Language" oder auf Deutsch "Strukturierte Abfrage-Sprache".

Angenommen, es sollen alle Isotope ausgegeben werden, aber nur die Informationen Kurzbezeichnung, Massenzahl und deutscher Elementname. Das kann mit folgender SQL-Abfrage aus der Datenbank abgefragt werden:

SELECT Isotope.Element, Isotope.Massenzahl, Elementnamen.deu 
FROM Isotope JOIN Elementnamen 
ON Isotope.Element = Elementnamen.kurz

Erklärung: Wähle aus der Tabelle Isotope das Attribut Element, aus der Tabelle Isotope das Attribut Massenzahl und aus der Tabelle Elementnamen das Attribut deu und verbinde dazu aus den Tabellen Isotope und Elementnamen alle Datensätze zu einem neuen Datensatz, bei denen das Attribut Isotope.Element gleich dem Attribut Elementnamen.kurz ist.

Die Abfrage liefert folgende Datensätze:

Abfrage 1

Die Auswahl kann noch deutlich eingeschränkt werden, indem man eine weitere Bedingung einfügt:

SELECT Isotope.Element, Isotope.Massenzahl, Elementnamen.deu 
FROM Isotope JOIN Elementnamen 
ON Isotope.Element = Elementnamen.kurz
WHERE Elementnamen.deu = "Radon"

Mit dieser Abfrage werden nur die Datensätze des Elements "Radon" ausgegeben:

Abfrage 2

Aufgabe: Verändern Sie die SQL-Abfrage so, dass alle Isotope des Elements Uran ausgegeben werden und zwar mit den Informationen: Kurzbezeichnung, Massenzahl, Protonenzahl, Neutronenzahl, deutscher Elementname, englischer Elementname.

Lösung:

SELECT Isotope.Element, Isotope.Massenzahl, Isotope.Protonenzahl, Isotope.Neutronenzahl, Elementnamen.deu, Elementnamen.eng
FROM Isotope JOIN Elementnamen 
ON Isotope.Element = Elementnamen.kurz
WHERE Elementnamen.deu = "Uran"

Abfrage 3

Eine solche Datenbankabfrage kann in einer eigenen Datei gespeichert werden. Klicken Sie dazu auf das Symbol "SQL-Datei speichern", geben Sie der Abfrage einen Namen und klicken Sie auf "Speichern".

Damit die Zuordnung der Kurzbezeichnung zu dem deutschen Elementnamen funktioniert, darf die Tabelle Elementnamen für jede Kurzbezeichnung eines Isotops nur einen einzigen Datensatz gespeichert haben. Das Attribut kurz in der Tabelle Elementnamen wird als sogenannter Primärschlüssel festgelegt. Damit wird gefordert, dass jeder Eintrag in dieser Spalte nur ein einziges Mal vorkommen darf.

Diese Forderung kann in der Datenbank festgelegt werden:

  • Klicken Sie dazu in der Datenbank auf den Tab "Datenbankstruktur"
  • Klicken Sie auf die Tabelle "Elementnamen" und dann auf "Tabelle verändern"
  • Beim Attribut kurz setzen Sie einen Haken bei NN (= Nicht Null, es muss etwas bei diesem Attribut eingetragen werden) und bei PK (= Primärschlüssel, es dürfen nur verschiedene Eintragungen vorhanden sein)
  • Klicken Sie auf "OK"

Beim Symbol des Attributs kurz ist jetzt ein Schlüssel zu sehen. Damit wurde dieses Attribut zu einem Primärschlüssel erklärt, so dass die Bedingung erfüllt sein muss, dass keine zwei Datensätze mit gleichem Primärschlüssel-Attribut vorkommen dürfen.

Primärschlüssel

Das können Sie testen, indem Sie versuchen einen neuen Datensatz in die Tabelle Elementnamen einzufügen:

  • Klicken Sie dazu in der Datenbank auf den Tab "Daten durchsuchen"
  • Wählen Sie die Tabelle "Elementnamen" und klicken dann auf das Symbol "Neuen Datensatz hinzufügen". Sie sollten folgendes sehen

Neuer Datensatz

  • Klicken Sie in der letzten Zeile auf "1" beim Attribut kurz und drücken Sie die Taste F2. Ändern Sie den Eintrag von "1" zu "Zr" und klicken Sie auf das nächste Attributsfeld. Das Programm meldet einen Fehler.

Fehler

Da der Datensatz mit dem Primärschlüssel "Zr" bereits vorhanden ist, weigert sich die Datenbank einen neuen EIntrag mit gleichem Primärschlüssel anzulegen. Wenn Sie stattdessen einen neuen Phantasieintrag anlegen (z.B. "Hz", "Hotzenplotzium") können Sie den neuen Datensatz eintragen.

Erfolg

Indem man ein Attribut als Primärschlüssel festlegt, kann man sicherstellen, dass es bei diesem Attribut keine doppelten Datensätze gibt.

Da jetzt sichergestellt ist, dass es in der Tabelle "Elementnamen" für jede Kurzbezeichnung nur einen Eintrag gibt, kann man in der Tabelle "Isotope" im Attribut Element die eindeutigen Kurzbezeichnungen eintragen.

Die Kurzbezeichnungen sind in der Tabelle "Isotope" ein sogenannter Fremdschlüssel, denn bei verschiedenen Isotopen eines Elements kommen die Kurzbezeichnungen mehrfach vor, aber sie sind eindeutig einem Datensatz in der Tabelle "Elementnamen" zugeordnet.

Bei der SQL-Abfrage

SELECT Isotope.Element, Isotope.Massenzahl, Isotope.Protonenzahl, Isotope.Neutronenzahl, Elementnamen.deu, Elementnamen.eng
FROM Isotope JOIN Elementnamen 
ON Isotope.Element = Elementnamen.kurz
WHERE Elementnamen.deu = "Uran"

wird der Elementnamen auf deutsch und englisch über den Fremdschlüssel Isotope.Element (Tabelle "Isotope") und den Primärschlüssel Elementnamen.kurz (Tabelle "Elementnamen") zusammengeführt. Das ist möglich, da man eine Relation (= Beziehung) zwischen den beiden Tabellen herstellt, indem man den Primärschlüssel der Tabelle "Elementnamen" als Fremdschlüssel in der Tabelle "Isotope" eingeträgt.

Eine Datenbank, in welcher solche Relationen festgelegt werden, nennt man eine relationale Datenbank.