¨Ubungsbeispiel 2a - Lösungen ¨Ubungsbeispiel 2b

Werbung
Ü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
Herunterladen