Frage von user417398, 31

SQL Kartesisches Produkt - Hilfe!?

Zu einer SQL Übung sind folgende Tabellen gegeben

autor = aid (Primärschlüssel), name, vorname , ort

buch = bid (Primärschlüssel), titel, jahr, preis, vid

verlag = vid (Primärschlüssel), name, ort

schreiben = bid (Primärschlüssel), aid (Primärschlüssel)

Liste alle Bücher, die zugehörigen Autoren und der Verlag, in dem sie erschienen sind.

select * from buch b, autor a, schreiben s, verlag v where b.bid=s.bid and a.aid=s.aid and b.vid=v.vid

Das ist die Lösung dazu. Ich verstehe jetzt nicht, wieso kommt da überhaupt schreiben drin vor? Ist doch gar nicht nach gefragt. Des weiteren verstehe ich nicht warum man jetzt zum Beispiel b.vid = v.vid nimmt und nicht b.bid = v.bid Woher weiß ich welchen Schlüssel ich nehmen muss oder ist das egal? Ist etwas blöd dargestellt aber hoffe jemand versteht es und kann mir helfen.

Antwort
von Rowal, 14

Es ist gängige Praxis in der Datenbankprogrammierung die Tabellen in dieser Form anzulegen und entspricht auch der Umgangssprache:

In der Tabelle "Autor" werden alle relevanten Eigenschaften der Autoren aufgeführt, aber nur solche, die durch eine Zahl oder einen Text beschrieben werden können. Nicht aber solche, die aus einer unbestimmten Anzahl bestehen, also welche Bücher die Autoren geschrieben haben.

Analog bei "buch" und "verlag" Die Information, welcher Autor welches Buch geschrieben hat, wird in einer eigenen Tabelle untergebracht, der Tabelle "schreiben". Somit können alle Information in klassischen Tabellen untergebracht werden können. Hier ist es logisch auch zulässig, dass ein Buch mehrere Autoren hat.

Die Select-Anweisung heißt umgangssprachlich so: Gib alle Information zu jedem Buch aus, also auch den zugeordneten Verlag (buch.vid=verlag.vid), sowie die zugehörigen Autoren. Bei letzterem muss in der Tabelle "schreiben" nachgeschaut werden, wo das betreffende Buch bid vorkommt ( also buch.bid=schreiben.bid). Jetzt muss man aber noch über den Schlüssel aid an die Informationen zum Autor rankommen (deswegen schreiben.aid=autor.aid)

Kommentar von Rowal ,

Letztere Bemerkung ist sicher richtig, aber da es bei Fachbüchern normal ist, dass ein Buch mehrere Autoren hat, ist das Datenbankdesign, wie es dem Fragesteller vorgegeben wurde, das adäquateste.

Antwort
von wotan38, 5

Die Tabellen autor, buch und verlag enthalten Stammdaten. In der Tabelle schreiben werden Stammdaten einander zugeordnet.

Ich will das hier an einem einfacheren Beispiel erklären:

Ich habe eine Kunden- und eine Artikeltabelle. Das sind meine Stammdaten. Nun bestellt Kunde a einen Artikel b. Wo bringe ich diese Daten hin, um den Auftrag zu bearbeiten (Lieferschein und Rechnung drucken)?

Richtig! Ich benöte eine weitere Tabelle, wo ich genau diesen Sachverhalt speichern kann: Den Kunden a und den Artikel b (mit weiteren Daten wie z.B. Bestelldatum) speichere ich in einer Tabelle Aufträge.

Im Gegensatz zu den anderen beiden Tabellen sind das keine Stammdaten, sondern Bewegungsdaten (der Auftragsabwicklung beim Tagesgeschäft). Die Stammdaten ändern sich beim Tagesgeschäft im allgemeinen nicht, nur wenn ein Artikel neu dazu kommt oder der Preis sich ändert oder wenn ein neuer Kunde bestellt.

Zurück zur Buchhandlung: Die Tabelle schreiben ist so eine Zuordnungsdatei, die hier aus anderen Gründen, nämlich wegen der Auslagerung der Bücher, notwendig wird. Da sie sich unmittelbar und ausschließlich auf Stammdaten bezieht, gehört sie gleichermaßen dazu. Das ist es, was den Zusammenhang hier so kompliziert erscheinen lässt.

Das hier ist sicher so ein Schulbeispiel. Ich hätte aid als Fremdschlüssel zum buch gepackt (in der Annahme, dass jedes Buch nur einen Author hat).

Keine passende Antwort gefunden?

Fragen Sie die Community