Vom ERM zum Datenbankschema Contents Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz Chapter 7 Vom ERM zum Datenbankschema Datendefinitionssprache (SQL/DDL) 1 Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Lecture Datenbanken 25.04.2014 Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views Views 2 Integritätsbedingungen (Constraint) ERD und Datenbankschema Überprüfen der 3NF ERD und Datenbankschema Überprüfen der 3NF 3 Views 4 ERD und Datenbankschema 5 Überprüfen der 3NF Pierre Fierz Berner Fachhochschule Technik und Informatik 7.1 Die Lernziele dieses Kapitels. Vom ERM zum Datenbankschema 7.2 Outline Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz Datendefinitionssprache (SQL/DDL) 1 Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Integritätsbedingungen (Constraint) Views 1 Syntax der Daten Definition Language 2 Übersetzen eines ERM in ein korrektes Datenbankschema 3 Normalisierung des Schemas Datendefinitionssprache (SQL/DDL) Views 2 Integritätsbedingungen (Constraint) ERD und Datenbankschema Überprüfen der 3NF ERD und Datenbankschema Überprüfen der 3NF 3 Views 4 ERD und Datenbankschema 5 Überprüfen der 3NF 7.3 7.4 Vom ERM zum Datenbankschema DDL Vom ERM zum Datenbankschema Datentypen Pierre Fierz Pierre Fierz • Die nächste Tabelle zeigt alle SQL-Datentypen Datendefinitionssprache (SQL/DDL) • Die Datendefinitionssprache (kurz DDL für Data Definition Language) dient dazu, das Datenbankschema zu definieren. • Dazu gehören die bekannten Konzepte: • • • • • • Typ Integritätsbedingungen (Constraint) BOOLEAN Views INTEGER ERD und Datenbankschema BIGINT SMALLINT DECIMAL(p,q) Überprüfen der 3NF Beispielwert TRUE 4771 Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views 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) Tabelle (Relationenschema) Attribut Primärschlüssel Kandidatschlüssel Fremdschlüssel Integritätsbedingung. Instanz Wahrheitswert ganze Zahl 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.5 Definition von Tabellen Vom ERM zum Datenbankschema 7.6 Definition von Tabellen (2) Vom ERM zum Datenbankschema Pierre Fierz 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) Mitarbeiter Tabelle • Im folgenden Beispiel wird die Mitarbeitertabelle definiert. Views ERD und Datenbankschema Überprüfen der 3NF 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 • Die Definition von <table-constraint> und <attribut-constraint> werden wir später behandeln 7.7 7.8 Ändern von Tabellen Vom ERM zum Datenbankschema Ändern von Tabellen (2) Vom ERM zum Datenbankschema Pierre Fierz 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] Ändern der Mitarbeiter Tabelle • Nachfolgend einige Beispiele zum ALTER TABLE Befehl Views Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views -- Wir führen ein neues Attribut Strasse ein. ERD und Datenbankschema Überprüfen der 3NF 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’; • 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 Löschen einer Tabelle Vom ERM zum Datenbankschema 7.10 Outline 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) Pierre Fierz Datendefinitionssprache (SQL/DDL) 1 Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views Views ERD und Datenbankschema 2 Integritätsbedingungen (Constraint) Überprüfen der 3NF ERD und Datenbankschema Überprüfen der 3NF 3 Views <drop-table> ::= DROP TABLE <table-name> [RESTRICT | CASCADE] 4 ERD und Datenbankschema Löschen der Mitarbeiter Tabelle DROP TABLE Mitarbeiter CASCADE 5 Überprüfen der 3NF 7.11 7.12 Vom ERM zum Datenbankschema Integritätsbedingungen Vom ERM zum Datenbankschema Integritätsbedingungen Pierre Fierz Pierre Fierz Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) • 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. Integritätsbedingungen (Constraint) • Die Syntax für Integritätsbedingung ist die folgende Views Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF SQL Syntax (Constraints) <constraint> ::= <constraint-type> ::= • Alle Integritätsbedingungen haben einen eindeutigen Namen. ERD und Datenbankschema [CONSTRAINT <constraint-name>] <constraint-type> <attribut-constraint> | <table-constraint> Überprüfen der 3NF • 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 Integritätsbedingungen auf Attributen Vom ERM zum Datenbankschema 7.14 Integritätsbedingungen auf Attributen (2) 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: Pierre Fierz • NOT NULL schliesst den Wert NULL für dieses Attribut aus. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views Überprüfen der 3NF | | | | Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema SQL Syntax (Attributconstraints) <attribut-constraint> ::= • UNIQUE testet, dass der Attributwert eindeutig ist. • Ausnahme ist der Wert NULL, der beliebig oft vorkommen darf. • 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. NOT NULL UNIQUE PRIMARY KEY REFERENCES <table-name(attribut-name)> [ON DELETE <referential-action>] [ON UPDATE <referential-action>] CHECK(<conditional-expression>) • 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.15 7.16 Integritätsbedingungen auf Attributen (3) Vom ERM zum Datenbankschema Integritätsbedingungen auf Tabellen Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz • Diese Integritätsbedingungen werden bei der Definition • Das nächste Beispiel zeigt die Mitarbeiter Tabelle mit Constraints Mitarbeiter Tabelle Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) • Die Integritätsbedingungen haben die folgende Form: Views 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) ) einer Tabelle angegeben. SQL Syntax (Tableconstraints) Überprüfen der 3NF 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.17 Integritätsbedingungen auf Tabellen (2) Vom ERM zum Datenbankschema 7.18 Integritätsbedingungen auf Tabellen (3) 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. Pierre Fierz • Referenzielle Aktionen geben an, was passieren soll, falls Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF 7.19 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 Integritätsbedingungen auf Tabellen (5) Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz • Das nächste Beispiel zeigt die Mitarbeiter Tabelle mit Tabellen Constraints 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) Abteilung Tabelle Views Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Abteilung ( aNr INTEGER, AName VARCHAR(30) NOT NULL, mNr INTEGER, LeiterSeit Date, • Das Prädikat darf nach SQL-Standard ebenfalls 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))) Subqueries enthalten • Achtung: Viele Implementationen erlauben keine Subqueries in der CHECK Klausel. ) 7.21 Globale Integritätsbedingungen Vom ERM zum Datenbankschema 7.22 Globale Integritätsbedingungen (2) 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) Pierre Fierz 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 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 verknüpft werden. 7.23 7.24 Überprüfungsmodi für Integritätsbedingungen • 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 Vom ERM zum Datenbankschema Überprüfungsmodi für Integritätsbedingungen (2) Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema • 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 Überprüfen der 3NF [CONSTRAINT <constraint-name>] <constraint-definition> [[NOT] DEFERRABLE] [INITIALLY {IMMEDIATE | DEFERRED}] 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 Defaulteinstellungen sind • Die Verzögerbarkeit wird entweder implizit durch die Klausel oder explizit durch die Klausel gesetzt. INITIALLY DEFERRED DEFERRABLE NOT DEFERRABLE und INITIALLY IMMEDIATE. 7.25 Überprüfungsmodi für Integritätsbedingungen (3) Vom ERM zum Datenbankschema 7.26 Überprüfungsmodi für Integritätsbedingungen (4) Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz • Es gibt viele Beispiele, in denen die Überprüfung einer 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>]... 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.27 7.28 Outline 1 Datendefinitionssprache (SQL/DDL) Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views 2 Integritätsbedingungen (Constraint) Vom ERM zum Datenbankschema Was sind Views ERD und Datenbankschema Überprüfen der 3NF 3 Views • 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 4 ERD und Datenbankschema zusammengestellt werden. 5 Überprüfen der 3NF 7.29 Eigenschaften von Views Vom ERM zum Datenbankschema Pierre Fierz 7.30 Vom ERM zum Datenbankschema Kreieren einer View • Views werden in SQL mit dem CREATE VIEW Befehl Pierre Fierz definiert. 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 SQL Syntax (CREATE VIEW) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen <view-definition> ::= CREATE VIEW <view-name> (Constraint) [(<attribut-name> [,<attribut-name>]...)]Views ERD und Datenbankschema AS ERD und Datenbankschema Überprüfen der 3NF <selection> [WITH CHECK OPTION] Überprüfen der 3NF erlaubt wie auf einer Basisrelation. • Update-Operationen auf Views müssenin Update-Operationen der zugrundeliegenden Basisrelationen übersetzt werden. • <selection> ist ein beliebiges Select-Statement. • Eine View definiert, als Resultat eines SELECT Befehls, • Die Übersetung ist jedoch nicht immer eindeutig möglich. wieder eine Relation. • Vom Standpunkt des Benutzers gibt es keinen 7.31 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 SQL Syntax (DROP VIEW) • Die folgende View zeigt pro Abteilung die gesammten Datendefinitionssprache (SQL/DDL) Arbeitsstunden, die an Projekten geleistet werden. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) 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 <delete-view> ::= DROP VIEW <view-name> [RESTRICT | CASCADE] Pierre Fierz Kreieren einer View • Eine View kann mit dem DROP VIEW Befehl wieder gelöscht werden. Vom ERM zum Datenbankschema Beispiele ERD und Datenbankschema Überprüfen der 3NF • Wird RESTRICT angegeben, wird die View nur gelöscht, Views ERD und Datenbankschema Überprüfen der 3NF SELECT * FROM ProjektStunden falls sie in keinen weiteren Definitionen (Views, Procedures, Triggers usw.) verwendet wird. • Dies ergibt die folgende Relation aNr 1 2 3 4 5 • Wird CASCADE angegeben, werden alle Datenbank Objekte in denen die View verwendet wird kaskadiert gelöscht. • RESTRICT ist der Default AName A B C D E Stunden 181 122 97.5 130 29 7.33 Relationale Operationen auf Views Vom ERM zum Datenbankschema 7.34 Vom ERM zum Datenbankschema Relationale Operationen auf Views 2 Pierre Fierz 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 • Nun selektieren wir mit Hilfe der View MitarbeiterProjekt Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views alle Mitarbeiter die zwischen 20 und 30 Stunden an Projekten arbeiten. Überprüfen der 3NF Mitarbeitern und die Projekte an denen Sie arbeiten. Mitarbeiter Projekt View SELECT mNr, Name, sum(WochenStunden) AS Stunden FROM MitarbeiterProjekt GROUP BY mNr, Name HAVING Stunden > 20 and Stunden < 30; mNr 8 10 11 23 DROP VIEW MitarbeiterProjekt; CREATE VIEW MitarbeiterProjekt AS SELECT * FROM Mitarbeiter natural join MitProj natural join Projekt; 7.35 Name Meier Glauser Eicher Ackermann Integritätsbedingungen (Constraint) Views Selektieren auf einer View ERD und Datenbankschema 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 Update Operationen auf Views 2 Vom ERM zum Datenbankschema Pierre Fierz 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) • Die folgende unvollständige Liste gibt an, wenn eine View nicht updatable ist. 1 Views ERD und Datenbankschema 2 Überprüfen der 3NF 3 4 • 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. 5 • Dies ist nicht möglich, da der Ort nur einmal physisch gespeichert ist. 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 • 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 3 Vom ERM zum Datenbankschema 7.38 With Check Option Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz • Die With Check Option Klausel macht nur einen Sinn, 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. 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.39 7.40 Sichten auf Daten Vom ERM zum Datenbankschema Vereinfachen von Abfragen Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz • Views erlauben Abfragen zu vereinfachen. • Komplizierte und häufig verwendete Join-Operationen 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. 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 • Jeder Benutzer kann mit Hilfe von Views genau auf die Informationen zugreifen, die für ihn relevant sind und andere Informationen “ausblenden”. -- 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.41 Datenschutz Vom ERM zum Datenbankschema 7.42 Logische Datenunabhängigkeit Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz • Zu einem Teil können die Applikationen gegenüber 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. Ä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. Überprüfen der 3NF Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF Neues Schema • Solche Daten können auch nicht verändert werden. • Mit Views ist es also möglich, Datenschutz auf Feld sowie 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 ); auf Tupelebene einzuführen. 7.43 7.44 Logische Datenunabhängigkeit 3 Vom ERM zum Datenbankschema Vom ERM zum Datenbankschema Outline Pierre Fierz 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) 1 Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Integritätsbedingungen (Constraint) Views Neue View CREATE VIEW Mitarbeiter AS SELECT * FROM MitarbeiterNeu natural join OrtTabelle Datendefinitionssprache (SQL/DDL) Views ERD und Datenbankschema 2 Integritätsbedingungen (Constraint) Überprüfen der 3NF ERD und Datenbankschema Überprüfen der 3NF 3 Views 4 ERD und Datenbankschema • Alle Programme, die Lieferantendaten nur lesen, funktionieren jetzt unverändert weiter. 5 Überprüfen der 3NF • Leider müssen Programme, die Mitarbeiterdaten schreiben angepasst werden, da die View Mitarbeiter im Allgemeinen nicht verändert werden kann. 7.45 Einleitung Vom ERM zum Datenbankschema 7.46 Entitätsmengen und Attributte 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 Pierre Fierz 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 • 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ä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. Entität Mitarbeiter Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views • 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 ERD und Datenbankschema Überprüfen der 3NF 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 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, ) 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.49 Entitätsmengen und Attributte (4) Vom ERM zum Datenbankschema 7.50 Schwache Entitätsmengen Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) • 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 Integritätsbedingungen (Constraint) • Für schwache Entitätsmengen wird ebenfalls eine neue Tabelle angelegt. 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 • 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. • Achtung: Kommerzielle Systeme unterstützen keine Assertions. • Der obige Test muss entweder mit Triggers oder in der Applikation durchgeführt werden. 7.51 7.52 Schwache Entitätsmengen (2) Vom ERM zum Datenbankschema Generalisierung und Spezialisierung Vom ERM zum Datenbankschema Pierre Fierz Angehöriger eines Mitarbeiters Pierre Fierz Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • 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. CREATE TABLE Angehöriger ( mNr INTEGER REFERENCES Mitarbeiter(mNr), Vorname VARCHAR(30), -- ... (weitere Attribute) • 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. PRIMARY KEY (mNr, Vorname) • 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.53 Generalisierung und Spezialisierung (2) Vom ERM zum Datenbankschema 7.54 Generalisierung und Spezialisierung (3) Vom ERM zum Datenbankschema Pierre Fierz Vertikale Darstellung Pierre Fierz • In dieser Darstellung ist nur der Fall {incomplete, overlapping} abgedeckt. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) • Für die anderen Fälle braucht es Assertions: Disjoint Views Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE pNr Titel ); CREATE TABLE pNr Datendefinitionssprache (SQL/DDL) Publikation ( INTEGER PRIMARY KEY, VARCHAR(30) NOT NULL 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 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 7.56 Generalisierung und Spezialisierung (4) Vom ERM zum Datenbankschema 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 ); Beziehungsmengen Pierre Fierz Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views • Für Beziehungen gibt es im wesentlichen zwei Fälle: 1:M und M:M • Zusätzlich können die Kardinalitäten noch konditionell ERD und Datenbankschema Überprüfen der 3NF sein. 1:M und M:M Beziehungen 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 1:M Vom ERM zum Datenbankschema Pierre Fierz • In diesem Fall kann die Beziehung durch einen Fremdschlüssel realisiert werden. Mitarbeiter Abteilung Beziehungsmengen M:M Pierre Fierz eingeführt werden. • Die Tabelle enthält zwei Fremdschlüssel, die zusammen Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) den Primärschlüssel bilden. Mitarbeiter und Projekte Views CREATE TABLE Abteilung ( aNr INTEGER PRIMARY KEY, . . ); Vom ERM zum Datenbankschema • Für eine M:M Beziehung muss eine neue Tabelle • Der Fremdschlüssel wird in der Tabelle auf der M-Seite eingefügt. 7.58 Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, ... ); ERD und Datenbankschema Überprüfen der 3NF CREATE TABLE Projekt ( pNr INTEGER PRIMARY KEY, ... ); CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, aNr INTEGER NOT NULL REFERENCES Abteilung(aNr), . . ); CREATE TABLE MitProj ( mNr INTEGER REFERENCES Mitarbeiter(mNr), pNr INTEGER REFERENCES Projekt(pNr), PRIMARY KEY (mNr, pNr) ); • 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 • 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) 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) Integritätsbedingungen (Constraint) Views Views ERD und Datenbankschema ERD und Datenbankschema Überprüfen der 3NF Überprüfen der 3NF CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, ... ); CREATE TABLE Abteilung ( aNr INTEGER PRIMARY KEY, mNr INTEGER UNIQUE REFERENCES Mitarbeiter(mNr), leitetSeit DATE, ... ); CREATE TABLE Projekt ( pNr INTEGER PRIMARY KEY, ... ); CREATE TABLE MitProj ( mNr INTEGER REFERENCES Mitarbeiter(mNr), pNr INTEGER REFERENCES Projekt(pNr), wochenstunden FLOAT NOT NULL, CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, ... ); PRIMARY KEY (mNr, pNr) ); 7.61 Outline Vom ERM zum Datenbankschema 7.62 Lokale Betrachtungen Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz • Die Transformation des ERM in ein Datenbankschema 1 Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) 2 Integritätsbedingungen (Constraint) erfolgt im Prinzip nach dem Syntheseverfahren. • Mit den folgenden Annahmen entsteht ein Datenbankschema in dritter Normalform: Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views • Alle Attribute einer Entität sind voll vom Entitätsschlüssel Views ERD und Datenbankschema funktional abhängig. • In einer Entität gibt es keine transitiven funktionalen Abhängigkeiten. ERD und Datenbankschema Überprüfen der 3NF 3 Views Ü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 4 ERD und Datenbankschema werden. • Die Abhängigkeit ist im ERM als Integritätsbedingung 5 Überprüfen der 3NF formuliert. • In diesem Fall muss diese Abhängigkeit im Datenbankschema nach den Regeln der Normalisierung eliminiert werden. 7.63 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 Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Zusätzlich sei die folgende Integritätsbedingung im ERM angegeben: Globale Betrachtungen Überprüfen der 3NF • 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 (∀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) ); 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 CREATE TABLE Ort( oNr INTEGER PRIMARY KEY, Ort VARCHAR(30) NOT NULL UNIQUE, Distanz FLOAT NOT NULL ); 7.65 Globale Betrachtungen (2) Vom ERM zum Datenbankschema 7.66 Globale Betrachtungen (3) Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz • Aus dem vorigen ERM entsteht nun das folgende Datenbankschema: Datenbankschema Mitarbeiter, Maschine und Produkt CREATE TABLE Mitarbeiter ( mNr INTEGER PRIMARY KEY, ... ); • In unserem Beispiel verletzt die Tabelle Produkt die 3NF Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) • Es gilt die FD maNr → mNr und somit ist mNr von prNr transitiv abhängig. Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views • Die FD ist schon in der Tabelle Maschine festgehalten. Views ERD und Datenbankschema • In beiden Tabellen hat die FD die semantische Bedeutung ERD und Datenbankschema Überprüfen der 3NF “Maschine wird von einem Mitarbeiter bedient” Überprüfen der 3NF • In diesem Fall können wir mNr aus der Tabelle Produkt CREATE TABLE Produkt ( prNr INTEGER PRIMARY KEY, maNr INTEGER REFERENCES Maschine(maNr) mNr INTEGER REFERENCES Mitarbeiter(mNr) ... ); 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. CREATE TABLE Maschine ( maNr INTEGER PRIMARY KEY, mNr INTEGER REFERENCES Mitarbeiter(mNr) ... ); • Zum Beispiel könnte mit mNr der Mitarbeiter bezeichnet sein, der das Produkt verkauft. 7.67 7.68 Globale Betrachtungen (4) • 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). Vom ERM zum Datenbankschema Betrachtungen zur 4NF Vom ERM zum Datenbankschema Pierre Fierz Pierre Fierz Datendefinitionssprache (SQL/DDL) Datendefinitionssprache (SQL/DDL) Integritätsbedingungen (Constraint) Views ERD und Datenbankschema Überprüfen der 3NF • 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. • Damit die 3NF verletzt ist, muss in beiden Tabellen eine • Alle anderen Tabellen sollten keine MVDs mehr enthalten, entsprechende FD existieren (maNr → mNr ). falls das ERM richtig aufgebaut ist. • Beide FDs müssen denselben semantischen Sachverhalt darstellen (“Maschine wird von einem Mitarbeiter bedient”) 7.69 7.70