Informatikwiki

Albert Einstein Gymnasium Reutlingen

Benutzer-Werkzeuge

Webseiten-Werkzeuge


dbs:verknuepfte_tabellen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
dbs:verknuepfte_tabellen [09.06.2011 13:52] Frank Schiebeldbs: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, dass so etwas nicht auftritt – sofern man es ihnen sagt. 
-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 
-"auto_increment" (siehe Bild 5) sorgt dafür, dass ein neu hinzugefügter Datensatz automatisch die 
-nächste mögliche Nummer bekommt, wenn man keinen Wert für den Primärschlüssel einträgt. 
- 
-==== Fremdschlüssel ==== 
- 
-Um eine 1:N-Beziehung zwischen zwei Tabellen in einer Datenbank zu modellieren, wird die Tabelle 
-auf der "N-Seite" der Beziehung (in unserem Beispiel die Schüler) um eine Spalte erweitert, in die man 
-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, die zusammenpassen. 
-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, welche Spalten gemeint sind: 
-  SELECT Schueler.SVorname, Schueler.SNachname, Lehrer.LNachname 
-  FROM Schueler, Lehrer 
-  WHERE Schueler.KLNr = Lehrer.LNr AND Schueler.SKlasse >= 9 
  
dbs/verknuepfte_tabellen.1307627545.txt.gz · Zuletzt geändert: 09.06.2011 13:52 von Frank Schiebel

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki