Relationentheorie grundlegende Elemente Symbol Bedeutung Entsprechung in SQL π AAAA Projektion SELECT σ F Selektion WHERE ρ Umbenennung RENAME; AS Natural Join NATURAL JOIN (nicht in MS SQL Server verwendbar) A=B Equijoin (Gleichverbund) INNER JOIN R x S Kartesisches Produkt CROSS JOIN R S Vereinigung UNION R S Durchschnitt INTERSECT R\S Differenz MINUS; EXCEPT 1
Relationenalgebra Cabrios, die mindestens 4 Sitze haben π FFFFFFFFFF (σ AAAAAAAAA="offen" AAA AAAAAAAA=4 (FFFFFFFF) 2
Relationenalgebra Welche Personen (VNamen, NName) sind auf welche Fahrzeuge zugelassen? π VVVVVV, NNNNN(( FFFFFFFF Fahrzeug.FahrzeugID=Zulassung.FFFFFFFFFF ZZZZZZZZZ) Person.PersID=Zulassung.PPPPIIPPPPPP) 3
Relationenalgebra Alle Firmensitze (Städte) der Fahrzeugdatenbank π SSSS (Hersteller) π HHHHHHHHH (Versicherer) 4
Normalisierung von Daten 1. Normalform: Beseitigung von mengenwertigen Attributen und Überführung in atomare Zellwerte Bsp.: Aufteilung der Spalte Kundenname in Vorname und Nachname 2. Normalform: Voraussetzung: 1. Normalform Identifizierung aller Entitätstypen und Erstellung separater Tabellen Bsp.: Tabelle Kunde, Tabelle Spiel 3. Normalform: Voraussetzung: 1. Normalform Beseitigung transitiver Abhängigkeiten, bei denen ein Nichtschlüsselattribut transitiv von einem Schlüsselkandidaten abhängt Bsp.: transitive Abhängigkeit: PLZ -> Ort -> Kundennr 5
Boyce-Codd Normalform Lösung Die BCNF ist dann verletzt, wenn sich überlappende Schlüsselkandidaten existieren. Das Attribut Hogwarts House hängt vom Attribut Nominee ab. Allerdings ist die Spalte Nominee allein kein Schlüsselattribut Schlüsselkandidaten: S 1 = {Student, Nominee} S 2 = {Student, Hogwarts House} Lösung: Zerlegung in die zwei separaten Tabellen Nominations und Candidates Nominations Candidates Student Harry Potter Harry Potter Ron Weasley Ron Weasley Gregory Goyle Nominee Cho Chang Cedric Diggory Hermione Granger Cedric Diggory Lucius Malfoy Candidate Cho Chang Cedric Diggory Hermione Granger Lucius Malfoy Hogwarts House Ravenclaw Hufflepuff Gryffindor Slytherin 6
Data Definition Language CREATE TABLE Orte( PLZ char(5) PRIMARY KEY, Stadt varchar(20) ); CREATE TABLE Kundendaten( Kundennr int PRIMARY KEY, Nachname varchar(20), Vorname varchar(20), PLZ char(5) FOREIGN KEY REFERENCES Orte, Strasse varchar(50), Hausnummer int ); CREATE TABLE Verleihdaten( Verleihnr int PRIMARY KEY, Kundennr int FOREIGN KEY REFERENCES Kundendaten, Verleihdatum date ); 7
Data Definition Language CREATE TABLE Spiel( Spielnr int PRIMARY KEY, Spielbezeichnung varchcar(50) ); CREATE TABLE Verleihdetails( Verleihnr int FOREIGN KEY REFERENCES Verleihdaten, SpielNr int FOREIGN KEY REFERENCES Spiel, Rueckgabe date, PRIMARY KEY(Verleihnr, Spielnr) ); 8
Einfügen von Datensätzen INSERT INTO Orte VALUES ('12345','Berlin'), ('23456','Hamburg'); INSERT INTO Kundendaten VALUES (101, 'Müller', 'Fritz', '12345', 'Mustergasse', 4), (102, 'Meier', 'Frieda', '23456', 'Webergasse', 1), (103, 'Lehmann', 'Max', '12345', 'Fallweg', 1); INSERT INTO Spiel VALUES (21, 'Sitzball'), (15, 'Bausteine'), (37, 'Traktor'); 9
Einfügen von Datensätzen INSERT INTO Verleihdaten VALUES (5, 101, '01.08.2008'), (1, 102, '05.07.2008'), (6, 102, '04.08.2008'), (3, 103, '10.07.2008'); INSERT INTO Verleihdetails VALUES (5, 21, '01.08.2008'), (5, 15, '03.08.2008'), (5, 37, NULL), (1, 15, '15.07.2008'), (6, 21, NULL), (3, 21, '20.07.2008'), (3, 37, '20.07.2008'); 10
Updatable Views Aktualisierungen auf Sichten lassen sich nur in wenigen Fällen durchführen, da es oft zu Konsistenzproblemen kommen kann. Bei welchen der Sichten ist ein Update ohne Weiteres möglich? Sicht 1: CREATE VIEW Geburtsorte AS SELECT DISTINCT GebInOrt FROM Person; Update nicht möglich Aktualisierte Werte können durch die Duplikatentfernung oftmals nicht mehr eindeutig auf bestimmte Datensätze zurückgeführt werden. In diesem konkreten Fall würde das schon funktionieren, sobald allerdings z.b. eine WHERE- Bedingung hinzukommt, ist eine eindeutige Zuordnung nicht mehr gegeben. Sicht 2: CREATE VIEW Fahrzeugmarken as SELECT ma.fzmarke, COUNT(ma.FZMarke) FROM (Fahrzeug as f INNER JOIN Modell as mo ON f.fzmodellid=mo.fzmodellid) INNER JOIN Marke as ma ON mo.fzmarkeid=ma.fzmarkeid GROUP BY ma.fzmarke; Update nicht möglich Durch die Aggregation (Zusammenfassung der Werte) ist eine eindeutige Zuordnung zu konkreten Datensätzen nicht mehr möglich. Sicht 3: CREATE VIEW Personen SELECT VNamen, NName FROM Person; Update möglich 11