dbs:verknuepfte_tabellen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
dbs:verknuepfte_tabellen [09.06.2011 13:58] – Frank Schiebel | dbs:verknuepfte_tabellen [02.10.2014 18:27] (aktuell) – gelöscht Stefan Gaum | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Verknüpfte Tabellen ====== | ||
- | ===== Abbilden von Beziehung zwischen Entitäten ===== | ||
- | |||
- | ==== Primärschlüssel ==== | ||
- | |||
- | In einer Datenbank muss jeder Datensatz eindeutig identifizierbar sein. Ein Attribut, anhand dessen man | ||
- | einen Datensatz finden kann, wird in der Datenbanksprache **Primärschlüssel** genannt. Eine Tabelle darf | ||
- | nie zwei oder mehr Datensätze enthalten, die den gleichen Primärschlüssel haben. Glücklicherweise | ||
- | überwachen Datenbanksysteme automatisch, | ||
- | Wenn man ein oder mehrere Attribute als Primärschlüssel definiert, gibt das Datenbanksystem einen | ||
- | Fehler zurück, sobald man versucht, einen Datensatz | ||
- | einzufügen oder zu verändern, so dass die Eindeutigkeit | ||
- | verletzt würde. | ||
- | |||
- | In einer Datenbank bietet es sich häufig an, eine fortlaufende Nummer zu vergeben, die nur innerhalb | ||
- | der Datenbank eine Bedeutung hat (künstlicher Schlüssel oder Surrogatschlüssel). Die Option | ||
- | " | ||
- | nächste mögliche Nummer bekommt, wenn man keinen Wert für den Primärschlüssel einträgt. | ||
- | |||
- | ==== Fremdschlüssel ==== | ||
- | |||
- | Um eine 1: | ||
- | auf der " | ||
- | den Primärschlüssel des Objekts einträgt, zu dem die Beziehung besteht (im Beispiel die Nummer des | ||
- | Klassenlehrers). Wenn der Primärschlüssel einer Tabelle in einer anderen Tabelle verwendet wird, so ist | ||
- | dies ein sogenannter **Fremdschlüssel**. | ||
- | Es ist natürlich einfacher, wenn man die Beziehung auf der Seite speichert, wo mehrere Entitäten | ||
- | möglich sind. Jeder Schüler muss sich nur eine Information merken, was einfacher zu verwalten ist, als | ||
- | wenn jeder Lehrer sich alle seine Schüler merken müsste. | ||
- | |||
- | ===== Zusammenführen der Datensätze ===== | ||
- | |||
- | |||
- | |||
- | Um Daten aus beiden Tabellen zu erhalten, verwendet man diese SQL-Abfrage: | ||
- | SELECT * FROM Schueler, Lehrer | ||
- | Diese Abfrage liefert allerdings jede mögliche Kombination der Datensätze aus der Tabelle „Schueler“ mit denen der Tabelle „Lehrer“. | ||
- | |||
- | Es gehören aber nur die zusammen, bei denen das Attribut „KLNr“ der | ||
- | Schüler mit dem Attribut „LNr“ der Lehrer übereinstimmt. Wir schränken daher das Ergebnis ein: | ||
- | SELECT * FROM Schueler, Lehrer WHERE KLNr = LNr | ||
- | Diese Abfrage liefert nur noch die Datensätze, | ||
- | Jetzt könnte man einerseits die Spalten des Ergebnisses noch einschränken: | ||
- | SELECT SVorname, SNachname, LDienstbez, LNachname | ||
- | FROM Schueler, Lehrer | ||
- | WHERE KLNr = LNr | ||
- | Zudem könnte man die Anzahl der zurückgegebenen Datensätze noch einschränken: | ||
- | SELECT SVorname, SNachname, LDienstbez, LNachname | ||
- | FROM Schueler, Lehrer | ||
- | WHERE KLNr = LNr AND SKlasse >= 9 | ||
- | Damit werden nur die Daten der Schüler, die in Klasse 9 oder höher sind, zurückgegeben. | ||
- | Übrigens: Es kann durchaus vorkommen, dass ein Spaltenname in zwei verschiedenen Tabellen | ||
- | vorkommt. Bei einer Abfrage, die diese beiden Tabellen verknüpft, ist dann nicht mehr klar, welche | ||
- | Spalte gemeint ist. In solchen Fällen kann man den Tabellennamen und einen Punkt vor den | ||
- | Spaltennamen setzen, um klarzumachen, | ||
- | SELECT Schueler.SVorname, | ||
- | FROM Schueler, Lehrer | ||
- | WHERE Schueler.KLNr = Lehrer.LNr AND Schueler.SKlasse >= 9 | ||
- | |||
- | |||
- | {{: | ||
- | |||
- | Importiere die Datenbank '' | ||
- | |||
- | Erfinde eigene Beispiele und teste diese. | ||
- | |||
- | {{: |
dbs/verknuepfte_tabellen.1307627885.txt.gz · Zuletzt geändert: 09.06.2011 13:58 von Frank Schiebel