1.2k likes | 1.39k Views
Teil 3: Relationenmodell. Einleitung Daten in Tabellen Definitionen Schlüssel Fremdschlüssel Null-Werte gute Relationenschemata Abbildung des E-R-Modells. Einleitung. Grundlage der meisten derzeitigen Datenbanken vorgestellt von E.F. Codd 1970 Ziel: Daten-Unabhängigkeit
E N D
Teil 3:Relationenmodell • Einleitung • Daten in Tabellen • Definitionen • Schlüssel • Fremdschlüssel • Null-Werte • gute Relationenschemata • Abbildung des E-R-Modells
Einleitung • Grundlage der meisten derzeitigen Datenbanken • vorgestellt von E.F. Codd 1970 • Ziel: Daten-Unabhängigkeit • in kommerziellen DBMS seit 1981 • basiert auf einer Variante des mathematischen Konzepts der Relation • Relationen können auf einfache Weise als Tabellen interpretiert werden • rein wertbasierte Verweise (keine Pointer)
Mathematische Relation • D1, D2, ..., Dn : n Mengen • kartesisches Produkt: D1 x D2 x ... x Dn • Menge aller n-Tupel (d1, d2, ..., dn), sodaß • d1 D1, d2 D2, ..., dn Dn • Eine mathematische Relation auf D1, D2, ..., Dn : • Teilmenge des kartesischen Produktes D1 x D2 x ... x Dn • D1, D2, ..., Dn: Wertebereiche (Domänen) der Relation • n ist der Grad der Relation • Anzahl der Tupel wird Kardinalität der Relation genannt
Mathematische Relation(2) • Beispiel: • konto integer x integer x string x number x number • {(2317, 12345, „Otto Huber“,20.000, 12.375), ...} • Attribute positional
Relationen in DB • Jeder Domain erhält eindeutigen Attributnamen • beschreibt die „Rolle“ des Domains • in Tabellen-Darstellung sind die Attributnamen die Spaltenüberschriften • Bsp.:
Definitionen • Relationen-Schema: • Name einer Relation mit einer Menge von Attributen A1, ..., An R(A1, ..., An) • Datenbank-Schema: • Menge von Relationen mit unterschiedlichen Namen R = { R1(X1), R2(X2), ..., Rn(Xn)} • Relation(Instanz) r mit einem Schema R(X): • Menge r von Tupel gemäß X • Datenbank (Instanz) mit einem Schema R = { R1(X1), R2(X2), ..., Rn(Xn)}: • Menge von Relationen r = {r1, ..., rn} mit ri Relation auf Ri
Datenbank-Schema (Bsp.) • Mitarbeiter(MNr, Mname, GebDatum, AbtNr) • Abteilung(AbtNr, Bez, Ort, Leiter) • Kurs(KursBez, Leiter, Anzahl_Tage) • Zertifikat(MNr, KursBez, Punkte, Datum)
Datenbank (Beisp.) Mitarbeiter Abteilung
Vorteile Wertbasiert: • Jede Information in relationalen DBs wird durch Werte ausgedrückt. • Referenzen (Verweise) ebenfalls nur durch Werte • logisches Modell unabhängig von physischer Struktur • enthält nur Information, die aus Anwendersicht relevant ist, keine Implementierungsdetails • Leichte Transferierbarkeit von Daten zwischen Systemen • keine Pointer!
Relationen mit einem Attribut • Sind möglich (allerdings selten) • Beisp.:
Oberschlüssel • Relation ist Menge von Tupeln - Zeilen müssen verschieden sein. • In Tabelle könnten 2 Zeilen gleich sein - Probleme beim Zugriff auf eine bestimmte Zeile • Wenn keine Zeile mehrfach vorhanden sein kann - dann enthält die Tabelle einen Schlüssel • Oberschlüssel: • identifizierende Attributkombination:
Schlüssel • Mitarbeiter(MNr, Name, SV-Nummer, AbtNr, Geb.datum) • Bsp. Oberschlüssel: • (MNr, Name, Geb.datum), • (SV-Nummer) • Schlüssel: minimaler Oberschlüssel • (d.h. wenn Attribut gestrichen wird, dann kein Oberschlüssel mehr) • Bsp. Schlüssel • MNr • SVNr
Schlüssel (2) • Schlüssel kann aus mehreren Attributen bestehen • Zertifikat(MNr, KursBez, Punkte, Datum) • ein Mitarbeiter kann mehrere Zertifikate haben, auch am selben Tag • zu einem Kurs können an einem Tag mehrere Zertifikate ausgestellt werden • Schlüssel: (Mnr, Kursbez, Datum)
Primärschlüssel • Mitarbeiter (MNr, Mname, SVNr, GebDatum, AbtNr) • in einer Relation kann es mehrere Schlüssel geben • Bsp.: SVNr, MNr • Primärschlüssel: ausgewählter Schlüssel mit dem ein Tupel referenziert werden soll • Bsp: MNr ist Primärschlüssel • ein guter Primärschlüssel: • Wert immer bekannt • Wert ändert sich nie • ... deshalb: SVNr, MNr, KontoNr, ....
Fremdschlüssel • Mitarbeiter (MNr, Mname, SVNr, GebDatum, AbtNr) • Abteilung(AbtNr, Bez, Ort, Leiter) • Fremdschlüssel: • Attribut einer Relation, das in einer anderen Relation Schlüssel ist • Bsp.: Attribut Leiter in Abteilung ist Attribut Mnr in Mitarbeiter • Attribut AbtNr in Mitarbeiter • realisiert Verweise auf eine andere Relation
UML - Klassendiagramm -> Relationen • UML-Klassendiagramm für konzeptuellen Entwurf • Relationenmodell ist semantisch ärmer • nicht alles was im UML-Modell ausgedrückt werden kann, kann auch im Relationenmodell ausgedrückt werden • Integritätsbedingungen im Datenmodell • Vorgaben für Programmierer und Benutzer • Abbildung notwendig • Schritte: • 1. Vorbereiten des konzeptuellen Modells • 2. Abbilden auf Relationen
Vorbereiten Klassen-Diagramm • 1. Eliminieren von Mehrfach-Attributen • eigenes Entity • 2. Eliminieren von komplexen Attributen • „ausflachen“ Person PID Name Hobbies 0..* Adresse Ort Person PID Name PLZ Ort Hobby Bezeichnung * hat Hobby * PLZ Ort
Vorbereiten(2) • mehrwertiges strukturiertes Beziehungsattribut liefert liefert Firma Artikel Firma Lieferort PLZ Ort * * * Lieferung Adresse * PLZ Ort Artikel
Abbildungsregeln (1) • Jede Klasse wird auf eine eigene Relation abgebildet • Name der Relation ist Name der Klasse • Attribute der Klasse sind Attribute der Relation Mitarbeiter MNr Name Job Mitarbeiter( MNr, Name, Job)
Abbildungsregeln (2) Mitarbeiter Mnr Name Job • Jede m:n Assoziation wird auf eine eigene Relation abgebildet • Name der Relation ist der Name der Assoziation • Attribute der Relation sind • Schlüsselattribute der beteiligten Klasse (bei rekursiven Beziehungen erweitert um die Rollenbezeichnung) • Attribute der Beziehung Projektmitarbeit( MNr, ProjNr, Prozent) m Projektmitarbeit Prozent n Projekt ProjNr Bez
Abbildungsregeln (3) Mitarbeiter Mnr Job • 1:n Assoziation • Hier muß keine eigene Relation gebildet werden • Die Relation der mehrfach vorkommenden Klasse wird um den Schlüssel der (Relation der) einfach vorkommenden Klasse und der Assoziations-Attribute erweitert. Kunde(KNr, Kname, Betreuer-MNr, seit) 1 Betreuer betreut seit n Kunde KNr Name
Abbildungsregeln (4) Mitarbeiter Mnr Name Job • 1:1 Assoziationen • Ebenfalls keine eigene Relation • eine der beiden Relationen wird um den Schlüssel und um die Assoziationsatribute der anderen erweitert. Projekt( ProjNr, Bez, Leiter-MNr, seit) 1 Leiter leitet seit 0..1 Projekt ProjNr Bez
Abbildungsregeln (5) • Assoziationen höheren Grades • eigene Relation • besteht aus Schlüsseln der beteiligten Entities • und den Beziehungsattributen Lieferung(LiefNr,AbtNr,ArtikelNr) Artikel Lieferung Lieferant Abteilung
Abbildung berichtet an Chef Kunde KNr. key Name Anschrift 0..1 Mitarbeiter MNr. key Name Job betreut * 0..1 0..n Mitarbeiter 1 gibt auf * 1 * arbeitet in Bestellung Best.Nr. key Daten Anteil leitet * 0..1 * Projekt Proj.Nr. key Bezeichnung umfaßt * Produkt Preis Prod.Nr. key Bezeichnung
Abbildung (Ergebnis) • Mitarbeiter( MNr, Name, Job, Chef-MNr) • Projekt( ProjNr, Bez, Leiter-MNr) • Kunde( Knr, Name, Anschrift, Betreuer-MNr) • Bestellung( BestNr, Datum, Besteller-KNr) • Produkt(ProdNR, Bez, Preis) • Projektarbeit(MNr, ProjNr, Prozent) • Bestellumfang(BestNr, ProdNr)
Teil 4:SQL • Einleitung • Tabellendefinition • Projektion • Selektion • Join • Null-Werte • Komplexe Bedingungen • Abfragegraph
Einleitung • SQL: Structured Query language • Standard für relationale Datenbanken • standardisiert: ANSI, ISO • SQL-89, SQL-92, SQL-99 • Teile „implementor defined“ • herstellerspezifische Erweiterungen
SQL-Umfang • Datendefinitionssprache • Wertebereiche • Relationen • Sichten (externe Modelle) • Datenmanipulationssprache • Select, Insert, Update, Delete • Application Programming Interface • embedded SQL • physisches Modell • tablespace, index, cluster • Operationen • prozedurale Erweiterungen
Schema • Mitarbeiter (MNr, Mname, AbteilungsNr, GebDatum, GebOrt, Chef, Punkte, Klappe) • Abteilung (AbteilungsNr, Bez, Ort, Leiter) • Kunde (KNr, Kname, Ort) • KundenKontakt (KNr, MNr) • Bestellung (BNr, BestDatum, Betreuer_MNr, KNr) • Artikel (ANr, Abez, Preis) • BestellPos (BNr, ANr, Anzahl)
DatendefinitionsspracheDefinition von Tabellen (Relationenschema) • allgemeine Form (vereinfacht) CREATE TABLE tableName ({columnName Datatype [{constraints}]}) • tableName, columnName: übliche Bezeichner; nicht sensitiv auf Groß/Kleinschreibung
DatendefinitionsspracheDateitypen • Datentypen (Wertebereiche) CHAR(size), VARCHAR(size), Zeichenketten mit maximaler VARCHAR2(size) Länge size LONG Zeichenketten bis zu einer Länge von 231 - 1 Bytes (2GB) RAW(size) BLOBS (binary large objects) Byteketten LONG RAW analog CHAR und LONG NUMBER [(precision [, scale])] Zahlen (Fest- u. Gleitpunkt) DATE Datum ROWID eindeutiger Tupelidentifikator aus Kompatibilitätsgründen: INTEGER, FLOAT [(p)], SMALLINT, REAL, DECIMAL (p, s) Subtypen von NUMBER
Constraints (1) • Einschränkung der zulässigen Datenbankzustände • Alle Insert, Update und Delete Operationen bewirken die Evaluation der relevanten Einschränkungen • Operationen werden nur dann ausgeführt, wenn sie die Constraints nicht verletzen • Bedingungen: NOT NULL Attributwert muß ungleich NULL sein UNIQUE Attributwert darf in einer Spalte nur einmal vorkommen PRIMARY KEY Primärschlüssel (NOT NULL notwendig) FOREIGN KEY Fremdschlüssel CHECK Angabe einer Bedingung
Column Constraints andTable Constraints Bsp.: CREATE TABLE Flug (Flugnr NUMBER (3) NOT NULL, Linie CHAR (3) NOT NULL, DATUM Date, Abflug Time with Time Zone, Ankunft Time with Time Zone, Preis Number, CONSTRAINT Schlüssel_Flug PRIMARY KEY (FlugNr, Linie, Datum, Sitz), CONSTRAINT vor_nach CHECK (Abflug < Ankunft), CONSTRAINT ok CHECK (Preis >= (SELECT ...));
Tabellendefinition create table Abteilung (AbteilungsNr integer primary key not null, Bez varchar(15), Ort varchar(10), Leiter integer ); create table Mitarbeiter (MNr integer primary key not null, Mname varchar(20), AbteilungsNr integer references Abteilung, GebDatum date, GebOrt varchar(10), Chef integer references Mitarbeiter(MNr), Punkte integer, Klappe varchar(4) );
Tabellendefinition(2) create table Kunde (KNr integer primary key not null, Kname varchar(20), Ort varchar(10) ); create table KundenKontakt (KNr integer not null references Kunde, MNr integer not null references Mitarbeiter constraint Kkkey primary key(KNr, MNr) );
Tabellendefinition(3) create table Bestellung (BNr integer primary key not null, BestDatum date, Betreuer_MNr integer references Mitarbeiter, Knr integer references Kunde); create table Artikel (Anr integer not null primary key, ABez varchar(15), Preis integer ); create table bestellPos (BNr integer not null references Bestellung, Anr integer not null references Artikel, Anzahl integer constraint bpkey primary key (BNr, Anr));
DatendefinitionsspracheEntfernen von Tabellen DROP TABLE tableName Bsp.: DROP TABLE Mitarb
Assertionen (Zusicherungen) i. d. R. Bedingungen, die mehrere Tabellen betreffen Bsp.: CREATE ASSERTION positiv CHECK ((SELECT SUM (Betrag) FROM Ausgaben) < (SELECT SUM (Betrag) FROM Einnahmen))
(Benannte) Referentielle Integrität Jeder Wert eines Fremdschlüsselattributs muß in der referenzierten Tabelle (als Schlüssel) vorkommen. Bsp.: Alle Werte des Attributes AbtNo in der Tabelle Mitarb müssen auch als Werte des Attributes AbtNo in der Tabelle Abteilung vorkommen. CREATE TABLE Mitarb ... CONSTRAINT M_Abt_fk FOREIGN KEY (AbtNo) REFERENCES Abteilung (AbtNo) ...
Referentielle Constraint Aktionen geben an, was passieren soll, wenn ref. Integrität verletzt wird Anlässe: Delete, Update • Aktion zurückweisen: durch Definition des Foreign Key • Auf Default setzen, auf Null setzen ... AbtNo Number (3) DEFAULT '10' REFERENCES Abteilung ON DELETE SET DEFAULT, ON UPDATE SET NULL ... • Änderung fortpflanzen • AbtNo Number (3) REFERENCES Abteilung • ON UPDATE CASCADE • Automatisches Löschen von abhängigen Fremdschlüsseln • ON DELETE CASCADE • keine Aktion • ON DELETE NO ACTION • Cascade kann über mehrere Fremdschlüssel- Verbindungen definiert sein
Basisoperationen • Projektion: • Auswählen von Spalten aus einer Tabelle • Selektion: • Auswählen von Zeilen aus einer Tabelle • Kartesisches Produkt • jedes Tupel mit jedem erweitern • Verbund • Vereinigen zweier Tabellen aufgrund gemeinsamer Werte • Vereinigung • Mengenvereinigung der Tupelmengen • Durchschnitt • Komplement
Grundform der Select-Anweisung • Select t1.a1, t1.a2, ..., tm.an Zielattribute From R1 t1, R2 t2, ..., Rm tm Relationen Where P1 AND P2, ... AND Pk Selektionsbedingung • entspricht Ausdruck im Tupelkalkül {(t1.a1, t1.a2, ..., tm.an) | t1R1,t2 R2, ..., tm Rm, P1, P2, ..., Pk }
Projektion • Auswählen von Spalten aus einer Tabelle • „Name und Geburtsdatum aller Mitarbeiter“ • Select MName, GebDatum From Mitarbeiter; MNAME GEBDATUM -------- --------- Huber 03-NOV-52 Neumann 01-FEB-66 Novak 05-DEC-41 Willy 07-JUL-70 Horvat 29-OCT-59 Asthobl 11-NOV-69 Baumer 10-SEP-65 Zuder 27-APR-43
Projektion(2) • Alle Daten einer Tabelle • Select * From Mitarbeiter; MNR MNAME ABTEILUNGSNR GEBDATUM GEBORT CHEF PUNKTE KLAP ------ -------- ------------ --------- -------- ---- ------ ---- 27 Huber 10 03-NOV-52 Wien 11 60 547 45 Neumann 20 01-FEB-66 Linz 27 51 655 23 Novak 30 05-DEC-41 Wels 11 20 877 22 Willy 40 07-JUL-70 Wien 27 67 124 1777 Horvat 20 29-OCT-59 Linz 45 78 56 Asthobl 20 11-NOV-69 Wien 45 43 1566 Baumer 30 10-SEP-65 Villach 23 65 765 11 Zuder 27-APR-43 Villach 30 523
Eliminieren von Duplikaten Select Distinct Ort From Abteilung; Select Ort From Abteilung; Distinct ORT -------- Linz Wien ORT -------- Wien Linz Wien Linz
Selektion • Auswahl von Zeilen einer Tabelle • „Die Daten aller Abteilungen in Wien“ • Select * From Abteilung Where Ort = ´Wien´ ABTEILUNGSNR BEZ ORT LEITER ------------ --------------- -------- ---------- 10 Strickwaren Wien 27 30 Eisenwaren Wien 23
Selektion (2) • Mehrere Bedingungen • „Alle Mitarbeiter der Abteilung 20 mit mehr als 50 Punkten“ • Select * From Mitarbeiter Where AbteilungsNr = 20 And Punkte > 50; MNR MNAME ABTEILUNGSNR GEBDATUM GEBORT CHEF PUNKTE KLAP ------ -------- ------------ --------- -------- ---- ------ ---- 45 Neumann 20 01-FEB-66 Linz 27 51 655 1777 Horvat 20 29-OCT-59 Linz 45 78
Projektion und Selektion • Name und Telefonnummer aller Mitarbeiter in den Abteilungen 20 und 30 mit mehr als 50 Punkten • Select Name, Klappe From Mitarbeiter Where Punkte > 50 And (AbteilungsNr = 20 Or AbteilungsNr = 30); MNAME KLAP -------- ---- Neumann 655 Horvat Baumer 765
Selektion(3) • Selektion nach Schlüssel: • Name des Mitarbeiters mit der MNr 27 • Select Mname as Name From Mitarbeiter Where Mnr = 27; NAME -------- Huber