====== Relationen zur Vermeidung von Redundanzen ====== Wir optimieren die Bücher-Datenbank, indem wir die Informationen in die Tabellen Buch, Verlag und Ausleiher aufteilen. Damit die Information, welcher Ausleiher welches Buch entliehen hat und welches Buch in welchem Verlag erschienen ist, erhalten bleibt, führen wir die **Fremdschlüsselspalten** VerlagId und AusleiherId in der Tabelle Buch ein. \\ Die Zusammenhänge "Verlag gibt Buch heraus" und "Ausleiher leiht Buch aus" nennt man **Relationen**. {{ :jg10:einszun:pasted:20220917-132602.png }} ===== 1:n - Relationen im Klassendiagramm ===== {{ :jg10:einszun:pasted:20220917-134528.png }} **Relationen** werden im Klassendiagramm als gerade Verbindung zweier Klassen dargestellt. Auf/neben die Verbindung schreiben wir ein Verb, das die Relation kennzeichnet sowie einen ausgefüllten "Dreieckspfeil", der die Leserichtung des Verbs angibt. \\ \\ Unter die Verbindung schreiben wir die **Kardinalität** der Relation. Dadurch machen wir beispielsweise kenntlich, dass * Ein Verlag **beliebig viele ("n")** Bücher herausgibt und \\ ein Buch von **genau einem ("1")** Verlag herausgegeben wird. * Ein Ausleiher **beliebig viele ("n")** Bücher ausleihen kann und \\ ein Buch gerade von **einem oder keinem ("0..1")** Ausleiher entliehen sein kann. Steht ein Objekt der Klasse A zu vielen Objekten der Klasse B in Beziehung, ein Objekt der Klasse B aber zu höchstens einem der Klasse A, so spricht man von einer **1:n-Beziehung**. ===== Aufgabe 1 ===== Zeichne zu folgenden Relationen das Klassendiagramm (jede Klasse mit mindestens zwei Attributen) und schreibe das Tabellenschema auf: * a) Schülerin besucht Klasse * b) Fahrzeug ist zugelassen auf Halterin * c) Smartphone hat Port \\ \\ === Beispiel: Relation "Fahrradmodell hat Gangschaltung" === ** Klassendiagramm: ** {{ :jg10:einszun:pasted:20230928-095719.png }} **Relationales Schema: ** \\ Fahrradmodell [__id: integer__, bezeichnung: varchar(50), farbe: varchar(20), gangschaltung_id: integer] \\ Gangschaltung [__id: integer__, bezeichnung: varchar(50), anzahlGänge: integer] [[.aufgabe1loesung:start|Lösung]]