Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Hilfe bei Datenbankstruktur

  1. #1
    Registrierter Benutzer
    Registriert seit
    21.10.2000
    Beiträge
    78

    Hilfe bei Datenbankstruktur

    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

    Code:
    - Tabelle buecher
    
    id	bandnr		titel		jahr_erstauflagede	jahr_erstauflageus
    1	1		huhn		1977			1975
    2	2		henne		1978			1976
    3	3		kuecken		1980			1974
    Code:
    - 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

    Code:
    - 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
    Code:
    - 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

  2. #2
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    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".
    Geändert von BLUESCREEN3D (11-04-2009 um 12:22 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.10.2000
    Beiträge
    78
    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.

    Code:
    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),
    ???
    )



    Code:
    - Tabelle buecher
    
    id	bandnr		titel		jahr_erstauflagede	jahr_erstauflageus
    1	1		huhn		1977			1975
    2	2		henne		1978			1976
    3	3		kuecken		1980			1974
    Code:
    - 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	...
    Code:
    - 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
    Code:
    - Tabelle verlag
    
    nrverlag	verlag
    1		Frankh
    2		heyne
    Code:
    - 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

  4. #4
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    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/...eign-keys.html
    Das geht aber nicht mit MyISAM, sondern du müsstest InnoDB nutzen.

  5. #5
    Registrierter Benutzer
    Registriert seit
    21.10.2000
    Beiträge
    78
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •