PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei Datenbankstruktur



zagadka
11-04-2009, 10:20
Ich bin dabei mir eine Webbücherdatenbank mit LAMP zu programmieren, und benötige etwas Hilfe beim erstellen der Datenbankstruktur.

Zuerst möchte ich alle Bücher und alle Auflagen, die bisher erschienen sind in die Tabellen buecher, auflagen und coverbild schreiben.

Danach trage ich jedes Buch meiner Sammlung in die Tabelle meine_sammlung ein, dazu wähle ich im Webinterface per Dropdown Menü das Buch und Auflage aus und füge den Zustand und Bemerkungen hinzu. Die PHP Programmierung ist soweit fertig.

Ich hab mal versucht, das etwas zu strukturieren, aber ich bin mir nicht sicher, wie die Tabellen verbunden werden. Ich bin für jede Hilfe dankbar


- Tabelle buecher

id bandnr titel jahr_erstauflagede jahr_erstauflageus
1 1 huhn 1977 1975
2 2 henne 1978 1976
3 3 kuecken 1980 1974


- Tabelle auflagen

bandnr druckjahr auflage nrcoverbild hoehe_der_auflage isbn10 isbn13 Verlag
1 1977 1 1 15000 32431 22222 Frankh
1 1977 2 1 30000 55555 33333 Frankh
1 1979 3 1 50000 66666 44444 Frankh
1 1982 4 2 30000 77777 55555 Frankh
2. 1978 1 3 ....
2. 1979 2 4 ...
3. 1980 1. 5 ...


- Nicht jede Auflage hat das gleiche coverbild, es kann aber das gleiche sein.
- ISBN ist immer eindeutig, jede Auflage hat eine eigene Nummer.
- Verlag ist eindeutig, ändert sich nicht


- Tabelle coverbild (bandnr, auflage gehören nicht dazu, nur zur Veranschaulichung)

nrcoverbild coverbild bandnr auflage
1 bild11.jpg 1 1
2 bild12.jpg 1 4
3 bild21.jpg 2 1
4 bild22.jpg 2 2
5 bild31.jpg 3 1



- Tabelle meine_sammlung

bandnr auflage druckjahr zustand bemerkungen
1 1 1977 1,3 knick oben
1 4 1982 2,7 keine
3 2 1978

Grüße, Rupert

BLUESCREEN3D
11-04-2009, 11:20
In "auflagen" und "meine_sammlung" fehlt die Buch-ID und ich würde noch eine Tabelle "verlage" hinzufügen.
Aus der Tabelle "meine_sammlung" kannst du das Druckjahr streichen - das steht ja schon in "auflagen".

zagadka
11-04-2009, 12:03
Vielen Dank für die Antwort. Ich nehme an die buchid ist dafür da, dass jede Zeile in der Tabelle eindeutig bleibt? Aber kann buchid zweimal PK sein? Mein Problem ist jetzt das verbinden der Tabellen untereinander, und das mit der buchid.



CREATE TABLE buecher (
id INT NOT NULL AUTO_INCREMENT,
bandnr INT,
titel VARCHAR(255),
jahr_erstauflagede INT,
jahr_erstauflageus INT,
PRIMARY KEY(id) );

CREATE TABLE auflagen (
buchid INT NOT NULL AUTO_INCREMENT, ???
bandnr INT,
druckjahr INT,
auflage INT,
nrcoverbild INT,
hoehe_der_auflage INT,
isbn10 VARCHAR(20),
isbn13 VARCHAR(20),
nrverlag,
??
)

CREATE TABLE coverbild (
nrcoverbild INT NOT NULL AUTO_INCREMENT,
coverbild MEDIUMBLOB,
???
)

CREATE TABLE verlag (
nrverlag INT NOT NULL AUTO_INCREMENT,
verlag VARCHAR(128),
???
)

CREATE TABLE meine_sammlung (
buchid INT NOT NULL AUTO_INCREMENT, ???
bandnr INT,
auflage INT,
zustand VARCHAR(20),
bemerkungen VARCHAR(255),
???
)






- Tabelle buecher

id bandnr titel jahr_erstauflagede jahr_erstauflageus
1 1 huhn 1977 1975
2 2 henne 1978 1976
3 3 kuecken 1980 1974



- Tabelle auflagen

buchid bandnr druckjahr auflage nrcoverbild hoehe_der_auflage isbn10 isbn13 nrverlag
1 1 1977 1 1 15000 32431 22222 1
2 1 1977 2 1 30000 55555 33333 1
3 1 1979 3 1 50000 66666 44444 1
4 1 1982 4 2 30000 77777 55555 1
5 2. 1978 1 3 ....
6 2. 1979 2 4 ...
7 3. 1980 1. 5 ...



- Tabelle coverbild (bandnr, auflage gehören nicht dazu, nur zur Veranschaulichung)

nrcoverbild coverbild bandnr auflage
1 bild11.jpg 1 1
2 bild12.jpg 1 4
3 bild21.jpg 2 1
4 bild22.jpg 2 2
5 bild31.jpg 3 1



- Tabelle verlag

nrverlag verlag
1 Frankh
2 heyne



- Tabelle meine_sammlung

buchid bandnr auflage zustand bemerkungen
1 1 1 1,3 knick oben
2 1 4 2,7 keine
3 3 2



Grüße, Rupert

BLUESCREEN3D
13-04-2009, 14:44
Ich sehe da gerade noch was: Wäre es nicht sinnvoller, wenn die buchid für alle Bände einer Buchreihe gleich wäre? Dann könntest du z.B. zu einem Buch alle weiteren Bände auflisten und das geht mit der bisherigen Struktur nicht.
"buecher" hätte dann "PRIMARY KEY(id, bandnr)".
auflagen: PRIMARY KEY(buchid, bandnr, auflage)
coverbild: PRIMARY KEY(nrcoverbild) - und sonst fehlt da nichts, denn die Tabelle ist nur dazu da, die Cover-Dateien zu verwalten.
verlag: PRIMARY KEY(nrverlag)
meine_sammlung: PRIMARY KEY(buchid, bandnr, auflage)

Alle Spalten in allen Tabellen sollten NOT NULL sein. Bei bandnr wäre NULL als Kennzeichnung für Bücher ohne Bänden sinnvoll, aber weil das Teil des Primärschlüssels ist, kann es nicht NULL sein. Kannst ja 0 für solche Bücher eintragen.
Hat jedes Buch eine ISBN-10 und eine ISBN-13? Wenn nicht, wäre NULL da auch sinnvoll.

Bei einigen Spalten ist INT etwas übertrieben, z.B. für Jahreszahlen.

Was sonst noch sinnvoll wäre, sind Foreign Key Constraints:
http://dev.mysql.com/doc/refman/5.1/en/example-foreign-keys.html
Das geht aber nicht mit MyISAM, sondern du müsstest InnoDB nutzen.

zagadka
13-04-2009, 16:01
Vielen Dank für die ausführliche Antwort!

Ich werde die Tabellen entsprechend anpassen, die Änderungen leuchten ein. Am Samstag hatte ich mich eine Weile mit MySQL rumgeärgert, bis ich auf das Problem gestoßen bin, was Du in der letzten Zeile beschreibst: Dass PK/FK nur mit InnoDB funktioniert!!! Der Syntax und die Verknüpfung der Tabellen war mir dann auch klar.

Ich wünsche allen hier noch frohe Ostern!!

Grüße, Rupert