Terra SQLVerknüpfen von Daten
inf-schule
Zurück 3.1.2.7 Weiter

3.1.2.7

Lösungswege zu den Übungen

Die Aufgaben des Kapitels sichern Schlüssel, Fremdschlüssel und Joins. Hier steht nicht das Rechnen im Vordergrund, sondern die Erklärung der Lösungswege.

Übung 1: Primärschlüssel wählen

Aufgabe aus der Lernstrecke
  1. Für zugelassene Autos, erhältliche Bücher, Schülerinnen und Schüler sowie Lehrkräfte sollen passende Primärschlüssel gefunden werden.
  2. Zusätzlich soll entschieden werden, wo ein künstlicher Primärschlüssel sinnvoll ist.

Kernidee: Ein guter Primärschlüssel bleibt eindeutig, stabil und möglichst kurz.

Besprechung

Autos können über eine Fahrzeug Identifikationsnummer stabiler erkannt werden als über das Kennzeichen. Bücher oft über ISBN, sonst über eine Buch ID. Schülerinnen, Schüler und Lehrkräfte sollten nicht über Namen identifiziert werden, sondern über künstliche IDs.

Merksatz

Namen sind gut für Menschen, aber schlecht als dauerhafte Primärschlüssel.

Übung 2: Klassenverwaltung

Aufgabe aus der Lernstrecke
  1. In einer Schüler Tabelle wirkt Name zunächst als möglicher Primärschlüssel.
  2. Für die Noten Tabelle sollen Primärschlüssel und Fremdschlüssel bestimmt werden.
  3. Die Tabellen sollen so verändert werden, dass spätere Namensprobleme vermieden werden.
Klassenverwaltung
Ausgangsmodell

Kernidee: Ein aktuell eindeutiger Name kann später doppelt vorkommen oder sich ändern.

Verbesserung

Die Schüler Tabelle erhält eine künstliche SID. Die Noten Tabelle speichert diese SID als Fremdschlüssel. Zusätzlich kann die Noten Tabelle eine eigene NID als Primärschlüssel bekommen.

schueler(SID, Name, Vorname, ...)
noten(NID, SID, Fach, Art, Note, ...)

Übung 3: Ort Tabelle verändern

Aufgabe aus der Lernstrecke

Die Tabelle ort aus dem vorherigen Kapitel soll so verändert werden, dass von dort auf die passenden Länderdaten verwiesen werden kann.

Kernidee: Der Ländername wird als Verbindung durch einen stabilen Fremdschlüssel ersetzt.

Lösungsmodell

Die Ort Tabelle bekommt einen Primärschlüssel ONR. Statt des Ländernamens speichert sie LNR als Fremdschlüssel auf land.LNR.

ort(ONR, Name, LNR, Einwohner, Laenge, Breite)
land(LNR, Name, Einwohner, Flaeche, HauptONR, KNR)
Schema terra3 Datenbank
Terra 3 mit Ortsnummer, Ländernummer und Kontinentnummer

Übung 4: Länder und Kontinente

Aufgabe aus der Lernstrecke
  1. Alle Länder mit Namen und Einwohnerzahl ausgeben, die in Asien liegen.
  2. Die asiatischen Länder nach Einwohnerzahl absteigend sortieren.
  3. Europäische Länder mit mehr als 300000 Quadratkilometern Fläche finden.
  4. Interne Bedingungen wie land.KNR = EU sollen vermieden werden.
Asien, fachlich über Kontinentname

Die Bedingung verwendet den Namen des Kontinents. Die interne Kontinentnummer dient nur zum Verbinden der Tabellen.

SELECT land.Name, land.Einwohner
FROM land, kontinent
WHERE land.KNR = kontinent.KNR
  AND kontinent.Name = 'Asien';
Mit Sortierung

ORDER BY land.Einwohner DESC sortiert die Ergebnistabelle absteigend.

SELECT land.Name, land.Einwohner
FROM land, kontinent
WHERE land.KNR = kontinent.KNR
  AND kontinent.Name = 'Asien'
ORDER BY land.Einwohner DESC;
Europa mit Fläche über 300000

Die Flächenbedingung gehört zum Land, die Kontinentbedingung zur verbundenen Kontinent Tabelle.

SELECT land.Name, land.Flaeche
FROM land, kontinent
WHERE land.KNR = kontinent.KNR
  AND kontinent.Name = 'Europa'
  AND land.Flaeche > 300000;

Übung 5: Orte, Länder, Kontinente

Aufgabe aus der Lernstrecke
  1. Alle Orte mit mehr als 10 Mio. Einwohnern mit ihren Ländern ausgeben und absteigend sortieren.
  2. Orte in Europa mit mehr als 1 Mio. Einwohnern finden.
  3. Orte mit mehr als 1 Mio. Einwohnern finden, deren Länder weniger als 10 Mio. Einwohner haben.
  4. Eine Tabelle mit den Hauptstädten der Länder erzeugen. Das Attribut HauptONR kann helfen.

Kernidee: Sobald drei Tabellen beteiligt sind, braucht die Abfrage zwei Joinbedingungen.

Orte und Länder

ort.LNR = land.LNR verbindet jeden Ort mit seinem Land.

SELECT ort.Name, ort.Einwohner, land.Name
FROM ort, land
WHERE ort.LNR = land.LNR
  AND ort.Einwohner > 10000000
ORDER BY ort.Einwohner DESC;
Orte in Europa

Für Europa muss zusätzlich die Tabelle kontinent verbunden werden.

SELECT ort.Name, ort.Einwohner, land.Name
FROM ort, land, kontinent
WHERE ort.LNR = land.LNR
  AND land.KNR = kontinent.KNR
  AND kontinent.Name = 'Europa'
  AND ort.Einwohner > 1000000;
Hauptstädte über HauptONR

land.HauptONR verweist auf die Ortsnummer der Hauptstadt.

SELECT land.Name, ort.Name
FROM land, ort
WHERE land.HauptONR = ort.ONR;

Die SQL Beispiele verwenden die Schlüsselidee aus Terra 3: Fremdschlüssel verbinden Tabellen, fachliche Bedingungen beschreiben den gesuchten Inhalt. inf-schule Terra 3.1.2.7