If you're seeing this message, it means we're having trouble loading external resources on our website.

Wenn du hinter einem Webfilter bist, stelle sicher, dass die Domänen *. kastatic.org und *. kasandbox.org nicht blockiert sind.

Hauptinhalt

Daten in relationale Tabellen aufteilen

Bisher haben wir nur mit einer Tabelle gearbeitet und gelernt, wie man interessante Daten aus dieser Tabelle abfragt. Aber meistens sind unsere Daten auf mehrere Tabellen verteilt. Diese Tabellen haben bestimmte Beziehungen zueinender, was man auch Relationen nennt.
Hier haben wir z. B. eine Tabelle mit den Prüfungsresultaten von Schülern inkl. der E-Mail ihrere Eltern (zur Information über schlechte Noten):
student_nameSchüler_E-Mailtestgrade
Peter Rabbitpeter@rabbit.comErnährung95
Alice Wonderlandalice@wonderland.comErnährung92
Peter Rabbitpeter@rabbit.comChemie85
Alice Wonderlandalice@wonderland.comChemie95
Wir haben ebenfalls eine Tabelle mit den Büchern, welche die Schüler gelesen haben:
student_namebook_titlebook_author
Peter RabbitThe Tale of Mrs. Tiggy-WinkleBeatrix Potter
Peter RabbitJabberwockyLewis Carroll
Alice WonderlandThe Hunting of the SnarkLewis Carroll
Alice WonderlandJabberwockyLewis Carroll
Wir haben ebenfalls eine Tabelle mit detaillierten Informationen zu den Schülern:
idstudent_firststudent_lastSchüler_E-MailTelefonbirthday
1PeterRabbitpeter@rabbit.com555-66662001-05-10
2AliceWonderlandalice@wonderland.com555-44442001-04-02
Was denkst du über diese Tabellen? Würdest du an ihnen irgendwas ändern?
Es gibt einen wichtigen Punkt, den du bei diesen Tabellen erkennen musst: Sie beschreiben relationale Daten. Daten, welche in Beziehungen zueinander stehen. Jede dieser Tabellen beschreibt Daten, welche zu einem bestimmten Schüler gehören. Und viele der Daten in den Tabellen werden mehrmals wiederholt. Wenn die gleichen Daten in mehreren Tabellen wiederholt werden, kann dies interessante Konsequenzen haben.
Was passiert z. B., wenn sich die E-Mail eines Schülers ändert? Welche Tabellen müssen wir aktualisieren?
Wir müssen die Tabelle mit den Informationen zu den Schülern aktualisieren, aber da die E-Mail auch in der Tabelle mit den Noten steht, müssen wir dort ebenfalls jede Zeile zu diesem Schüler finden und die E-Mail aktualisieren.
Es ist viel besser, wenn die Daten einer bestimmte Spalte nur einmal in einer einzigen Tabelle gespeichert werden. So braucht man weniger Speicherplatz, muss nur an einem Ort Daten aktualisieren und verhindert, dass man an verschiedenen Orten unterschiedliche Werte speichert und die Daten damit inkonsistent werden. Wenn wir dies tun, müssen wir aber einen Weg finden, wie wir die Daten von mehreren Tabellen verknüpfen können. Das schauen wir uns später an.
Wir wollen z. B. die E-Mail aus der Noten-Tabelle entfernen, da wir bemerkt haben, dass diese redundant mit der E-Mail in der Tabelle mit den Schülerinformationen ist. Dann sieht die Tabelle so aus:
student_nametestgrade
Peter RabbitErnährung95
Alice WonderlandErnährung92
Peter RabbitChemie85
Alice WonderlandChemie95
Wie können wir nun die E-Mail für jeden Schüler ermitteln? Wir können in der Schülertabelle die Zeile mit dem gleichen Namen suchen. Und was passiert, wenn 2 Schüler den gleichen Namen haben? (Wusstest du, dass in Bali jede Person nur 1 von 4 möglichen Vornamen hat?) Den Namen können wir nicht verwenden, um die Informationen zu einem Schüler nachzuschlagen. Wir sollten niemals etwas wie Namen verwenden, um eindeutige Daten in einer Tabelle zu identifizieren.
Daher wäre es das Beste, die Spalte student_name zu entfernen und mit student_id zu ersetzen, da diese eindeutig ist.
student_idtestgrade
1Ernährung95
2Ernährung92
1Chemie85
2Chemie95
Die gleiche Änderung, student_id anstatt student_name zu verwenden, können wir auch in der Tabelle "Books" machen:
student_idbook_titlebook_author
1The Tale of Mrs. Tiggy-WinkleBeatrix Potter
1JabberwockyLewis Carroll
2The Hunting of the SnarkLewis Carroll
2JabberwockyLewis Carroll
Hast du bemerkt, dass wir den Titel und Author für Jabberwocky zwei Mal verwenden? Dies ist ein weiteres Anzeichen dafür, dass wir wohl die Tabelle in mehrere relationale Tabellen aufteilen sollten, damit wir später, wenn wir ein Buch ändern, dies nur an einer Stelle aktualisieren müssen.
Wir können eine Tabelle nur über die Bücher erstellen:
idbook_titlebook_author
1The Tale of Mrs. Tiggy-WinkleBeatrix Potter
2JabberwockyLewis Carroll
3The Hunting of the SnarkLewis Carroll
Und dann wird unsere Tabelle student_books:
student_idbook_id
11
12
23
22
Klar, diese Tabelle ist leider nicht mehr so gut lesbar wie die alte Tabelle, welche alle Informationen in jeweils einer Zeile enthielt. Aber diese Tabellen sind nicht dazu gemacht, für Menschen gut lesbar zu sein. Sie werden erstellt, um die beste Form zur Speicherung von Daten mit guter Wartbarkeit und geringer Fehleranfälligkeit zu haben. Oft macht es Sinn, die Daten in mehrere relationale Tabellen aufzuteilen, damit diese weniger redundant sind und nur an einer Stelle aktualisiert werden müssen.
Es ist wichtig, zu verstehen, wie man SQL mit Daten, welche auf mehrere relationale Tabellen aufgeteilt wurden, verwendet. Und vor allem, wie man diese Daten aus mehreren Tabellen wieder zusammenbringen und verknüpfen kann. Dies machen wir mit dem Befehl "join". Diesen Befehl wirst du als Nächstes kennenlernen.