(Vom ER-Modell zum) relationalen Datenmodell Patrick Boekhoven https://www.youtube.com/watch?v=Asb6OaWqbv4 Transkript (automatisch erstellt) 0:00 So, moin moin! Schön, dass ihr wieder dabei seid. In diesem Video werden wir uns mit dem relationalen Datenmodell auseinandersetzen, also das Modell, was wir brauchen, wenn es um die 0:09 konkrete Implementierung unserer Datenbank geht. An der Stelle ein Hinweis: Wenn ihr im vorherigen Teil, also in dem Unfall-Linken Video, noch nicht reingeschaut habt, dann haben wir uns mit dem 0:18 ER-Modell auseinandergesetzt. Und das stellt die Grundlage für dieses Video dar bzw. in dem Video ging es darum, wie wir ein Datenbankdesign können, ohne dabei wirklich auf die Details einzugehen. 0:28 Und ihr könnt euch vorstellen, das ist natürlich von Vorteil, wenn man erstmal loslegen kann, ohne dass man auf jedes Detail achten muss. Aber alle Theorie und alle Abstraktionen nutzen natürlich 0:37 nichts, sondern in der Praxis müssen wir konkret werden. Und genau das wollen wir in diesem Video einmal ändern. Deswegen wird aus unserem Modell aus dem ersten Teil jetzt ein relationales Modell. 0:47 Denn das ermöglicht uns, unser abstraktes Modell in eine konkrete Implementierung zu überführen. Und das klingt jetzt tatsächlich echt ein bisschen kompliziert, als es eigentlich ist. Und wir tasten 0:56 uns jetzt ganz langsam dran. In unserem vorherigen Teil haben wir die Entitätstypen Kunde, Bestellung und Artikel vorgefunden bzw. diese Entitätstypen haben wir in unserem Modell modelliert. Und diese 1:08 Entitätstypen, inklusive der Beziehungen, die ihr dazwischen seht, also "tätigt" und "enthält", stellen jetzt die Grundlage für das relationale Datenmodell da. Und wir beginnen mit Schritt 1:19 eins. Und da geht es darum, dass wir für jeden Entitätstyp eine Tabelle mit den technischen Details erstellen. Und wir starten dafür mit dem Kunden. Und ihr seht, wir haben ja schon die 1:28 Tabelle "Kunde" für unser relationales Datenmodell modelliert. Und oben in der obersten Spalte findet sich der Name der Tabelle wieder. Und jede dieser Zahlen steht dann später für eine Spalte 1:38 der Tabelle. Und in der zweiten Spalte findet sich dann jeweils der Name der Spalte wieder. Soweit keine neuen Informationen bzw. soweit sind wir jetzt gar nicht konkreter geworden. Das ist 1:49 richtig. Aber wenn ihr jetzt aber recht schaut, dann seht ihr, dass wir hier Datentypen vorfinden. Für die Kundennummer nehmen wir also eine ganze Zahl. Für den Namen und für den Vornamen jeweils 2:00 eine Zeichenkette mit 40 Zeichen. Und hier sind wir jetzt schon deutlich konkreter geworden. Denn wir haben hier die Datentypen für unsere einzelnen Spalten definiert. Und ganz rechts sind wir sogar 2:11 noch weiter gegangen. Wir haben angegeben, dass es sich um einen Auto-Inkrement-Wert handelt. Also einen Wert, der automatisch hochzählt. Und natürlich gehört zu jeder Tabelle, 2:20 die wir definieren, auch der Primärschlüssel. Und den kennzeichnen wir durch ein "PK" in der ganzen linken Spalte. Also alles, was die Schlüssel angeht, dafür nutzen wir die Spalte, 2:30 die wir ganz links vorfinden. Und wenn wir uns jetzt mal zurück erinnern: Wir hatten in unserem Modell den Entitätstyp "Kunde" mit der Kundennummer, den Namen und dem Vornamen zur 2:39 Verfügung bzw. wir wussten, dass die Kundennummer den Primärschlüssel darstellt. Und jetzt wissen wir schon, um welche Datentypen es sich hierbei handelt. Und das, was ein Auto-Inkrement-Wert 2:49 bedeutet, wissen wir auch. Das heißt, wir sind in Sachen Implementierung jetzt wirklich weiter ins Detail gegangen. Und nochmal zum Verständnis: Wenn wir das jetzt genauso umsetzen würden, 2:57 dann würde unsere Tabelle "Kunde" folgendermaßen aussehen: Hier die Spalten "Kundennummer", "Name" und "Vorname" zur Verfügung. Und darunter findet ihr dann, wie ihr das aus der normalen Datenbank 3:07 kennt, die einzelnen Datensätze wieder. Und dann geht es weiter mit unserem zweiten Entitätstyp, also mit der Bestellung. Und hier nutzen wir bzw. als Attribute benötigen wir hier 3:17 die "Bestellnummer" und das "Datum". Bei den Datentypen dürfen sich hier keine weiteren Überraschungen befinden. Also, als "Bestellnummer" nehmen wir natürlich auch eine Ganzzahl. Und für 3:26 das "Datum" – ja, ihr könnt euch denken – ein Datum. Und es gab auch keine Begründung, hier bei der Bestellnummer nicht auf einen Auto-Inkrement-Wert zurückzugreifen. Dass die 3:37 Bestellnummer jetzt den Primärschlüssel darstellt, ist jetzt wahrscheinlich auch keine Überraschung. Und dann müssen wir uns nochmal um den Artikel bzw. um den Entitätstyp "Artikel" kümmern. Und 3:46 hier haben wir wieder die "Artikelnummer", die den Primärschlüssel darstellt. Und logischerweise vergeben wir hier wieder mit "Auto-Inkrement" einen automatisch generierten Wert. Dann folgt 3:55 die "Bezeichnung" mit einem "varchar". Und hier nutzen wir auch 40 Zeichen. Und ganz rechts findet ihr jetzt "unique", also einzigartig. Also das technische Detail, dass wir diese Bezeichnung 4:06 nur einmal vergeben dürfen. Und darunter findet sich dann der "Preis". Und hier nutzen wir eine Zahl mit sechs Stellen vor dem Komma und zwei Stellen nach dem Komma. Und damit haben wir den 4:17 ersten Schritt hinter uns gebracht. Wir haben für jeden Entitätstyp eine Tabelle erstellt und sind technisch schon sehr stark ins Detail gegangen. Aber jetzt kommen wir zum zweiten Schritt, 4:26 und zwar zum Identifizieren der Beziehung und Übertragung auf unserem Datenmodell. Und wir starten mit der Beziehung zwischen dem Kunden und der Bestellung. Und hier handelt es sich 4:35 um eine 1:1-Beziehung. Und das impliziert bzw. das bedeutet, dass ein Kunde null, eine oder mehrere Bestellungen getätigt haben kann und eine Bestellung wird immer von einem Kunden getätigt. 4:48 Also eine Bestellung wird immer genau einem Kunden zugeordnet. Und diese Art der Beziehung, wo ihr auf der einen Seite die Eins und auf der anderen Seite das N habt, die ist noch recht 4:58 leicht aufzulösen. Denn in dem Fall müsst ihr den Primärschlüssel auf der Seite der Eins, also in dem Fall vom Kunden, als Fremdschlüssel auf der Seite, wo das Entsteht, einbauen. Nochmal kurz 5:10 zur Erinnerung: Ein Primärschlüssel identifiziert einen Datensatz und ist natürlich einzigartig. Also beispielsweise unsere Kundennummer, die gibt es nur ein einziges Mal. Und ein Fremdschlüssel, 5:21 der referenziert einen Primärschlüssel. So zeigt er auf einen Primärschlüssel. Und in der Tabelle "Bestellung" da nutzen wir jetzt den Fremdschlüssel und in dem Fall "Kundennummer". 5:30 Und dieser referenziert jetzt die "Kundennummer" aus der Tabelle "Kunde". Was jetzt bedeutet, wenn ich in der Tabelle "Bestellung" bei "Kundennummer" die Eins eintrage, dann referenziert dieser Wert 5:41 den Kunden mit der Kundennummer Eins aus der Tabelle "Kunde". Und wir haben gesagt, die ganz linke Spalte in unserem relationalen Datenmodell, die nutzen wir für die Schlüssel. Und wir haben 5:51 jetzt ja auch festgestellt, die handelt es sich nicht um einen Primärschlüssel, also nicht um den Primärschlüssel, sondern um den Fremdschlüssel. Also FK für Fremdschlüssel. Und das Ganze 6:03 verbinden wir jetzt noch und zwar mit Linien, damit wir wissen, dass eine Referenz besteht. Also von der "Kundennummer" aus der Tabelle "Kunde" zur "Kundennummer" in der Tabelle "Bestellung". 6:14 Und dann haben wir unsere 1:1-Beziehung schon aufgelöst. Denn jetzt kann die "Kundennummer" in der Tabelle "Kunde" logischerweise nur einmal vorkommen, aber unsere "Kundennummer" in der 6:25 Tabelle "Bestellung", die kann unendlich häufig vorkommen. Was bedeutet, dass unsere Kunden auch unendlich viele Bestellungen tätigen können. Und dann müssen wir uns noch um die N:M-Beziehung, 6:34 also zwischen Artikel und Bestellung, kümmern. Und das ist ein klein wenig komplizierter, denn unsere relationalen Datenbanken, die können nur mit 1:N bzw. 1:1-Beziehungen direkt umgehen. 6:44 Und deswegen müssen wir aus dieser N:M-Beziehung zwei 1:N-Beziehungen basteln. Und das machen wir, indem wir eine neue Tabelle anlegen und die nennen wir dann "BestellungArtikel". Und in 6:56 dieser Tabelle "BestellungArtikel" finden sich die "Bestellnummer" und die "Artikelnummer" wieder, die gleichzeitig den Primärschlüssel darstellen. Das bedeutet, die Attributkombination 7:06 "Bestellnummer" und "Artikelnummer" darf nur ein einziges Mal vorkommen und identifiziert diesen Datensatz dann zweifelsfrei. Und bei der "Bestellnummer" als auch bei der "Artikelnummer" 7:16 handelt es sich logischerweise um eine Ganzzahl und auch um einen Fremdschlüssel. Womit wir dann das, was wir bei der 1:N bzw. 1:1-Beziehung gerade gemacht haben, hier wiederholen. Wir holen uns 7:27 hier jeweils den Fremd- bzw. den Primärschlüssel aus seiner Tabelle und nutzen den hier in zweifacher Form als Fremdschlüssel in unserer Tabelle wieder. Und damit können wir jetzt das 7:36 N bzw. das M abbilden. Also, das eine Bestellung mehrere Artikel haben kann und ein Artikel bzw. die Artikel in mehreren Bestellungen enthalten sein können. Und dann verbinden wir das Ganze 7:49 noch, also dass wir wissen, dass eine Referenz besteht. Also von der "Bestellnummer" aus der Tabelle "BestellungArtikel" zur "Bestellnummer" in der Tabelle "Bestellung" und von der 7:57 "Artikelnummer" in der Tabelle "BestellungArtikel" zur "Artikelnummer" in der Tabelle "Artikel". Und damit haben wir unsere N:M-Beziehung in zwei 1:N-Beziehungen aufgelöst. 8:11 Und ich würde sagen, damit sind wir fertig. Wir haben jetzt aus unserem abstrakten Modell ein relationales Modell gemacht. Und damit könnten wir jetzt theoretisch schon unsere Datenbank anlegen. 8:23 Aber wir werden noch ein Stückchen weitergehen und in dem nächsten Video schauen wir uns mal an, was wir jetzt mit dem Modell eigentlich machen können.