Q2 Datenbanken

Fremdschlüssel bestimmen

Lösung geprüft

Die Aufgabe der heutigen Stunde ist der Fremdschlüssel! Der Primärschlüssel macht eine Zeile eindeutig – der Fremdschlüssel ist das, was Tabellen überhaupt erst miteinander verbindet. Ohne ihn hätte man lauter einzelne Tabellen, die nichts voneinander wissen.

Die Aufgabenstellung lautet

Übung 1: T1 „Fahrzeuge" mit den Attributen Fahrzeug_ID, Marke_ID, Anzahl_Tueren, PS. T2 „Marken" mit den Attributen Marke_ID, Marke_Name, Hersteller_Land, Gruendungsdatum. Wo finden Sie einen Fremdschlüssel?

DB_02-2 Fremdschlüssel bestimmen (einfach): Füllen Sie alle Tabellen mit sinnvollen Datensätzen. Markieren Sie die Primärschlüssel wie gelernt; markieren Sie die Fremdschlüssel mit einer Farbe. Gegeben sind die Tabellen „Wurstsorten", „Farbstoffe", „Lieferanten" und „Orte".

Übung 1 – Fahrzeuge und Marken

Fahrzeuge(Fahrzeug_ID, Marke_ID, Anzahl_Tueren, PS)
          ^^^^^^^^^^  ^^^^^^^^
          PK          FK -> Marken.Marke_ID

Marken(Marke_ID, Marke_Name, Hersteller_Land, Gruendungsdatum)
       ^^^^^^^^
       PK

Der Fremdschlüssel ist Marke_ID in der Tabelle Fahrzeuge. Dort ist es ein Fremdschlüssel, in der Tabelle Marken ist dasselbe Attribut der Primärschlüssel.

Woran man ihn erkennt

Ein Attribut ist ein Fremdschlüssel, wenn es in einer anderen Tabelle der Primärschlüssel ist. Praktischer Trick: ein Attribut, das auf _ID endet und nicht der eigene Primärschlüssel ist, ist fast immer ein Fremdschlüssel.

Und die Richtung stimmt so herum und nicht andersherum. Man könnte ja fragen, warum die Marke nicht die Fahrzeuge kennt. Antwort: eine Marke hat viele Fahrzeuge, ein Fahrzeug hat aber genau eine Marke. Der Fremdschlüssel steht immer auf der Seite, wo „viele" steht – sonst müsste man in eine Zelle mehrere Werte schreiben, und das ist verboten.

DB_02-2 – Die Wurstsorten

Vier Tabellen, und die Fremdschlüssel bilden eine Kette.

Tabelle 1: Wurstsorten

ID (PK)Sorte_NameLieferant_ID (FK)MehrwertsteuersatzEinkaufspreisFarbstoff_ID (FK)
1Fleischwurst173,492
2Salami275,201

Tabelle 2: Farbstoffe

ID (PK)NameGefaehrlichkeitsstufe
1Echtes Karmin (E120)2
2Rote Bete Rot (E162)1

Tabelle 3: Lieferanten

ID (PK)NamePostleitzahl (FK)Status
1Metzgerei Krause65183aktiv
2Wurstwaren Nord20095aktiv

Tabelle 4: Orte

Postleitzahl (PK)OrtnameTel-Vorwahl
65183Wiesbaden0611
20095Hamburg040

In Relationenschreibweise

Wurstsorten(ID, Sorte_Name, Lieferant_ID, Mehrwertsteuersatz,
            Einkaufspreis, Farbstoff_ID)
             PK             FK->Lieferanten.ID        FK->Farbstoffe.ID

Farbstoffe(ID, Name, Gefaehrlichkeitsstufe)
            PK

Lieferanten(ID, Name, Postleitzahl, Status)
             PK        FK->Orte.Postleitzahl

Orte(Postleitzahl, Ortname, Tel-Vorwahl)
      PK

Die Kette

Wurstsorten ---> Lieferanten ---> Orte
     |
     +---------> Farbstoffe
erDiagram
    ORTE ||--o{ LIEFERANTEN : "Postleitzahl"
    LIEFERANTEN ||--o{ WURSTSORTEN : "Lieferant_ID"
    FARBSTOFFE ||--o{ WURSTSORTEN : "Farbstoff_ID"
    WURSTSORTEN {
        int ID PK
        string Sorte_Name
        int Lieferant_ID FK
        int Mehrwertsteuersatz
        decimal Einkaufspreis
        int Farbstoff_ID FK
    }
    FARBSTOFFE {
        int ID PK
        string Name
        int Gefaehrlichkeitsstufe
    }
    LIEFERANTEN {
        int ID PK
        string Name
        int Postleitzahl FK
        string Status
    }
    ORTE {
        int Postleitzahl PK
        string Ortname
        string Tel_Vorwahl
    }
Wer bei den Wurstsorten auf wen zeigt

Zwei Sachen fallen dabei auf. Erstens verweist Wurstsorten auf zwei Tabellen gleichzeitig – eine Tabelle darf beliebig viele Fremdschlüssel haben. Zweitens ist Lieferanten gleichzeitig Kind (verweist auf Orte) und Elterntabelle (Wurstsorten verweist darauf). Das ist völlig normal und kommt in der nächsten Aufgabe nochmal ausführlich dran.

Warum der Ort nicht direkt in die Lieferanten gehört

Man könnte ja einfach Ortname und Vorwahl in die Lieferanten-Tabelle schreiben. Drei Gründe, warum man das nicht macht:

Das ist schon die halbe Normalisierung, die später als eigenes Thema drankommt. Hier sieht man den Grund dafür zum ersten Mal.

Und die referenzielle Integrität

Ein Fremdschlüssel ist nicht nur Dokumentation. Die Datenbank passt aktiv darauf auf:

Deshalb heißt es referenzielle Integrität: die Verweise bleiben immer gültig, die Datenbank lässt gar nichts anderes zu.

Aufgabe suchen

Tippe los. Strg+K öffnet die Suche von überall.

Zuletzt angesehen

Werbung