Beziehungen mit Referentieller Integrität herstellen Detailtabelle Primary Key e Mastertabelle 57 ke Datenbankentwicklung mit MySQL und ACCESS 2003 rg er .d Foreign Key w w w .e Beziehungen mit Referentieller Integrität Datenbankentwicklung mit MySQL und ACCESS 2003 Referentielle Integrität wir von MySQL nur dann gewährleistet, wenn als Tabellentyp InnoDB gewählt wird s. o.) 58 Beziehungen mit Referentieller Integrität 1. Erstellen Sie eine Datenbank [ihrname]fuhrpark! 2. Legen Sie eine Tabelle fahrzeuge mit folgenden Attributen an: fznr zahlen, primärschlüssel, startwert 1000 kennzeichen max. 10 zeichen, eingabe erforderlich typ max. 10 zeichen, eingabe erforderlich hstnr 2 zeichen, eingabe erforderlich, fremdschlüssel kw ganzzahl ps ganzzahl zulassung datum 59 ke Datenbankentwicklung mit MySQL und ACCESS 2003 rg er .d e 3. Legen Sie eine Tabelle hersteller mit folgenden Attributen an: hstnr 2 zeichen, eingabe erforderlich, primärschlüssel herstellername max. 25 zeichen, eingabe erforderlich firmensitz max. 25 zeichen, eingabe erforderlich ansprechpartner max. 25 zeichen, eingabe erforderlich telefon max. 15 zeichen, email max. 25 zeichen w w w .e Beziehungen mit Referentieller Integrität - ÜB fahrzeuge Attribute fznr Datentyp Größe int Default not null unique X X X kennzeichen varchar 10 X typ varchar 10 X char 2 X hstnr kw ps zulassung Beschreibung primary key,ai fk tb hersteller int unsigned int unsigned date Datenbankentwicklung mit MySQL und ACCESS 2003 60 Beziehungen mit Referentieller Integrität - ÜB hersteller Datentyp Größe char 2 X herstellername varchar 25 X firmensitz varchar 2 X ansprechpartner varchar 25 X telefon varchar 15 X email varchar 25 X not null unique Beschreibung primary key 61 ke Datenbankentwicklung mit MySQL und ACCESS 2003 rg er .d hstnr Default e Attribute Beziehungen mit Referentieller Integrität - SQL w w w .e create database kergerfuhrpark; /* erstellt 2010-01-108 von kerger */ use kergerfuhrpark; create table fahrzeuge /* tabelle fahrzeuge wird angelegt */ ( fznr int not null unique, /* primary key */ kennzeichen varchar(10) not null unique, typ varchar(10) not null unique, hstnr char(2) not null, /* foreign key table hersteller(hstnr) */ kw integer unsigned not null, ps integer unsigned not null, zulassung date, primary key(fznr), foreign key(hstnr) references hersteller(hstnr) on delete restrict #on update cascade, ) auto_increment=1000; show columns from fahrzeuge; /* attribute der tabelle fahrzeuge werden angezeigt */ Datenbankentwicklung mit MySQL und ACCESS 2003 62 Beziehungen mit Referentieller Integrität - SQL Für Aktualisierungen des Primärschlüssels in der Parent-Tabelle sind folgende Optionen möglich: • ON UPDATE CASCADE (Aktualisierungsweitergabe) bedeutet, dass die Aktualisierung auch an den Fremdschlüsseln der Child-Tabelle vorgenommen wird. • ON UPDATE RESTRICT (Aktualisierungsrestriktion) bedeutet: Wenn ein Schlüssel in der Parent-Tabelle geändert werden soll, und es existieren abhängige Sätze in der Child-Tabelle, dann wird die Änderung verweigert. Für Löschungen in der Parent-Tabelle sind folgende Optionen möglich: .d e • ON DELETE CASCADE (Löschweitergabe) bedeutet, es werden auch alle Sätze in der Child-Tabelle gelöscht, die auf diesen Schlüssel referenzieren. er • ON DELETE RESTRICT (Löschrestriktion) bedeutet: wenn ein Satz in der ParentTabelle gelöscht werden soll und es existieren abhängige Sätze in der Child-Tabelle, dann wird die Löschung verweigert. 63 ke Datenbankentwicklung mit MySQL und ACCESS 2003 rg • ON DELETE SET NULL (Nullifies) bedeutet: wenn ein Satz in der Parent-Tabelle gelöscht werden soll und es existieren abhängige Sätze in der Child-Tabelle, dann wird in diese Fremdschlüssel NULL eingetragen w w w .e Beziehungen mit Referentieller Integrität - SQL create table hersteller /* tabelle hersteller wird angelegt */ ( hstnr char(2) not null unique, /* primary key */ herstellername varchar(25) not null, firmensitz varchar(25) not null, ansprechpartner varchar(25) not null, telefon varchar(15) not null, email varchar(25) not null, primary key(hstnr) ); show columns from hersteller; /* attribute der tabelle hersteller werden angezeigt */ Wichtig: Primärschlüssel und Fremdschlüssel müssen den identischen Datentyp haben, mit Ausnahme der auto_increment Anweisung, auf den Fremdschlüssel sollte immer ein Index gesetzt werden! Datenbankentwicklung mit MySQL und ACCESS 2003 64 er .d e Beziehungen mit Referentieller Integrität - SQL 65 ke Datenbankentwicklung mit MySQL und ACCESS 2003 rg Darstellung der hergestellten 1: n-Beziehung in MySQLYog-Enterprise! w w w .e Beziehungen mit Referentieller Integrität - ÜB In einer Datenbank gibt es zwei Tabellen, mit deren Hilfe Musik-CDs und ihre Inhalte verwaltet werden. Die Tabelle cd hat dabei die Spalten cdnr, cdtitel, interpret und preis. cdnr soll einen Startwert von 1000 zugewiesen bekommen! Die Tabelle tracks hat die Spalten tracknr, , tracktitel, cdnr und tracklaenge. Wie Sie sich sicher schon gedacht haben, ist die Spalte cdnr der Primärschlüssel der Tabelle cd. Er wird vom Fremdschlüssel cdnr aus der Tabelle tracks referenziert. tracknr soll einen Startwert von 100 zugewiesen bekommen! 1. Erstellen Sie eine Datenbank [ihrnamecd]! 2. Erstellen Sie eine neue Tabelle mit dem Namen cd! Wählen Sie geeignete Datentypen. 3. Erstellen Sie eine neue Tabelle mit dem Namen track! Wählen Sie geeignete Datentypen. 4. Stellen Sie Referentielle Integrität her! Datenbankentwicklung mit MySQL und ACCESS 2003 66 Beziehungen mit Referentieller Integrität - ÜB cd Datentyp Größe Datentyp Größe Default not null tracks not null unique .d Default Beschreibung Beschreibung w w w .e ke Datenbankentwicklung mit MySQL und ACCESS 2003 rg er Attribute unique e Attribute 67