Übungsbeispiel 2a - Lösungen 1. Normalformen • • • • Beispiel Beispiel Beispiel Beispiel i – S: ab, ac; NSA: d; 3. NF ii – S: ab; NSA: cd; BCNF iii – S: ab; NSA: cde; 1. NF iv – S: b; NSA: acde; 2. NF 2. A+ : c+ =ca; b+ =abcde=U; e+ =e; (dc)+ =dca 3. k → uv 6∈ F + da, k + = k (uv ist in k + nicht erhalten) 4. p → ab ∈ F + da, p+ = pmnabkv (ab ist in p+ erhalten) Übungsbeispiel 2b - Lösungen 1. Beispiel 1 (a) r1 (abc|ab → d), r2 (bc|b → c) (b) r1 ∩ r2 = b; b+ = bc ⇒ b+ → r2 (c) Fr1 ∪ Fr2 = FrA 2. Beispiel 2 (a) r1 (de|d → e), r2 (cgd|cg → d), r3 (fg|f → g), r4 (abc|ab → c), r5 (abfh) (b) Tableau Algorithmus (c) analog zu oben Übungsbeispiel 2c - Lösungen Übersetzung ins Relationale Modell: 1. Person: (SV-Nr, Name, Wohnort | SV-NR=PS) 2. Lektor: (SV-Nr, Abteilung, Berufsbezeichnung | SV-NR=PS, Lektor.SV-NR ⊆ Person.SV-NR) 3. Student: (SV-Nr, Matrikelnummer, Studium | SV-NR=PS, Student.SV-NR ⊆ Person.SV-NR) 4. Lehrveranstaltung: (LV-Nr, Name, maxTeilnehmer, Bezeichnung | LVNR=PS, Lehrveranstaltung.Bezeichnung ⊆ Hörsaal.Bezeichnung) 5. Hörsaal: (Bezeichnung, Größe, Gebäude | Bezeichnung=PS) 6. hältAb: (SV-Nr, LV-Nr | {SV-Nr,LV-Nr}=PS, hältAb.SV-Nr ⊆ Lektor.SV-Nr, hältAb.LV-Nr ⊆ Lehrveranstaltung.LV-Nr) 7. besucht: (SV-Nr, LV-Nr | {SV-Nr,LV-Nr}=PS, besucht.SV-Nr ⊆ Student.SVNr, besucht.LV-Nr ⊆ Lehrveranstaltung.LV-Nr) 1 SQL Abfragen 1. CREATE DOMAIN SVNr AS char(11) CONSTRAINT chkSVNr check (value like ’ ’) 2. Erstellen der Tabellen CREATE TABLE Person ( SVNr SVNr PRIMARY KEY, Name varchar(50), Wohnort varchar(50) ); CREATE TABLE Lektor SVNr Berufsbezeichnung Abteilung ); ( SVNr PRIMARY KEY REFERENCES Person(SVNr), varchar(20), varchar(50) CREATE TABLE haeltAb ( SVNr SVNr LVNr int SWS int, PRIMARY KEY (SVNr, LVNr) ); REFERENCES Lektor(SVNr), REFERENCES Lehrveranstaltung(LVNr), 3. SELECT * FROM Hörsaal WHERE Bezeichnung LIKE ’____’ AND Größe>50 ORDER BY Gebäude DESC, Bezeichnung DESC; σ[BezeichnungLIKE 0 0 ∧Groesse>50] Hoersaal 4. SELECT LV-Nr, COUNT(SV-NR) AS NumTeilnehmer FROM Besucht GROUP BY LV-Nr HAVING COUNT(SV-NR) BETWEEN 30 AND 50; 5. SELECT DISTINCT(SV-Nr) FROM hältAb π[SV −N R] (P erson) 6. SELECT studium, COUNT(SV-Nr) AS CNT_STUDENTEN FROM Studium GROUP BY studium HAVING COUNT(SV-NR)>2000; Hinweis: Die folgende Form entspricht dem SQL-Standard funktioniert jedoch zum Beispiel mit MySQL nicht! 2