00 einstieg mysql

Werbung
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
Herunterladen