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:52] – 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 | ||
| - | Seite 10/15 | ||
dbs/verknuepfte_tabellen.1307627520.txt.gz · Zuletzt geändert: 09.06.2011 13:52 von Frank Schiebel
