![]() | ![]() | ||||||||||||
![]() | ![]() | ||||||||||||
| Beziehungen umsetzen
Diese Lektion zeigt dir, wie die Beziehungen zwischen Klassen noch in die Datenbank eingearbeitet werden. Dabei unterscheiden wir zwei Fälle. Beziehung mit einer 1:n-Kardinalität und mit einer m:n-Beziehung.
Wir haben zwei verschiedene Arten von Beziehungen kennengelern, 1:n und m:n. Schauen wir uns bei in einem Klassendiagramm nochmals an. ![]() Aus jeder Klasse wird eine Tabelle, wobei die Spalten der Tabelle jeweils die Attribute darstellen. Schauen wir uns zuerst die m:n-Beziehung an. Aus dieser Beziehung, wird eine eigene Tabelle. Sie erhält einen der beiden Namen, die wir den Pfeilen gegeben haben, also am einfachsten nennen wir sie bedient. Aber welche Attribute sollen wir in diese Tabelle eintragen. Die Beziehung verfügt ja nur manchmal über eigene Attribute. Hier hat sie keine. Hier kommt dem Primärschlüssel einer jeden Klasse besondere Bedeutung zu. Wir erinnern uns, dass wir jeder Klasse ein eindeutiges Attribut gegeben haben, oft ein künstliches Attribut, z.B. Kunden-Nummer, Maschinen-Nr., hier kurz ID genannt. Ich werde künftig der Einfachheit halber jeder Klasse einen künstlichen Primärschlüssel geben und diesen immer ID für Identifikationsnummer nennen. Und immer wenn eine m:n-Beziehung zur Tabelle wird, dann müssen wir die beiden Primärschlüssel der beteiligten Klassen als Attribute in die neue Tabelle schreiben. Die Attribute müssen nicht denselben Namen haben wie in der Klasse aber sie müssen in jedem Fall demselben Wertebereich-Typ angehören. Hier benötigen wir also zwei Attribute des Wertebereichs INTEGER und nennen diese z.B. Maschinen_Nr und Mitarbeiter_Nr. Und schon ist die Beziehung umgesetzt. Etwas leichter ist es bei einer 1:n-Beziehung, hier muss keine eigene Tabelle erstellt werden. Da in unserem Beispiel ja ein Mitarbeiter genau einer Gehaltsklasse angehört müssen wir die Tabelle, die aus der Klasse Mitarbeiter entstanden ist, nur um ein Attribut erweitern. Masterfrage: Um welches Attribut muss die Tabelle Mitarbeiter erweitert werden? Richtig! Es ist wieder der Primärschlüssel der anderen Klasse, hier also der Primärschlüssel der Klasse Gehaltsklasse. Der Name ist wieder beliebig. Wenn bei einer solchen 1:n-Beziehung der Primärschlüssel in die Tabelle einer anderen Klasse aufgenommen wird, dann bezeichnet man dieses Attribut als Fremdschlüssel, es ist der Schlüssel einer anderen Tabelle, der hier in dieser Tabelle die Beziehung herstellt. Und fertig ist die Datenbank! Du siehst, die Hauptaufgabe liegt nicht in der Programmierung einer Datenbank, das geht sehr leicht: Erster Schritt: Aus jeder Klasse wird eine Tabelle. Zweiter Schritt: Aus jeder m:n-Beziehung wird auch eine Tabelle mit den beteiligten Primärschlüsseln als Attribute. Dritter Schritt: Jede 1:n-Beziehung führt zu einer Erweiterung der Tabelle, bei der wie das n notiert haben. Die Tabelle wird um den Fremdschlüssel erweitert.
Sehen wir uns das Klassendiagramm aus dem Kapitel "Wertebereich der Attribute" an. ![]() Wie viele Tabellen ergeben sich, wenn das Klassendiagramm in Tabellen umgesetzt wird? Es sind sieben Klassen und drei m:n-Beziehungen. Das ergibt also 10 Tabellen. Die drei Beziehungs-Tabellen brauchen einen einheitlichen Namen: bestellt, bedient und fertigt Wie viele Attribute hat die Tabelle "Personal"? Antwort: Es sind 10! Acht Attribute hat die Klasse, es kommen noch zwei hinzu, nämlich die beiden Fremdschlüssel aus den Klassen Krankenversicherung und Gehahltsklasse.
Übung 1: Gegeben ist die Datenbank für die Verwaltung einer Bibliothek. Die Datenbank soll in der Lage sein, folgende Aufgaben zu lösen: - Standort eines Buches (Titel) ausgeben; gibt es das Buch? - Haben Sie Bücher der Kategorie „Roman“ - Bücher eines bestimmten Autors - Schlagwortsuche - Wann kommt das Buch zurück - Wer hat es ausgeliehen - Alle Bücher eines Verlages - Wie teuer war das Buch? Dabei ergibt sich folgendes Klassendiagramm: ![]() Die Beziehungen sollen in einer Datenbank umgesetzt werden. Gib diese Umsetzung aller Beziehungen an! Lösungsansatz Übung 1: Alle m-n-Beziehungen ergeben eine eigene Tabelle: entleiht{Buch.Nr:integer, Entleiher.Nr:integer,Ausleihdatum:Date, Rückgabedatum:Date} hat_schlagwort{Buch.Nr:integer; Schlagwort.ID:integer} hat_Autor{Buch.Nr:integer; Autor.Nr:integer}. Die Beziehung zwischen Verlag und Buch ist eine 1:n-Beziehung. Die Tabelle Buch wird also um den Fremdschlüssel Verlags-Nr:integer erweitert.
Aufgabe 1: Setze das Klassendiagramm von oben nun in eine Datenbank mit dem Namen MyFirma um! D.h. erstelle eine leere Datenbank und erstelle sodann die zehn Tabellen, verwende jeweils die Klassennamen und den kürzeren Beziehungsnamen der beiden Beziehungspfeile! Aufgabe 2: Trage in jede Tabelle mindestens fünf geeignete Objekte ein! Zur Erinnerung, Objekte sind die einzelnen Zeilen in einer Tabelle, also z.B. Mitarbeiter.
Fremdschlüssel: Bezeichnung für ein Attribut in einer Tabelle, das in einer anderen Tabelle als Primärschlüssel vorhanden ist und somit eine Beziehung zwischen zwei Klassen herstellt. Dabei handelt es sich um eine 1:n-Beziehung. Primärschlüssel: Attribut einer Tabelle, das bei jedem Objekt eindeutig ist und somit nicht doppelt vorkommen darf und als solches gekennzeichnet wird! Im Klassendiagramm wird das Attribut unterstrichen, bei der Eingabe der Attribute im Frontend wird ein Haken bei den Eigenschaften des Attributes gemacht! Copyright 2003 - Letzte Änderung am 4. September 2004 |