Aufgabe 1 (Integritaetsbedingungen): =================================== a) Primaerschluessel fuer VORKOMMEN: Man braucht alle drei Spalten AB, BEG, ART. Z.B. gibt es die Eintraege: 202 1002 DEF 202 1002 BSP 202 1003 DEF Mist. Der Zustand erklaert nicht, dass AB auch noetig ist. select * from vorkommen x, vorkommen y where x.ab<>y.ab and x.beg=y.beg and x.art=y.art liefert die leere Menge. Danach waere auch BEG und ART zusammen ausreichend (in dem Zustand, aber nicht mit unserer Kenntnis der realen Welt). Gluecklicherweise ist das keine Option, die man ankreuzen kann. Insofern ist die Aufgabe nicht falsch. b) SEITEN als Sekundaerschluessel von ABSCHNITTE: Nein, das würde sinnvolle Zustände ausschließen. (Es kann ja immer zwei Abschnitte geben, die gleich lang sind.) c) Fremdschlüsselbedingung VORKOMMEN(AB→ABSCHNITT,...). Welche der folgenden Operationen kann den Fremdschlüssel möglicherweise verletzten? Einfügung in VORKOMMEN d) Verletzung von Integritätsbedingungen durch Einfügung des Tupels BEG:1008 NAME:SQL OBERBEG:1009 in BEGRIFFE Der Fremdschlüssel OBERBEG wäre verletzt. (1009 kommt in BEGRIFFE nicht vor.) Aufgabe 2: Relationenalgebra ============================ a) Begriffe, die im Abschnitt mit dem Titel Integritätsbedingungen definiert werden: pi NAME (sigma TITEL = 'Integritätsbedingungen' (ABSCHNITTE join VORKOMMEN join BEGRIFFE)) b) Begriffe, die irgendwo im Skript vorausgesetzt werden, aber nirgendwo definiert werden: pi BEG, NAME (sigma ART = 'VORAUS' (VORKOMMEN join BEGRIFFE) - pi BEG, NAME (sigma ART = 'DEF' (VORKOMMEN join BEGRIFFE) Oder: pi BEG, NAME (BEGRIFFE join ((sigma ART = 'VORAUS' (VORKOMMEN)) - (sigma ART = 'DEF' (VORKOMMEN))) Es sind hier wohl ein paar Klammern ueberfluessig. Aufgabe 3: SQL-Anfragen ======================= Das war auf Uebungsblatt 11. Loesungen in Uebungsfolien 13: https://users.informatik.uni-halle.de/~brass/db24/lab/ud_relal.pdf Aufgabe 4: SQL-Anfragen analysieren, Theorie ============================================ SELECT X.NAME FROM BEGRIFFE X, BEGRIFFE Y WHERE X.OBERBEG = Y.BEG AND Y.NAME = 'Datenmodell' a) OBERBEG kann null sein. Wäre es vielleicht wichtig, die Anfrage so zu formulieren: SELECT X.NAME FROM BEGRIFFE X, BEGRIFFE Y WHERE X.OBERBEG IS NOT NULL AND X.OBERBEG = Y.BEG AND Y.NAME = 'Datenmodell' Dies liefert immer genau das gleiche Ergebnis wie die gegebene Anfrage. (Wegen der dreiwertigen Logik. WennX. OBERBEG NULL ist, kann X.OBERBEG = Y.BEG nicht "true" sein.) b) Kann die gegebene Anfrage Duplikate liefern? BEG ist Primärschlüssel der Tabelle BEGRIFFE, NAME ist ein Sekundärschlüssel. Nein. DISTINCT wäre überflüssig. Man wendet den Algorithmus aus der Vorlesung an: Wegen Y.NAME = 'Datenmodell' hat man einen Schlüssel von Y, wegen X.NAME unter SELECT einen von X. Also gibt es fuer ein gegebenes Ausgabetupel nur eine Variablenbelegung. c) Kann man in der Relationenalgebra oder SQL-92 eine Anfrage formulieren, die nicht nur die direkten Unterbegriffe eines Begriffs liefert, sondern alle (auch indirekt) untergeordneten Begriffe? Nein. In einer einzigen Anfrage ist das nicht möglich. Dabei ist wichtig, dass die Aufgabenstellung auf relationale Algebra bzw. SQL-92 abzielt. "Transitive Huelle" Anfragen gehen da nicht. In SQL-99 gibt es rekursive Anfragen, die das koennen. Die Klausur war von 2003. Da hatten das noch extrem wenige DBMS. Inzwischen haben es fast alle. Im Prinzip steht es wohl im Kapitel ueber relationale Algebra, aber wir hatten das Kapitel in diesem Semester (WS 2024/25) extrem schnell/kurz gemacht (aus Zeitgruenden). Sie muessen diese Beschraenkung also nicht unbedingt kennen. Zumindest in diesem Semester gibt es keine Aufgabe dazu. In der Vorlesung "Datenbank-Programmierung" im Sommersemester machen wir auch rekursive Anfragen. Dann wird das sicher nochmal ausfuehrlicher drankommen. d) Es sollen jetzt nicht nur die direkten Unterbegriffe von “Datenmodell” ausgeben werden, sondern auch die von “Integrit¨atsbedingung”. Ist die folgende Anfrage daf¨ur korrekt? SELECT X.NAME FROM BEGRIFFE X, BEGRIFFE Y WHERE Y.NAME = 'Datenmodell' AND Y.NAME = 'Integrit¨atsbedingungen' AND X.OBERBEG = Y.BEG Die Bedingung ist inkonsistent (widersprüchlich). Y.NAME kann ja nicht gleichzeitig zwei verschiedene Werte haben.