Datenmodell Buch (BD)
Die Beispiele stammen aus "The open source XML database toolkit" von Liam R. E. Quin
Die Aufgabe: Modellierung eines Buches für den Gebrauch in Datenbanken. Welche Charakteristika sind hervorzuheben und wie sind sie in einen Zusammenhang zu bringen?
Gewöhnlich hat ein Buch im einfachsten Fall diese Kennzeichen:
- eine Autorin
- einen Verlag
- ein Erscheinungsjahr
In traditionellen Zettelkästen ist für jedes Buch ein Eintrag angelegt worden, welcher diese Angaben auflistet. Das führt zu massiver Redundanz, weil z.B. der Name der Autorin auf jeder Karte wiederholt wird. Damit verbunden steigt die Fehleranfälligkeit durch falsche Angaben. (Im traditionellen bibliographischen Gebrauch werden die Fehler kompensiert.)
Nicht nur werden dieselben Autorinnen mehrfach erfasst. Es kommt auch vor, dass ein Buch von mehreren Autorinnen geschrieben ist. Und mehrere Bücher haben denselben Verlag. Wenn man pro Buch einen Zettel ausfüllt, liegt diese logische Struktur sozusagen brach. Bestimmte Arbeitsschritte werden dadurch kompliziert. Wenn sich zum Beispiel der Name der Autorin von "Schmidt" zu "Schmidt-Kowarzik" ändert, muss er auf allen Zetteln ausgebessert werden. Darum empfielhlt sich ein etwas differenzierteres Datenmodell.
An der Stelle "Author" in der Buch-Tabelle steht nicht ein Autorenname, sondern diese Tabelle steht in Beziehung zu einer anderen Tabelle, welche die Autorinnen erfasst.
Das wird in SQL folgendermaßen erzeugt:
CREATE TABLE Book_tbl ( # id: unique id for identifying each book # (ISBNs vary by country, and this way we can # generate the ID automatically) Book_id INT NOT NULL PRIMARY KEY, # title, truncated if necessary Title VARCHAR(150) NOT NULL, # identify the publisher: Publisher_id INT REFERENCES Publisher_tbl(Publisher_id), # When the book was first published # we'd like to make it a DATE, but we usually only have # a year, not a day/month/year, so we just use a number: Date INT, Pages INT );
CREATE TABLE Author_tbl ( # identify the author; the Author_id refers to the Author table; # note that two authors with the same name might be entirely # different people. Author_id INT NOT NULL PRIMARY KEY, LastName VARCHAR(35) NOT NULL, FirstNames VARCHAR(40), Sortkey VARCHAR(25) # other things we might know about a writer: # gender CHAR(1), male/female/unknown/other # nationality # birthplace # birthdate # birthday (month, day) );
CREATE TABLE Publisher_tbl ( Publisher_id INT NOT NULL PRIMARY KEY, # name, e.g. Wiley, truncated if necessary because SQL, unlike XML, # is not really too happy about fields of unrestricted length: Name VARCHAR(50) # In the future, we could maybe add more information here... );
Der ganze Zusammenhang der Datencharakteristik wird gerne in Diagrammen dargestellt, welche die Beziehungen der konstruierten Entitäten erfassen.