Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Erhard Künzel für Info 9. Klasse: © Erhard Künzel für digitale-schule-bayern.

Ähnliche Präsentationen


Präsentation zum Thema: "Erhard Künzel für Info 9. Klasse: © Erhard Künzel für digitale-schule-bayern."—  Präsentation transkript:

1 Erhard Künzel für Info 9. Klasse: © Erhard Künzel für digitale-schule-bayern

2 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

3 Eine dynamisch aufgebaute Seite Dahinter steckt sicher eine Datenbank © Erhard Künzel für digitale-schule-bayern Bildquelle: shop.hm.com

4 Wir interessieren uns für Sonderangebote Aber nicht nur für Männer © Erhard Künzel für digitale-schule-bayern Bildquelle: shop.hm.com

5 Stöbere ein wenig im Outlet Überlege dann, welche Datentabellen du anlegen würdest. Schreibe drei Klassen auf! © Erhard Künzel für digitale-schule-bayern Bildquelle: shop.hm.com

6 Herren … … Oberteile … … Unterteile … … Hemd … … Blazer … … © Erhard Künzel für digitale-schule-bayern Bildquelle: shop.hm.com

7 … … 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

8 TID: 2 Damen Name: Damen … … KID: 17 Tops Name: Tops TID: 2 AID: 562 Trägertop Name: Trägertop KID: 17 TID Name … KUNDENTYP INT VARCHAR… 2 2 Damen KID Name INT VARCHAR 17 Tops TID INT 2 2 KATEGORIE AID Name … INT VARCHAR 562 Trägertop… KID INT 17 ARTIKEL Fehlerquelle: Der Fremdschlüssel hat den gleichen Datentyp wie der referenzierte Primärschlüssel! Ändern der TID ? 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?

9 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

10 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

11 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

12 TID Name … KUNDENTYP 2 2 Damen KID Name 17 Tops TID 2 2 KATEGORIE AID Name … 562 Trägertop … KID 17 ARTIKEL 3 3 Herren 23 Hosen 2 2 25 Sport 2 2 693 Pulli … 17 448 Jogginghose 25 © Erhard Künzel für digitale-schule-bayern

13 TID Name … KUNDENTYP 2 2 Damen KID Name 17 Tops TID 2 2 KATEGORIE AID Name … 562 Trägertop … KID 17 ARTIKEL 3 3 Herren 23 Hosen 2 2 25 Sport 2 2 693 Pulli … 17 448 Jogginghose 25 Löschen dieses Datensatzes ist unmöglich Der könnte noch gelöscht werden Kann nicht in 4 geändert werden © Erhard Künzel für digitale-schule-bayern

14 KID Name 17 Tops TID 2 2 KATEGORIE AID Name … 562 Trägertop … KID 17 ARTIKEL 23 Hosen 2 2 25 Sport 2 2 693 Pulli … 17 448 Jogginghose 25 Tops für ??? © Erhard Künzel für digitale-schule-bayern

15 KID Name 17 Tops TID NULL KATEGORIE AID Name … 562 Trägertop … KID 17 ARTIKEL 23 Hosen NULL 25 Sport NULL 693 Pulli … 17 448 Jogginghose 25 SELECT * FROM KATEGORIE WHERE TID IS NULL SELECT * FROM KATEGORIE WHERE TID IS NULL © Erhard Künzel für digitale-schule-bayern

16 TID Name … KUNDENTYP KID Name TID KATEGORIE AID Name … KID ARTIKEL 3 3 Herren Damen gelöscht Alle referenzierten Kategorien weg! Auch alle referenzierten Artikel weg!

17 TID Name … KUNDENTYP 5 5 Damen KID Name 17 Tops TID 5 5 KATEGORIE AID Name … 562 Trägertop … KID 17 ARTIKEL 3 3 Herren 23 Hosen 5 5 25 Sport 5 5 693 Pulli … 17 448 Jogginghose 25 © Erhard Künzel für digitale-schule-bayern Wenn man das ändert, … … dann ändert sich das automatisch!

18 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

19 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


Herunterladen ppt "Erhard Künzel für Info 9. Klasse: © Erhard Künzel für digitale-schule-bayern."

Ähnliche Präsentationen


Google-Anzeigen