Vom ERM zum Datenbankschema Pierre Fierz Chapter 7 Vom ERM zum Datenbankschema Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Lecture Datenbanken 25.04.2014 Views ERD und Datenbankschema Überprüfen der 3NF Pierre Fierz Berner Fachhochschule Technik und Informatik 7.1 Contents Vom ERM zum Datenbankschema Pierre Fierz 1 Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views 2 Integritätsbedingungen (Constraint) ERD und Datenbankschema Überprüfen der 3NF 3 Views 4 ERD und Datenbankschema 5 Überprüfen der 3NF 7.2 Die Lernziele dieses Kapitels. Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views 1 Syntax der Daten Definition Language 2 Übersetzen eines ERM in ein korrektes Datenbankschema 3 Normalisierung des Schemas ERD und Datenbankschema Überprüfen der 3NF 7.3 Outline Vom ERM zum Datenbankschema Pierre Fierz 1 Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views 2 Integritätsbedingungen (Constraint) ERD und Datenbankschema Überprüfen der 3NF 3 Views 4 ERD und Datenbankschema 5 Überprüfen der 3NF 7.4 Vom ERM zum Datenbankschema DDL Pierre Fierz Datendefinitionssprache (SQL/DDL) • Die Datendefinitionssprache (kurz DDL für Data Definition Language) dient dazu, das Datenbankschema zu definieren. • Dazu gehören die bekannten Konzepte: • • • • • • Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Tabelle (Relationenschema) Attribut Primärschlüssel Kandidatschlüssel Fremdschlüssel Integritätsbedingung. 7.5 Vom ERM zum Datenbankschema Datentypen Pierre Fierz • Die nächste Tabelle zeigt alle SQL-Datentypen Typ BOOLEAN SMALLINT Instanz Wahrheitswert ganze Zahl Beispielwert TRUE 4771 BIGINT Festkommazahl 1003.65 Fliesskommazahl 1.5E-4 alphanumerische Zeichenkette ’Ein String’ binäre Zeichenkette B’110100101’ Datum Zeit Zeitstempel Zeitintervall DATE’1951-11-24’ TIME’11:39:49’ TIMESTAMP’2002-08-23 14:15:00’ INTERVAL’48’ HOUR NUMERIC(p,q) FLOAT(p) Integritätsbedingungen (Constraint) Views INTEGER DECIMAL(p,q) Datendefinitionssprache (SQL/DDL) ERD und Datenbankschema Überprüfen der 3NF REAL DOUBLE PRECISION CHAR(q) VARCHAR(q) CLOB BINARY(q) BINARY VARYING(q) BLOB DATE TIME TIMESTAMP INTERVAL 7.6 Definition von Tabellen Vom ERM zum Datenbankschema Pierre Fierz • In SQL spricht man von Tabellen und nicht von Relationenschemata • Eine Tabelle wird im wesentlichen durch Ihre Attribute gegeben SQL Syntax (CREATE TABLE) ::= CREATE TABLE <table-name> (<table-element> [,<table-element>]. . . ) <table-element> ::= <attribut-definition> | <table-constraint> <attribut-definition> ::= <attribut-name> <data-typ> [<default-definition>] [<attribut-constraint>]. . . <default-definition> ::= DEFAULT {<literal> | <niladic-function> | NULL} <niladic-function> ::= {USER | CURRENT_USER | SESSION_USER | SYSTEM_USER | CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP} <table-definition> Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • Die Definition von <table-constraint> und <attribut-constraint> werden wir später behandeln 7.7 Definition von Tabellen (2) Vom ERM zum Datenbankschema Pierre Fierz Mitarbeiter Tabelle • Im folgenden Beispiel wird die Mitarbeitertabelle definiert. CREATE TABLE Mitarbeiter ( mNr INTEGER, Name VARCHAR(30), AhvNr VARCHAR(16), Plz CHAR(8), Ort VARCHAR(30), Geschlecht CHAR(1), Geburtsdatum DATE ) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF 7.8 Ändern von Tabellen Vom ERM zum Datenbankschema Pierre Fierz • In SQL werden Änderungen im Schema mit dem ALTER Befehl durchgeführt. SQL Syntax (ALTER TABLE) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) <table-alteration> ::= <action> ::= | | | | ALTER TABLE <table-name> <action> ADD [COLUMN] <attribut-definition> ALTER [COLUMN] <attribut-name> {SET <default-definition> | DROP DEFAULT} DROP [COLUMN] <attribut-name> [RESTRICT | CASCADE] ADD <table-constraint> DROP CONSTRAINT <constraint-name> [RESTRICT | CASCADE] Views ERD und Datenbankschema Überprüfen der 3NF • RESTRICT bedeutet, dass ein Objekt nicht gelöscht wird, falls es noch (in eine View oder Constraint) gebraucht wird. • CASCADE bedeutet, dass eventuell referenzierende Objekte auch gelöscht werden. 7.9 Ändern von Tabellen (2) Vom ERM zum Datenbankschema Pierre Fierz Ändern der Mitarbeiter Tabelle • Nachfolgend einige Beispiele zum ALTER TABLE Befehl Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views -- Wir führen ein neues Attribut Strasse ein. ALTER TABLE Mitarbeiter ADD Strasse VARCHAR(30); ERD und Datenbankschema Überprüfen der 3NF -- Nun entfernen wir das Attribut Geschlecht ALTER TABLE Mitarbeiter DROP Geschlecht RESTRICT; -- Wir setzen den Default des Attributs Plz auf 3000 ALTER TABLE Mitarbeiter ALTER Plz SET DEFAULT ’3000’; 7.10 Löschen einer Tabelle Vom ERM zum Datenbankschema Pierre Fierz • Eine Tabelle kann mit dem DROP TABLE Befehl aus der Datenbank entfernt werden. • Mit diesem Befehl werden auch alle Tupel in der entsprechenden Tabelle gelöscht. SQL Syntax (DROP TABLE) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF <drop-table> ::= DROP TABLE <table-name> [RESTRICT | CASCADE] Löschen der Mitarbeiter Tabelle DROP TABLE Mitarbeiter CASCADE 7.11 Outline Vom ERM zum Datenbankschema Pierre Fierz 1 Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views 2 Integritätsbedingungen (Constraint) ERD und Datenbankschema Überprüfen der 3NF 3 Views 4 ERD und Datenbankschema 5 Überprüfen der 3NF 7.12 Integritätsbedingungen Vom ERM zum Datenbankschema Pierre Fierz • Integritätsbedingungen dienen dem Ausschluss von “semantisch inkorrekten” Datenzuständen. • SQL:1992 unterstützt die deklarative Formulierung von Integritätsbedingungen auf Attributten und Tabellen. • Globale Integritätsbedingungen heissen Assertions. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • Alle Integritätsbedingungen haben einen eindeutigen Namen. • Der Name wird bei einer Verletzung der Bedingung in der Fehlermeldung ausgegeben. • Falls der Name in der Definition nicht explizit angegeben wird, so kreiert das DBMS automatisch einen eindeutigen Namen. 7.13 Vom ERM zum Datenbankschema Integritätsbedingungen Pierre Fierz Datendefinitionssprache (SQL/DDL) • Die Syntax für Integritätsbedingung ist die folgende Integritätsbedingungen (Constraint) Views SQL Syntax (Constraints) <constraint> ::= <constraint-type> ::= ERD und Datenbankschema [CONSTRAINT <constraint-name>] <constraint-type> <attribut-constraint> | <table-constraint> Überprüfen der 3NF 7.14 Integritätsbedingungen auf Attributen Vom ERM zum Datenbankschema Pierre Fierz • Diese Integritätsbedingungen werden bei der Definition von Attributen angegeben. • Wie der Name andeutet, sind solche Bedingungen genau auf einem Attribut in einer Tabelle beschränkt. • Eine Attributbedingung hat die folgende Form: Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF SQL Syntax (Attributconstraints) <attribut-constraint> ::= NOT NULL | UNIQUE | PRIMARY KEY | REFERENCES <table-name(attribut-name)> [ON DELETE <referential-action>] [ON UPDATE <referential-action>] | CHECK(<conditional-expression>) 7.15 Integritätsbedingungen auf Attributen (2) Vom ERM zum Datenbankschema Pierre Fierz • NOT NULL schliesst den Wert NULL für dieses Attribut aus. • UNIQUE testet, dass der Attributwert eindeutig ist. • Ausnahme ist der Wert NULL, der beliebig oft vorkommen darf. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views • PRIMARY KEY definiert das Attribut als Primärschlüssel der Tabelle. • Diese Angabe impliziert gleichzeitig eine Not Null ERD und Datenbankschema Überprüfen der 3NF Bedingung. • Pro Tabelle darf nur ein Attribut diese Constraint haben. • REFERENCES spezifiziert das Attribut als Fremdschlüssel. • CHECK schränkt den Wertebereich der Spalte durch die Angabe eines boolschen Ausdrucks ein. • der Ausdruck darf nur eine Variable enthalten und zwar das Attribut selbst. • Der Ausdruck darf die Operatoren OR, AND und NOT enthalten. 7.16 Integritätsbedingungen auf Attributen (3) Vom ERM zum Datenbankschema Pierre Fierz • Das nächste Beispiel zeigt die Mitarbeiter Tabelle mit Constraints Mitarbeiter Tabelle Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, Name VARCHAR(30) NOT NULL, AhvNr VARCHAR(16) UNIQUE NOT NULL, Plz CHAR(8) NOT NULL, Ort VARCHAR(30) NOT NULL, Geschlecht CHAR(1) NOT NULL CHECK(VALUE IN (’W’,’M’)), Geburtsdatum DATE NOT NULL, aNr INTEGER NOT NULL REFERENCES Abteilung(aNr) ) Überprüfen der 3NF 7.17 Integritätsbedingungen auf Tabellen Vom ERM zum Datenbankschema Pierre Fierz • Diese Integritätsbedingungen werden bei der Definition einer Tabelle angegeben. • Die Integritätsbedingungen haben die folgende Form: Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views SQL Syntax (Tableconstraints) ERD und Datenbankschema Überprüfen der 3NF {PRIMARY KEY | UNIQUE} (<attr-list>) | FOREING KEY (<attribut-list>) REFERENCES table-name [(<attr-list>)] [MATCH {SIMPLE | PARTIAL | FULL}] [ON DELETE <referential-action>] [ON UPDATE <referential-action>] | CHECK (conditional-expression) <attr-list> ::= <attribut-name> [,<attribut-name>]... <referential-action> ::= {NO ACTION | CASCADE | SET DEFAULT | SET NULL} <table-constraint> ::= 7.18 Integritätsbedingungen auf Tabellen (2) Vom ERM zum Datenbankschema Pierre Fierz • Falls der Primärschlüssel, ein Kandidatschlüssel oder ein Fremdschlüssel aus mehr als einem Attribut besteht, so muss dieser in einer Tableconstraint definiert werden. • Für den Fremdschlüssel sind die folgenden Match-Regeln möglich: • SIMPLE: Falls ein Attribut des Fremdschlüssels NULL ist, wird die referentielle Integrität nicht geprüft. Dies ist die Defaultregel. • PARTIAL: Entweder haben alle Attribute den Wert NULL oder jeder Nicht-Nullwert stimmt mit dem korespondierenden Schlüsselwert eines Tupels in der referenzierten Tabelle überein. • FULL: Entweder haben alle Attribute den Wert NULL oder es gibt ein Tupel in der referenzierten Tabelle, welches dieselben Werte für die korespondierenden Schlüsselwerte hat. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF 7.19 Integritätsbedingungen auf Tabellen (3) Vom ERM zum Datenbankschema Pierre Fierz • Referenzielle Aktionen geben an, was passieren soll, falls eine Zeile in der referenzierten Tabelle gelöscht wird (ON DELETE) oder der Schlüsselwert geändert wird (ON UPDATE). • Folgende referenzielle Aktionen sind spezifizierbar: • NO ACTION: Das Löschen bzw. Ändern in der referenzierten Tabelle wird zurückgewiesen, wenn dadurch die Fremdschlüsselbedingung verletzt wird. Dies ist die Defaulteinstellung. • CASCADE: Das Löschen bzw. Ändern wird kaskadierend auf allen Tupeln durchgeführt, welche das gelöschte bzw. das geänderte Tupel referenzieren. • SET NULL: Felder des Fremdschlüssels werden auf Null gesetzt. • SET DEFAULT: Der Fremdschlüssel wird auf den definierten Defautwert gesetzt, falls in der referenzierten Tabelle ein Tupel mit dem entsprechenden Schlüssel existiert. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF 7.20 Integritätsbedingungen auf Tabellen (4) Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) • Die CHECK Constraint formuliert eine allgemeine Integritätsbedingung. • In der Bedingung dürfen alle Felder der Tabelle vorkommen. • Komplexere Bedingungen können mit den boolschen Operatoren OR, AND und NOT gebildet werden. Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • Das Prädikat darf nach SQL-Standard ebenfalls Subqueries enthalten • Achtung: Viele Implementationen erlauben keine Subqueries in der CHECK Klausel. 7.21 Integritätsbedingungen auf Tabellen (5) Vom ERM zum Datenbankschema Pierre Fierz • Das nächste Beispiel zeigt die Mitarbeiter Tabelle mit Tabellen Constraints Abteilung Tabelle Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views CREATE TABLE Abteilung ( aNr INTEGER, AName VARCHAR(30) NOT NULL, mNr INTEGER, LeiterSeit Date, ERD und Datenbankschema Überprüfen der 3NF PRIMARY KEY (aNr), UNIQUE (AName), UNIQUE (mNr), FOREIGN KEY (mNr) REFERENCES Mitarbeiter (mNr) ON DELETE NO ACTION, CHECK(not((mNr is null and LeiterSeit is not null) OR (mNr is not null and LeiterSeit is null))) ) 7.22 Globale Integritätsbedingungen Vom ERM zum Datenbankschema Pierre Fierz • Eine Assertion ist eine Integritätsbedingung, die ausserhalb einer Tabellendefinition mit der folgenden Anweisung angelegt wird: SQL Syntax (ASSERTION) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF <assertion> ::= <assertion-name> CHECK (<conditional-expression>) CREATE ASSERTION • <conditional-expression> ist ein beliebiger SQL-Befehl, der als wahr oder falsch evaluiert wird. • Im Ausdruck können beliebige Tabellen miteinander verknüpft werden. 7.23 Globale Integritätsbedingungen (2) Vom ERM zum Datenbankschema Pierre Fierz Abteilungen haben einen Standort Im Mitarbeiter Beispiel können wir so erzwingen, dass jede Abteilung mindestens 1 Standort besitzt. Die Assertion würde etwa so aussehen. CREATE ASSERTION AbteilungStandort CHECK (NOT EXISTS (SELECT * FROM Abteilung a WHERE NOT EXISTS (SELECT * FROM Standort s WHERE a.aNr = s.aNr))) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF 7.24 Überprüfungsmodi für Integritätsbedingungen Vom ERM zum Datenbankschema Pierre Fierz • Jede Integritätsbedingung hat einen initialen Überprüfungsmodus und einen Verzögerungsmodus. • Der Überprüfungsmodus bestimmt innerhalb einer laufenden Transaktion den relativen Zeitpunkt, an dem die Integritätsbedingung überprüft wird: 1 IMMEDIATE führt die Überprüfung unmittelbar nach jeder Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF SQL-Anweisung durch. 2 DEFERRED verzögert die Überprüfung an das Ende der jeweiligen Transaktion. • Der Modus DEFERRED können nur verzögerbare Integritätsbedingungen annehmen. • Die Verzögerbarkeit wird entweder implizit durch die Klausel oder explizit durch die Klausel gesetzt. INITIALLY DEFERRED DEFERRABLE 7.25 Überprüfungsmodi für Integritätsbedingungen (2) Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) • Zusammengefasst gilt die folgende Klausel für die Spezifikation von Integritätsbedingungen: Integritätsbedingungen (Constraint) Views ERD und Datenbankschema SQL Syntax (Constraint Modus) Überprüfen der 3NF [CONSTRAINT <constraint-name>] <constraint-definition> [[NOT] DEFERRABLE] [INITIALLY {IMMEDIATE | DEFERRED}] • Die Defaulteinstellungen sind NOT DEFERRABLE und INITIALLY IMMEDIATE. 7.26 Überprüfungsmodi für Integritätsbedingungen (3) Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) • Der Verzögerungsmodus kann innerhalb einer Transaktion verändert werden. • Dies geschieht mit dem folgenden Statement: Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF SQL Syntax (Setzen des Verzögerungsmodus) <setconstraint> ::= SET CONSTRAINTS <name-list> {DEFERRED | IMMEDIAT} <name-list> ::= ALL | <constraint-name> [, <constraint-name>]... 7.27 Überprüfungsmodi für Integritätsbedingungen (4) Vom ERM zum Datenbankschema Pierre Fierz • Es gibt viele Beispiele, in denen die Überprüfung einer Integritätsbedingung verzögert werden muss. Abteilungen haben mindestens 1 Standort In unserem Beispiel kann keine Abteilung eingefügt werden, weil zu diesem Zeitpunkt zur Abteilung noch kein Standort existiert. Ein Standort kann aber wegen der referenziellen Integrität nicht vor der Abteilung eingefügt werden. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE ASSERTION AbteilungStandort CHECK (NOT EXISTS (SELECT * FROM Abteilung a WHERE NOT EXISTS (SELECT * FROM Standort s WHERE a.aNr = s.aNr))) DEFERRABLE INITIALLY DEFERRED 7.28 Outline Vom ERM zum Datenbankschema Pierre Fierz 1 Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views 2 Integritätsbedingungen (Constraint) ERD und Datenbankschema Überprüfen der 3NF 3 Views 4 ERD und Datenbankschema 5 Überprüfen der 3NF 7.29 Was sind Views Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) • In einer Datenbank gibt es zwei Arten von Relationen: 1 Basisrelationen und 2 Views (oder Sichten) • Die Basisrelationen sind alle mit dem Befehl CREATE TABLE erzeugten Relationen der Datenbank Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • Die Views sind virtuelle Tabellen, die aufgrund eines SQL SELECT-Befehls aus Basisrelationen und anderen Views zusammengestellt werden. 7.30 Eigenschaften von Views Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) • In einer View werden keine Daten physisch gespeichert. • Bei einer Anfrage auf einer View werden die Informationen aus den Basisrelationen zusammengebaut, so dass die Informationen auch immer aktuell sind. • Auf einer View sind dieselben Anfrage-Operationen Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF erlaubt wie auf einer Basisrelation. • Update-Operationen auf Views müssenin Update-Operationen der zugrundeliegenden Basisrelationen übersetzt werden. • Die Übersetung ist jedoch nicht immer eindeutig möglich. 7.31 Vom ERM zum Datenbankschema Kreieren einer View • Views werden in SQL mit dem CREATE VIEW Befehl Pierre Fierz definiert. SQL Syntax (CREATE VIEW) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen <view-definition> ::= CREATE VIEW <view-name> (Constraint) [(<attribut-name> [,<attribut-name>]...)]Views AS ERD und Datenbankschema <selection> [WITH CHECK OPTION] Überprüfen der 3NF • <selection> ist ein beliebiges Select-Statement. • Eine View definiert, als Resultat eines SELECT Befehls, wieder eine Relation. • Vom Standpunkt des Benutzers gibt es keinen Unterschied zwischen einer Basisrelation und einer View (ausser bei Update-Operationen). • Da eine View selbst eine Relation ist, darf bei der Definition keine ORDER BY Klausel verwendet werden. 7.32 Eine View löschen Vom ERM zum Datenbankschema Pierre Fierz • Eine View kann mit dem DROP VIEW Befehl wieder gelöscht werden. SQL Syntax (DROP VIEW) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views <delete-view> ::= DROP VIEW <view-name> [RESTRICT | CASCADE] ERD und Datenbankschema Überprüfen der 3NF • Wird RESTRICT angegeben, wird die View nur gelöscht, falls sie in keinen weiteren Definitionen (Views, Procedures, Triggers usw.) verwendet wird. • Wird CASCADE angegeben, werden alle Datenbank Objekte in denen die View verwendet wird kaskadiert gelöscht. • RESTRICT ist der Default 7.33 Vom ERM zum Datenbankschema Beispiele Pierre Fierz Kreieren einer View • Die folgende View zeigt pro Abteilung die gesammten Arbeitsstunden, die an Projekten geleistet werden. Datendefinitionssprache (SQL/DDL) CREATE VIEW ProjektStunden (aNr, AName, Stunden) AS SELECT aNr, AName, SUM(Wochenstunden) FROM MitProj NATURAL JOIN Projekt JOIN Abteilung A ON paNr = A.aNr GROUP BY aNr, AName; Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF SELECT * FROM ProjektStunden • Dies ergibt die folgende Relation aNr 1 2 3 4 5 AName A B C D E Stunden 181 122 97.5 130 29 7.34 Relationale Operationen auf Views Vom ERM zum Datenbankschema Pierre Fierz • Auf Views können beliebige relationale Operationen ausgeführt werden. • Es bestehen also zwischen einer View und einer Basisrelation von diesem Standpunkt aus keine Unterschiede. • Im folgenden Beispiel definieren wir eine View mit allen Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Mitarbeitern und die Projekte an denen Sie arbeiten. Mitarbeiter Projekt View DROP VIEW MitarbeiterProjekt; CREATE VIEW MitarbeiterProjekt AS SELECT * FROM Mitarbeiter natural join MitProj natural join Projekt; 7.35 Vom ERM zum Datenbankschema Relationale Operationen auf Views 2 Pierre Fierz • Nun selektieren wir mit Hilfe der View MitarbeiterProjekt alle Mitarbeiter die zwischen 20 und 30 Stunden an Projekten arbeiten. SELECT mNr, Name, sum(WochenStunden) AS Stunden FROM MitarbeiterProjekt GROUP BY mNr, Name HAVING Stunden > 20 and Stunden < 30; Name Meier Glauser Eicher Ackermann Integritätsbedingungen (Constraint) Views Selektieren auf einer View mNr 8 10 11 23 Datendefinitionssprache (SQL/DDL) ERD und Datenbankschema Überprüfen der 3NF Stunden 26 22 21 23 7.36 Update Operationen auf Views Vom ERM zum Datenbankschema Pierre Fierz • Nicht jede View ist Updatable. • Wir betrachten folgendes UPDATE auf der View MitarbeiterProjekt. Update auf einer View UPDATE MitarbeiterProjekt SET Ort = ’Basel’ WHERE mNr = 9 AND PStandort = ’Genf’; Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • Das Problem ist hier, dass der Ort für einen Teil der Projekte des Mitarbeiters verändert werden muss und für einen andern Teil nicht. • Dies ist nicht möglich, da der Ort nur einmal physisch gespeichert ist. • Dieses Problem tritt dann auf, wenn in der SET Klausel und in der WHERE Klausel Attribute aus verschiedenen Tabellen vorkommen. 7.37 Update Operationen auf Views 2 Vom ERM zum Datenbankschema Pierre Fierz • Die folgende unvollständige Liste gibt an, wenn eine View nicht updatable ist. 1 2 3 4 5 Falls die View eine DISTINCT Klausel enthält, so sind Updateoperationen nicht zugelassen. Eine View mit UNION Operationen ist nicht updatable. In einer View ist ein Feld, das aus einem Ausdruck gebildet ist nicht updatable. Views mit einer GROUP BY-Clausel und Felder, die mit einer SQL Built-In Funktion wie SUM, AVG usw. berechnet werden, sind nicht updatable. Sind NOT NULL Attribute ohne DEFAULT oder Felder des Primärschlüssels der Basisrelation in der View “ausgeblendet”, so ist das Einfügen von Tupel in dieser View nicht möglich. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF 7.38 Update Operationen auf Views 3 Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) • Der folgende Spezialfall ist wichtig, falls der Zugriff auf einzelne Tupel und Felder mit Hilfe von Views geregelt wird. • Falls die drei folgenden Bedingungen erfüllt sind, ist eine View sicher updatable 1 2 3 Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Die View enthält nur Attribute aus einer einzigen Basisrelation. Der Primärschlüssel der Basisrelation ist vollständig in der View enthalten. Alle Attribute mit der NOT NULL Klausel sind in der View vorhanden. 7.39 With Check Option Vom ERM zum Datenbankschema Pierre Fierz • Die With Check Option Klausel macht nur einen Sinn, wenn die View verändert werden kan. • Wenn Attributwerte in einem Tupel der View verändert werden, ist es möglich, dass das Tupel anschliessend nicht mehr zur View gehört. • Ist die View mit der WITH CHECK OPTION definiert, so sind solche Updates nicht erlaubt. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • Das nächste Beispiel illustriert diesen Effekt. Check Option CREATE VIEW Mitarbeiter1000_3100 AS SELECT * FROM Mitarbeiter WHERE Plz < 3100 WITH CHECK OPTION; UPDATE Mitarbeiter1000_3100 Set Ort = ’Biel’, Plz = ’3210’ WHERE Plz = 3006; ERROR 1369 (HY000): CHECK OPTION failed ’Mitarbeiter.Mitarbeiter1000_3100’ 7.40 Sichten auf Daten Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) • Wir wollen die Vorteile von Views hier zusammenfassen. • Views sind ein wichtiger Bestandteil der 3-Schemen-Architektur. • Mit Hilfe von Views können für verschiedene Benutzer Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF verschiedene Sichten auf die Daten definiert werden. • Jeder Benutzer kann mit Hilfe von Views genau auf die Informationen zugreifen, die für ihn relevant sind und andere Informationen “ausblenden”. 7.41 Vereinfachen von Abfragen Vom ERM zum Datenbankschema Pierre Fierz • Views erlauben Abfragen zu vereinfachen. • Komplizierte und häufig verwendete Join-Operationen können in der Selektions-Klausel der View verpackt werden. • Ein Beispiel dafür ist die View MitarbeiterProjekt • Der Benutzer kann mit Hilfe dieser View ohne komplizierte Operationen sofort für beliebige Projekte und Mitarbeiter die geplanten WochenStunden erfahren. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Vereinfachte Abfrage -- Dank dieser View CREATE VIEW MitarbeiterProjekt AS SELECT * FROM Mitarbeiter natural join MitProj natural join Projekt; -- wird der Query einfacher SELECT mNr, Name, WochenStunden, PName FROM MitarbeiterProjekt WHERE WochenStunden > 40; 7.42 Datenschutz Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) • Datenschutz kann mit Hilfe von Views realisiert werden. Views • Daten, die mit Hilfe einer View “ausgeblendet” werden, ERD und Datenbankschema sind für den Benutzer der View nicht sichtbar. Überprüfen der 3NF • Solche Daten können auch nicht verändert werden. • Mit Views ist es also möglich, Datenschutz auf Feld sowie auf Tupelebene einzuführen. 7.43 Logische Datenunabhängigkeit Vom ERM zum Datenbankschema Pierre Fierz • Zu einem Teil können die Applikationen gegenüber Änderungen im Datenbankschema mit Hilfe von Views geschützt werden. • Das folgende Beispiel soll das illustrieren. • In unserer Beispieldatenbank wird die Tabelle Mitarbeiter in die zwei neuen Tabellen MitarbeiterNeu und OrtTabelle aufgeteilt. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Neues Schema CREATE TABLE OrtTabelle ( Plz CHAR(8) PRIMARY KEY, Ort VARCHAR(30) NOT NULL ); CREATE TABLE MitarbeiterNeu ( mNr INTEGER PRIMARY KEY, Name VARCHAR(30) NOT NULL, AhvNr CHAR(16) NOT NULL, Plz CHAR(8) NOT NULL REFERENCES OrtTabelle (Plz) ON DELETE NO ACTION, Geschlecht CHAR(1) NOT NULL, Geburtsdatum DATE NOT NULL, aNr INTEGER NOT NULL REFERENCES Abteilung (aNr) ON DELETE NO ACTION, Vorgesetzter INTEGER REFERENCES Mitarbeiter (mNr) ON DELETE SET NULL ); 7.44 Logische Datenunabhängigkeit 3 Vom ERM zum Datenbankschema Pierre Fierz • Nun müssten alle Applikationen, die auf Mitarbeiter zugreifen, geändert werden. • Durch die Definition der folgenden View Mitarbeiter kann dies zu einem grossen Teil verhindert werden. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views Neue View CREATE VIEW Mitarbeiter AS SELECT * FROM MitarbeiterNeu natural join OrtTabelle ERD und Datenbankschema Überprüfen der 3NF • Alle Programme, die Lieferantendaten nur lesen, funktionieren jetzt unverändert weiter. • Leider müssen Programme, die Mitarbeiterdaten schreiben angepasst werden, da die View Mitarbeiter im Allgemeinen nicht verändert werden kann. 7.45 Outline Vom ERM zum Datenbankschema Pierre Fierz 1 Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views 2 Integritätsbedingungen (Constraint) ERD und Datenbankschema Überprüfen der 3NF 3 Views 4 ERD und Datenbankschema 5 Überprüfen der 3NF 7.46 Einleitung Vom ERM zum Datenbankschema Pierre Fierz • Wir wollen nun zeigen, wie aus einem ERM ein Datenbankschema erstellt wird. • Dabei ist es wichtig, dass das entstehende Datenbankschema die folgenden Eigenschaften aufweist. • Alle im ERM definierten Beziehungen müssen im Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF relationalen Datenbankschema abgebildet sein. • Alle Tabellen müssen in 3NF (BCNF) sein • Die Anzahl Tabellen soll minimal sein. • Die Übersetzung geschieht im Prinzip nach dem Syntheseverfahren • Für jedes Konstruktionselement im ERM wird eine Tabelle oder ein Attribut im relationalen Modell erstellt. 7.47 Entitätsmengen und Attributte Vom ERM zum Datenbankschema Pierre Fierz • Für jede Entitätsmenge im ERM wird eine Tabelle im Datenbankschema erstellt. • Hier die einzelnen Schritte: • Kreieren einer Tabelle mit dem Namen der Entitätsmenge und dem Entitätsschlüssel als primär Schlüssel. • Nun können alle Attribute mit Kardinalität 1 zum Schema hinzugefügt werden. Wichtig, ist dass in diesem Fall die Klausel NOT NULL angegeben wird. • Anschliessend werden alle Attribute mit Kardinalität C im Schema eingefügt. Für diese Attribute sind aber auch Nullwerte erlaubt. • Als letztes werden Zusammengesetzte Attribute durch ihre Komponenten ersetzt. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF 7.48 Entitätsmengen und Attributte (2) Vom ERM zum Datenbankschema Pierre Fierz Entität Mitarbeiter Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, Name VARCHAR(30) NOT NULL, Vorname VARCHAR(30) NOT NULL, Titel VARCHAR(15), Strasse VARCHAR(30) NOT NULL, Nr INTEGER NOT NULL, Plz CHAR(8) NOT NULL, Ort VARCHAR(30) NOT NULL, ) 7.49 Entitätsmengen und Attributte (3) Vom ERM zum Datenbankschema Pierre Fierz • Jedes Attribut mit Kardinalität M oder MC muss in einer eigenen Tabelle ausgelagert werden. • Der Primärschlüssel der neuen Tabelle besteht aus dem Primärschlüssel PK des ursprünglichen Schemas plus dem Wert des ausgelagerten Attributs. • Zusätzlich ist PK Fremdschlüssel auf die ursprüngliche Tabelle. • Die referentielle Aktion ist CASCADE. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Hobbies des Mitarbeiters CREATE TABLE Hobby ( mNr INTEGER REFERENCES Mitarbeiter(mNr) ON DELETE CASCADE, Hobby VARCHAR(20) CHECK(Hobby IN (’Fussball’,’Klavierspielen’, ’Theater’,’Boxen’,’Kochen’, ’Gleitschirm’)), PRIMARY KEY(mNr, Hobby) ) 7.50 Entitätsmengen und Attributte (4) Vom ERM zum Datenbankschema Pierre Fierz • Die Darstellung von mehrfach Attributen gilt nur für den Fall MC. • Mit einem Fremdschlüssel kann nicht erzwungen werden, dass zu jedem Mitarbeiter mindestens ein Hobby existiert. • Dazu ist eine ASSERTION notwendig Attribut vom Typ M Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE ASSERTION ’Hobby Kardinalitaet M’ CHECK (NOT EXISTS (SELECT * FROM Mitarbeiter LEFT JOIN Hobby WHERE Hobby IS NULL)) DEFERRABLE INITIALLY DEFERRED • Achtung: Kommerzielle Systeme unterstützen keine Assertions. • Der obige Test muss entweder mit Triggers oder in der Applikation durchgeführt werden. 7.51 Schwache Entitätsmengen Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) • Für schwache Entitätsmengen wird ebenfalls eine neue Tabelle angelegt. • Der Primärschlüssel besteht aus dem Primärschlüssel PK der dazugehörigen starken Entität plus dem identifizierenden Attribut der schwachen Entität. Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • Zusätzlich ist PK Fremdschlüssel auf die starke Entität. • Die referentielle Aktion ist CASCADE. • Für die Attribute gelten dieselben Regeln wie für starke Entitäten. 7.52 Schwache Entitätsmengen (2) Vom ERM zum Datenbankschema Pierre Fierz Angehöriger eines Mitarbeiters Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Angehöriger ( mNr INTEGER REFERENCES Mitarbeiter(mNr), Vorname VARCHAR(30), -- ... (weitere Attribute) PRIMARY KEY (mNr, Vorname) ) 7.53 Generalisierung und Spezialisierung Vom ERM zum Datenbankschema Pierre Fierz • Die Generalisierung (bzw. Spezialisierung) kann grundsätzlich auf zwei verschiedene Arten realisiert werden: • Vertical: Bei dieser Art werden die Subentitäten auch als Tabellen definiert • Der Schlüssel der Tabelle für die Subentität ist gleichzeitig Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Fremdschlüssel auf die Tabelle der Superentität. • Die Attribute der Superentität werden in der Subentität nicht wiederhohlt, sondern vererbt. • Horizontal: Alle beteiligten Entitäten werden mit nur einer Tabelle realisiert. • Für jede Subentität wird ein boolsches Attribut geführt. • Das Attribut enthält true, falls die Entität auch Subentität des entsprechenden Typs ist. 7.54 Generalisierung und Spezialisierung (2) Vom ERM zum Datenbankschema Pierre Fierz Vertikale Darstellung Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE pNr Titel ); CREATE TABLE pNr Publikation ( INTEGER PRIMARY KEY, VARCHAR(30) NOT NULL Buch ( INTEGER PRIMARY KEY REFERENCES Publikation(pNr) ON DELETE CASCADE, VARCHAR(13) NOT NULL ISBN ); CREATE TABLE Zeitschrift ( pNr INTEGER PRIMARY KEY REFERENCES Publikation(pNr) ON DELETE CASCADE, Nummer INTEGER NOT NULL, Jahr INTEGER NOT NULL ); 7.55 Generalisierung und Spezialisierung (3) Vom ERM zum Datenbankschema Pierre Fierz • In dieser Darstellung ist nur der Fall {incomplete, overlapping} abgedeckt. • Für die anderen Fälle braucht es Assertions: Disjoint Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views CREATE ASSERTION ’Buch und Zeitschrift disjunkt’ CHECK (NOT EXISTS (SELECT * FROM Buch NATURAL JOIN Zeitschrift)) ERD und Datenbankschema Überprüfen der 3NF Complete CREATE ASSERTION ’Publikation ist abstrakt’ CHECK(NOT EXISTS (SELECT * FROM Publikation NATURAL LEFT JOIN Buch NATURAL LEFT JOIN Zeitschrift WHERE ISBN IS NULL AND Nummer IS NULL)) DEFERRABLE INITIALLY DEFERRED 7.56 Generalisierung und Spezialisierung (4) Vom ERM zum Datenbankschema Pierre Fierz Horizontale Darstellung CREATE TABLE Publikation ( pNr INTEGER PRIMARY KEY, Titel VARCHAR(30) NOT NULL, isBuch BOOLEAN NOT NULL, ISBN VARCHAR(13), isZeitschrift BOOLEAN NOT NULL, Nummer INTEGER NOT NULL, Jahr INTEGER NOT NULL ); Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF /* Falls Buch und Zeitschrift disjunkt sind, so gilt die folgende Integritätsbedingung.*/ ALTER TABLE Publikation ADD CONSTRAINT ’Buch und Zeitschrift disjunkt’ CHECK (NOT(isBuch AND isZeitschrift)); /* Falls Publikation abstrakt ist, so gilt die folgende Integritätsbedingung. */ ALTER TABLE Publikation ADD CONSTRAINT ’Publikation ist abstrakt’ CHECK (isBuch OR isZeitschrift); 7.57 Beziehungsmengen Vom ERM zum Datenbankschema Pierre Fierz • Für Beziehungen gibt es im wesentlichen zwei Fälle: 1:M und M:M • Zusätzlich können die Kardinalitäten noch konditionell sein. 1:M und M:M Beziehungen Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF 7.58 Beziehungsmengen 1:M Vom ERM zum Datenbankschema Pierre Fierz • In diesem Fall kann die Beziehung durch einen Fremdschlüssel realisiert werden. • Der Fremdschlüssel wird in der Tabelle auf der M-Seite eingefügt. Mitarbeiter Abteilung Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views CREATE TABLE Abteilung ( aNr INTEGER PRIMARY KEY, . . ); ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, aNr INTEGER NOT NULL REFERENCES Abteilung(aNr), . . ); • Für eine C:MC Beziehung können wir für aNr einfach Nullwerte zulassen. • Für eine 1:M Beziehung braucht es wieder eine Assertion 7.59 Beziehungsmengen M:M Vom ERM zum Datenbankschema Pierre Fierz • Für eine M:M Beziehung muss eine neue Tabelle eingeführt werden. • Die Tabelle enthält zwei Fremdschlüssel, die zusammen den Primärschlüssel bilden. Mitarbeiter und Projekte Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, ... ); ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Projekt ( pNr INTEGER PRIMARY KEY, ... ); CREATE TABLE MitProj ( mNr INTEGER REFERENCES Mitarbeiter(mNr), pNr INTEGER REFERENCES Projekt(pNr), PRIMARY KEY (mNr, pNr) ); • Es ist der Fall MC:MC realisiert. • Für die Fälle M:MC und M:M sind Assertions notwendig. 7.60 Beziehungsattribut 1:M Vom ERM zum Datenbankschema Pierre Fierz • Ein Beziehungsattribut in einer 1:M oder 1:1 Beziehung wird in der Tabelle auf der M-Seite gemeinsam mit dem Fremdschlüssel aufgenommen. Beziehungsattribut 1:1 Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Abteilung ( aNr INTEGER PRIMARY KEY, mNr INTEGER UNIQUE REFERENCES Mitarbeiter(mNr), leitetSeit DATE, ... ); CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, ... ); 7.61 Beziehungsattribut M:M • Ein Beziehungattribut in einer M:M Beziehung wird in die entsprechende Zwischentabelle aufgenommen. Mitarbeiter, Projekte und Wochenstunden Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, ... ); CREATE TABLE Projekt ( pNr INTEGER PRIMARY KEY, ... ); CREATE TABLE MitProj ( mNr INTEGER REFERENCES Mitarbeiter(mNr), pNr INTEGER REFERENCES Projekt(pNr), wochenstunden FLOAT NOT NULL, PRIMARY KEY (mNr, pNr) ); 7.62 Outline Vom ERM zum Datenbankschema Pierre Fierz 1 Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views 2 Integritätsbedingungen (Constraint) ERD und Datenbankschema Überprüfen der 3NF 3 Views 4 ERD und Datenbankschema 5 Überprüfen der 3NF 7.63 Lokale Betrachtungen Vom ERM zum Datenbankschema Pierre Fierz • Die Transformation des ERM in ein Datenbankschema erfolgt im Prinzip nach dem Syntheseverfahren. • Mit den folgenden Annahmen entsteht ein Datenbankschema in dritter Normalform: Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) • Alle Attribute einer Entität sind voll vom Entitätsschlüssel Views funktional abhängig. • In einer Entität gibt es keine transitiven funktionalen Abhängigkeiten. ERD und Datenbankschema Überprüfen der 3NF • Eine transitive Abhängigkeit kann folgendermassen entstehen: • Die Abhängigkeit wurde nicht erkannt. • In diesem Fall ist das ERM nicht korrekt und muss korrigiert werden. • Die Abhängigkeit ist im ERM als Integritätsbedingung formuliert. • In diesem Fall muss diese Abhängigkeit im Datenbankschema nach den Regeln der Normalisierung eliminiert werden. 7.64 Lokale Betrachtungen (2) • Wir betrachten unser Beispiel aus dem Kapitel über Normalisation Lieferant Ort und Distanz Im ERM ist die folgende Entitätsmenge definiert: Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Zusätzlich sei die folgende Integritätsbedingung im ERM angegeben: Überprüfen der 3NF (∀l1 , l2 ∈ Lieferant)(l1 (Ort) = l2 (ORT ) =⇒ l1 (DISTANZ ) = l2 (DISTANZ )) In diesem Fall muss im Datenbankschema der Lieferant auf zwei Tabellen aufgeteilt werden. CREATE TABLE Lieferant( lNr INTEGER PRIMARY KEY, oNr INTEGER REFERENCES Ort(oNr) ); CREATE TABLE Ort( oNr INTEGER PRIMARY KEY, Ort VARCHAR(30) NOT NULL UNIQUE, Distanz FLOAT NOT NULL ); 7.65 Globale Betrachtungen Vom ERM zum Datenbankschema Pierre Fierz • Eine Verletzung der 3NF kann aber auch global (über mehr als eine Tabelle) entstehen. • Dies passiert, wenn im ERM redundante Informationen vorhanden sind. Mitarbeiter, Maschine und Produkt • • • • Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Die Ausagen sind: Eine Maschine wird nur von einem Mitarbeiter bedient Ein Produkt wird nur von einer Maschine produziert Ein Produkt wird nur von einem Mitarbeiter produziert 7.66 Globale Betrachtungen (2) Vom ERM zum Datenbankschema Pierre Fierz • Aus dem vorigen ERM entsteht nun das folgende Datenbankschema: Datenbankschema Mitarbeiter, Maschine und Produkt CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, ... ); Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Produkt ( prNr INTEGER PRIMARY KEY, maNr INTEGER REFERENCES Maschine(maNr) mNr INTEGER REFERENCES Mitarbeiter(mNr) ... ); CREATE TABLE Maschine ( maNr INTEGER PRIMARY KEY, mNr INTEGER REFERENCES Mitarbeiter(mNr) ... ); 7.67 Globale Betrachtungen (3) Vom ERM zum Datenbankschema Pierre Fierz • In unserem Beispiel verletzt die Tabelle Produkt die 3NF • Es gilt die FD maNr → mNr und somit ist mNr von prNr transitiv abhängig. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) • Die FD ist schon in der Tabelle Maschine festgehalten. Views • In beiden Tabellen hat die FD die semantische Bedeutung ERD und Datenbankschema “Maschine wird von einem Mitarbeiter bedient” Überprüfen der 3NF • In diesem Fall können wir mNr aus der Tabelle Produkt entfernen und erhalten ein Schema in 3NF. • Wichtig ist, dass beide FDs dieselbe Semantik haben. • Ist dies nicht der Fall, so liegt keine Verletzung der 3NF vor. • Zum Beispiel könnte mit mNr der Mitarbeiter bezeichnet sein, der das Produkt verkauft. 7.68 Globale Betrachtungen (4) Vom ERM zum Datenbankschema Pierre Fierz • Aus dem Beispiel können wir ein Kriterium für eine globale Verletzung der 3NF ableiten. Eine Tabelle kommt für eine globale Verletzung der 3NF in Frage falls: 1 2 Die Tabelle (z.B. Produkt) hat einen Fremdschlüssel (maNr) auf eine andere Tabelle (Maschine). Die beiden Tabellen (Produkt, Maschine) haben ein zusätzliches identisches Attribut (mNr). Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • Damit die 3NF verletzt ist, muss in beiden Tabellen eine entsprechende FD existieren (maNr → mNr ). • Beide FDs müssen denselben semantischen Sachverhalt darstellen (“Maschine wird von einem Mitarbeiter bedient”) 7.69 Betrachtungen zur 4NF Vom ERM zum Datenbankschema Pierre Fierz Datendefinitionssprache (SQL/DDL) • Probleme mit der 4NF sollten bei der Übersetzung nicht entstehen. • Mehrfachattribute werden von begin weg in eine eigene Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Tabelle ausgelagert. • Diese Tabelle enthält dann nur triviale MVDs. • Alle anderen Tabellen sollten keine MVDs mehr enthalten, falls das ERM richtig aufgebaut ist. 7.70