![]() |
![]() |
Datenbanken - Verbesserungen |
G.Eichelsdörfer - Staatliche Technikerschule Weilburg |
Im Szenario "Buchverleih" wurde der Entität (genauer: dem Entitätstyp) "Buch" unter Anderem die Attribute (genauer: die Attributstypen) ISBN, Autor und Titel gegeben. Dies ist nicht zweckmäßig, weil sich bereits aus der ISBN der Autor, der Buchtitel und auch der Verlag ergibt. Man sagt: Autor, Buchtitel und Verlag sind funktional abhängig von der ISBN. Attribute dürfen ausschließlich vom Primärschlüssel funktional abhängen. Alle anderen funktionalen Abhängigkeiten müssen unbedingt vermieden werden.
Begründung:
Wenn in der Tabelle "Buch" mehrere Bücher mit derselben ISBN
eingetragen sind, so kann es beispielsweise durch menschliche Fehler geschehen, dass
nicht alle Einträge denselben Buchtitel besitzen. Dann ist die Datenbank wiedersprüchlich,
man sagt: Die Datenbank ist inkonsistent.
Diese Fehlermöglichkeit kann ausgeschlossen werden, indem es nur einen einzigen Eintrag
mit dieser ISBN gibt. Dies gelingt mit einem weiteren Entitätstyp, in welchem die ISBN als
Primärschlüssel dient. Dann gibt es zu jeder ISBN nur einen einzigen Eintrag und es kann
in diesem Zusammenhang keine Inkonsistenz geben.
Es wird somit ein weiterer Entitätstyp und eine entsprechende Tabelle benötigt. An dieser Stelle sollten wir zwischen konkreten Leihbüchern und abstrakten Büchern unterscheiden. Ein konkretes Leihbuch besitzt eine Inventarnummer. Ein abstraktes Buch besitzt eine ISBN, einen Autor, einen Verlag. Es repräsentiert alle gedruckten Bücher, welche dieselbe ISBN tragen. Es ist die Menge aller gedruckten Bücher mit dieser ISBN. Wir sagen ja auch: "Der Autor xyz hat das Buch sowieso geschrieben." Dieses geschriebene Buch entspricht etwa dem abstrakten Buch. Ein Leihbuch ist ein konkretes Exemplar seines abstrakten Buches mit derselben ISBN. Unterscheiden wir also nun zwischen den Entitätstypen Leihbuch und Buch.
Ähnliche Probleme können beim Attributstyp "Autor" auftreten. Es kann zwei verschiedene Autoren gleichen Namens geben. Um diese unterscheiden zu können, sollte beispielsweise dessen Geburtsdatum und Adresse hinzugefügtr werden.
Angenommen, Sie erweitern den neuen Entitätstyp "Buch" (s.o.) um die Autor bezogenen Attributstypen "geboren" und "Adresse".
Kann sich aus dieser Erweiterung eine Inkonsistenz der Datenbank ergeben?
Begründen Sie Ihre Antwort!
Welche Konsequenz ziehen Sie aus der Erkenntnis unter a.?
Konkret: Welche Entitätstypen werden nun benötigt?
Untersuchen Sie im Entitätstyp "Buch" den Attributstyp "Verlag"!
Es kann verschiedene Verlage gleichen Namens geben. Beispielsweise gibt es zwei
verschiedene Springer-Verlage. Wie strukturieren Sie das ER-Schema um, wenn weitere
Informationen zu den Verlagen erforderlich sind?
Entwerfen Sie einen weiteren geeigneten Entitätstyp mit Attributstypen!
Erstellen Sie nun zum Buchverleih ein komplettes Übersichts-ER-Schema (ohne Attributstypen) mit den Beziehungstypen zwischen den Entitätstypen! Ermitteln Sie zu den Beziehungstypen die Kardinalitäten!
Skizzieren Sie nun jeden Entitätstyp mit seinen Attributstypen!
Tun Sie das gleiche mit denjenigen Beziehungstypen, welche auch Attributstypen besitzen.
Entwerfen Sie zu den obigen Schemata die Datenbankstruktur!
Diese beinhaltet alle erforderlichen Tabellen mit Attributstypen und Referenztypen.
Setzen Sie bei Gelegenheit diese Datenbankstruktur praktisch um!
Planen Sie auf der Basis der zuvor entworfenen DB-Struktur die DB-Anwendung zum Auflisten
aller von einem Kunden ausgeliehenen Bücher. Diese Auflistung soll die Bücherdaten
wie Inventarnummer, ISBN, Autor, Titel, Verlag enthalten. Zum Verlag soll noch dessen Sitz
(Ort bzw. Ortliste) aufgeführt werden. Einzelheiten zum Autor sind nicht erwünscht.
In dieser Planung sollen die Abfrageschritte und die erforderlichen SQL-Anweisungsstrukturen
notiert werden.
Beispiel: "select * from Buch where ISBN=<ISBN_Wert>"
Erstellen Sie die zuvor geplante Anwendung in C++ mit Hilfe der mysql++-Bibliothek!