Erhard Künzel für Info 9. Klasse: © Erhard Künzel für digitale-schule- bayern
Erhard Künzel für Info 9. Klasse:
© Erhard Künzel für digitale-schule-bayern
0 Realisierung von Beziehungen durch Fremdschlüssel
1 Konsistenzprobleme bei Fremdschlüsseln
2 Möglichkeiten, die das Datenbankmanagement-system bietet (Cascade ...).
© Erhard Künzel für digitale-schule-bayern
Eine dynamisch aufgebaute SeiteEine dynamisch
aufgebaute Seite
Dahinter steckt sicher eine Datenbank
Dahinter steckt sicher eine Datenbank
© Erhard Künzel für digitale-schule-bayern
Bildquelle: shop.hm.com
Wir interessieren uns für
Sonderangebote
Wir interessieren uns für
Sonderangebote
Aber nicht nur für Männer
Aber nicht nur für Männer
© Erhard Künzel für digitale-schule-bayern
Bildquelle: shop.hm.com
Stöbere ein wenig im Outlet
Stöbere ein wenig im Outlet
Überlege dann, welche
Datentabellen du anlegen würdest.
Überlege dann, welche
Datentabellen du anlegen würdest.
Schreibe drei Klassen auf!Schreibe drei Klassen auf!
© Erhard Künzel für digitale-schule-bayern
Bildquelle: shop.hm.com
Herren……
Oberteile
……
Unterteile
……
Hemd……
Blazer……
© Erhard Künzel für digitale-schule-bayern
Bildquelle: shop.hm.com
……
KUNDENTYP 1 <für
braucht> n
……
KATEGORIE
……
ARTIKEL hat > n
1 <gehörtZu
Herren
……
Oberteile
……
Unterteile
……
Hemd
……
Blazer
……
© Erhard Künzel für digitale-schule-bayern
TID: 2TID: 2Damen
Name: DamenName: Damen
… …
KID: 17KID: 17Tops
Name: TopsName: Tops
TID: 2 TID: 2
AID: 562AID: 562Trägertop
Name: TrägertopName: TrägertopKID: 17 KID: 17
TID TID Name …Name …
KUNDENTYP
INTINT VARCHAR…VARCHAR…
2 2 Damen Damen
KID KID NameName
INTINT VARCHARVARCHAR
17 17 TopsTops
TIDTID
INTINT
22
KATEGORIE
AID AID Name …Name …
INTINT VARCHARVARCHAR
562562 Trägertop… Trägertop…
KID KID
INTINT
17 17
ARTIKEL
Fehlerquelle: Der
Fremdschlüssel hat den gleichen
Datentyp wie der
referenzierte Primärschlüss
el!
Fehlerquelle: Der
Fremdschlüssel hat den gleichen
Datentyp wie der
referenzierte Primärschlüss
el!
Ändern der TID ?
Ändern der TID ?
Löschen dieses
Datensatzes?
Löschen dieses
Datensatzes?
© Erhard Künzel für digitale-schule-bayern
Einfügen der Kategorie Tops wenn es den
Kundentyp „Damen“ noch nicht gibt?
Einfügen der Kategorie Tops wenn es den
Kundentyp „Damen“ noch nicht gibt?
CREATE TABLE Typ ( TID int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(30) DEFAULT NULL) ENGINE=InnoDB;CREATE TABLE Kategorie ( KID int NOT NULL AUTO_INCREMENT PRIMARY
KEY, Name varchar(30) DEFAULT NULL,
TID int, KEY (TID),CONSTRAINT FOREIGN KEY (TID) REFERENCES typ (TID) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB;
© Erhard Künzel für digitale-schule-bayern
CREATE TABLE artikel ( AID int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(30) DEFAULT NULL,
KID int, KEY (KID),CONSTRAINT FOREIGN KEY (KID) REFERENCES kategorie (KID) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB;
Füge mindestens drei Datensätze in jede Tabelle ein. Mache dann einen SQL-Dump damit du nach Löschen
wieder deine Tabellen und Daten hast.
© Erhard Künzel für digitale-schule-bayern
Versuche in Kundentyp und in Kategorie Datensätze zu löschen, auf die sich andere Datensätze mit Fremdschlüsseln beziehen.
Statt ON DELETE RESTRICT probiere dann ON DELETE NO ACTION oder ON DELETE SET NULL oder ON DELETE CASCADE.
Du solltest bei jeder Variante erst die Datentabellen mit dem SQL-Dump neu erstellen.
© Erhard Künzel für digitale-schule-bayern
TID TID Name …Name …
KUNDENTYP
2 2 Damen Damen
KID KID NameName
17 17TopsTops
TIDTID
22
KATEGORIE
AID AID Name …Name …
562562 Trägertop … Trägertop …
KID KID
17 17
ARTIKEL
3 3 Herren Herren 2323HosenHosen22
2525SportSport22
693693 Pulli … Pulli … 17 17
448448 Jogginghose Jogginghose2525
© Erhard Künzel für digitale-schule-bayern
TID TID Name …Name …
KUNDENTYP
2 2 Damen Damen
KID KID NameName
17 17TopsTops
TIDTID
22
KATEGORIE
AID AID Name …Name …
562562 Trägertop … Trägertop …
KID KID
17 17
ARTIKEL
3 3 Herren Herren 2323HosenHosen22
2525SportSport22
693693 Pulli … Pulli … 17 17
448448 Jogginghose Jogginghose2525
Löschen dieses
Datensatzes ist unmöglich
Löschen dieses
Datensatzes ist unmöglich
Der könnte noch gelöscht
werden
Der könnte noch gelöscht
werden
Kann nicht in 4 geändert
werden
Kann nicht in 4 geändert
werden
© Erhard Künzel für digitale-schule-bayern
KID KID NameName
17 17TopsTops
TIDTID
22
KATEGORIE
AID AID Name …Name …
562562 Trägertop … Trägertop …
KID KID
17 17
ARTIKEL
2323HosenHosen22
2525SportSport22
693693 Pulli … Pulli … 17 17
448448 Jogginghose Jogginghose2525
Tops für ???Tops für ???
© Erhard Künzel für digitale-schule-bayern
KID KID NameName
17 17TopsTops
TIDTIDNULLNULL
KATEGORIE
AID AID Name …Name …
562562 Trägertop … Trägertop …
KID KID
17 17
ARTIKEL
2323HosenHosenNULLNULL
2525SportSportNULLNULL
693693 Pulli … Pulli … 17 17
448448 Jogginghose Jogginghose2525
SELECT * FROM KATEGORIEWHERE TID IS NULL
SELECT * FROM KATEGORIEWHERE TID IS NULL
© Erhard Künzel für digitale-schule-bayern
© Erhard Künzel für digitale-schule-bayern
TID TID Name …Name …
KUNDENTYP
KID KID NameNameTIDTID
KATEGORIE
AID AID Name …Name …KID KID
ARTIKEL
3 3 Herren Herren
Damen gelöschtDamen gelöscht
Alle referenzierten Kategorien weg!
Alle referenzierten Kategorien weg!
Auch alle referenzierten Artikel weg!
Auch alle referenzierten Artikel weg!
TID TID Name …Name …
KUNDENTYP
55 Damen Damen
KID KID NameName
17 17TopsTops
TIDTID
55
KATEGORIE
AID AID Name …Name …
562562 Trägertop … Trägertop …
KID KID
17 17
ARTIKEL
3 3 Herren Herren 2323HosenHosen55
2525SportSport55
693693 Pulli … Pulli … 17 17
448448 Jogginghose Jogginghose2525
© Erhard Künzel für digitale-schule-bayern
Wenn man das ändert, …Wenn man das ändert, …
… dann ändert sich das automatisch!
… dann ändert sich das automatisch!
Das Datenbankmanagementsystem überwacht Änderungen an Daten, auf die sich Fremdschlüssel beziehen.
Bei Restrict erlaubt es Änderungen / Löschungen nicht (meist die beste Wahl).
No Action ist selten sinnvoll. On Update Cascade kann sinnvoll sein, On
Delete Cascade kann viel löschen (Programmierer feuern!).
On Delete Set Null ist oft die beste Alternative zu On Delete Cascade.
© Erhard Künzel für digitale-schule-bayern
Wir prüfen, wie bei Set-Angeboten (Hose + Top als 1:1-Beziehung zwischen Artikeln) die Fremdschlüssel behandelt werden sollten.
Auf einer Bestellung stehen mehrere Artikel, ein Artikel kann auf mehreren Bestellungen stehen. Diese m:n-Beziehung sollst du untersuchen. Wo sind Fremdschlüssel? Was macht das System beim Löschen eines Artikels oder einer Bestellung bei Restrict oder Cascade?
© Erhard Künzel für digitale-schule-bayern