Klausurbesprechung: Aufgabe 1: ACID Î C = concurrency? Nein Æ Consistency Select * from R outer join S = kart. Produkt R x S? Nein R Theta join S = Select(kart. Produkt) JA Schlüssel = eindeutig, maximal Nein Zeile = Tupel JA Tupelkalkül <=> Relationale Algebra Ja Selektion wählt Spalten Nein Relationales Datenmodell beruht auf Tabelle JA 3NF Æ BCNF Nein Serialisierbarer ScheduleÆ wie alle Serialisierbaren S. Nein (!alle) http Zustands orientiert? Nein (zustandslos) B+Baum Knoten heißen DirecorySeiten Ja Kosten opt.: Selektionen möglichst spät ausführen Nein ER-Diagramm ÅÆ 3NF Nein 2NF erlaubt keine fkt. Abh. eines nicht Schlüssel Attrib. vom Teil eines Schlüssels Æ A prim oder A voll fkt. Abh. JA Aufgabe 2: SQL a) Verschiedene Bezeichnungen der Waren die Kunde Vogel bestellt hat SELECT DISTINCT bezeichnung FROM Ware, Auftag, Kunde WHERE Ware.wnr=Auftrag.Wnr AND Auftrag.knr=Kunde.knr AND Kunde.Kname=’Vogel’; SELECT DISTINCT Bezeichnung FROM ware NATURAL JOIN auftrag NATURAL JOIN kunde WHERE kunde.kname=’Vogel’; b) Lieferanten Namen, die mehr als 1 Auftrag haben SELECT lname FROM lieferant NATURAL JOIN auftrag GROUP BY lname HAVING count(*)>=2; c) Kundenname, -nummer + Gesamt Einkaufswert SELECT kname, knr, SUM(menge*preis) FROM kunde NATURAL JOIN auftrag NATURAL JOIN ware GROUP BY kname, knr ORDER BY SUM(menge*preis) DESC d) Kundennamen deren Lieferanten NUR aus München sind. SELECT kname FROM kunde WHERE NOT EXISTS( SELECT * FROM lieferant WHERE lstadt=’München’ AND NOT EXISTS( SELECT * FROM auftrag WHERE auftrag.knr=kunde.knr AND auftrag.lnr=lieferant.lnr)); SELECT kname FROM kunde WHERE NOT EXISTS( SELECT lnr FROM lieferant WHERE lstadt=’München’ AND lnr NOT IN( SELECT lnr FROM auftrag WHERE auftrag.knr = kunde.knr AND auftrag.lnr=lieferant.lnr)); Aufgabe 3: a) i) Gesucht sind die Nummern aller Waren die Lieferant Huber liefert Πwnr(σlname=’Huber’(Lieferant ►◄Auftrag)) Tupelkalkül: Schema(t) = (Wnr:String) {t| ( es gibt ein l Є Lieferant, a Є Auftrag) (t.wnr=a.wnr & l.lnr=a.lnr & l.lame=’Huber’)}; Bereichskalkül: { wnr | es gibt ein lstadt, lnr, knr, menge: Lieferant(lnr,’Huber’,lstadt) & Auftrag(lnr, wnr, knr, menge)} ii) Relationale Algebra: Πkstadt(σlstadt=’München’(Kunde ►◄ Auftrag ►◄ Lieferant)) Tupelkalkül: Schema(t) = (kstadt: String) {t| (es gibt ein k Є kunde, l Є Lieferant, a Є auftrag) (t.kstadt=k.kstadt & k.knr = a.knr & l.lnr=a.lnr & l.lstadt=’München’)}; Bereichskalkül: { kstadt | es gibt ein knr, kname, lnr, lname, wnr, menge: Kunde(knr,kname, kstadt) & Lieferant(lnr,lname,’München’) & Auftrag(lnr, wnr, knr, menge)} b) i) Πlnr,wnr(Auftrag) % Πlnr(Auftrag) Berechnet die Nummern der Waren die von allen Lieferanten geliefert werden L1 L1 L1 L2 L2 L3 L4 L4 L5 L5 ii) W1 W2 W4 W2 W4 W2 W2 W4 W1 W2 L1 L2 L3 L4 L5 % = { W2} ΠBezeichnung(σmenge>20(σkname=’Wurm’(Kunde) U σkstadt=’Köln’(Kunde)) ►◄Auftrag) ►◄Ware) Berechnet die Bezeichnung der Waren, die entweder vom Kunden ‚Wurm’ oder von einem Kunden aus Köln mit einer Anzahl größer als 20 bestellt wurden. K4 K3 L1 L2 L2 L5 L5 L3 L4 W2 W2 W4 W1 W2 W2 W4 K3 K3 K3 K3 K3 K4 K4 21 3 9 7 4 18 54 = { „Mehl“, „Zucker“} Aufgabe 4: Normalisierung R(A,B,C,D,E,F) ABÆ C CÆD ABÆD ABÆE ABÆE EÆF a) b) Schlüsselkandidat: AB 1) Bestimmung der kanonischen Überdeckung: a. Linksreduktion (partielle Abh.) nichts zu tun! b. Rechtsreduktion (entfernen transitiver Abh.) ABÆD transitiv Î ABÆC CÆ D ABÆ {} ABÆ E EÆF c. Entfernen rechtsleerer Abhängigkeiten ABÆC CÆD ABÆE EÆF d. Zusammenfassen von Abh. mit gleicher linker Seite: ABÆ C,D CÆD EÆF Zwischenergebnis: kanonische Überdeckung: ABÆ C,D CÆD EÆF 2) Erzeugen eines neuen Relationsschemas: a) Relation R1(A,B,C,E) zugeordnet: ABÆCE b) Relation R2(C,D) zugeordnet CÆD c) Relation R3(EÆF) zugeordnet: EÆF 3) Rekonstruktion eines Schlüsselkandidaten: nichts zu tun 4) Elimination überflüssiger Relationen nichts zu tun. Endergebnis: Relationsschema: R1(A,B,C,E) R2(C,D) R3(E,F)