Datenbankstruktur
Daniel
- datenbank
0 Götz0 Daniel0 Richtig so?
Daniel
0 Daniel
Hallo zusammen!
Ich möchte Hardware-Produkte in einer Datenbank "unterbringen". Jedes Hardware Produkt kann bestimmte Optionale Komponenten haben. Beispiel: Für ein Notebook XY gibt es die Optionen DVD-Laufwerk, Akku, Sicherheitsschloss usw.
Zusätzlich sollte auch eine History ersichtlich sein, dh. wenn das Nachfolgeprodukt des aktuellen Notebooks kommt, sollte der alte Datensatz nicht einfach überschrieben werden.
Bis jetzt hab ich das folgendermassen aufgebaut (MS SQL DB).
tbl_products
------------
id
product_id
name
description
...
option1_id
option2_id
option3_id
option4_id
option5_id
date
tbl_options
-------------
id
option_id
name
descripion
...
date
Die History mache ich also, indem ich alle Datensätze mit der selben 'product_id' Suche. Anhand von 'Date' wird dann die Version unterschieden. Es kann also mehrere Datensätze mit der selben 'product_id' geben.
Was mir daran nicht so gefällt ist, dass die Anzahl Optionen beschränkt ist. Zweitens find ich die Lösung für die History mit der 'product_id' und 'date' auch nicht überzeugend. Hat jemand eine bessere Idee wie man das ganze aufbauen könnte?
Für eure Hilfe & Erfahrung danke ich euch im Voraus.
Gruss Daniel
Hallo Daniel!
tbl_products
id
product_id
tbl_options
id
option_id
Also, du kannst eine zusätzliche Tabelle machen, die product_id's option_id's zuordnet.
Warum hast du eigentlich in beiden Tabellen 2 id-Felder?
(tbl_products.id und tbl_product.product_id bzw. dasselbe bei tbl_options)
Ansonsten, wenn Du 2 identische "id's" (?! ;) hast, dann mußt Du, um einen Datensatz eindeutig zu beschreiben, noch ein weiteres Feld prüfen - logisch.
Ob Du dafür allerdings das Datumsfeld nimmst, oder in Deinem jetzigen Modell z.B. die id, die ja beim neueren Produkt wohl höher sein sollte als bei einem älteren, ist Deine Entscheidung.
MfG
Götz
Hallo Götz
Also, du kannst eine zusätzliche Tabelle machen, die product_id's option_id's zuordnet.
Mal schauen...
Warum hast du eigentlich in beiden Tabellen 2 id-Felder?
(tbl_products.id und tbl_product.product_id bzw. dasselbe bei tbl_options)
Damit ich trotzdem die Möglichkeit habe, jeden Datensatz eindeutig zu identifizieren...aber wenn ich ne zusätzliche Tabelle mache könnte das überflüssig werden.
Gruss Daniel
Hallo Goetz
Also, ich hab das jetzt so gemacht:
eine zusätzliche Tabelle
tb_prodOpt
-----------
id
product_id
option_id
Das kann dann so aussehen:
id product_id option_id
-------------------------------
1 23 11
2 23 15
3 22 11
Hast du das so gemeint?
Gruss Daniel
Hello,
Hallo Goetz
Also, ich hab das jetzt so gemacht:
eine zusätzliche Tabelle
tb_prodOpt
id
product_id
option_id <-- ist hier überflüssigDas kann dann so aussehen:
id product_id option_id
1 23 11
2 23 15
3 22 11
id optiontext
-----------------------
11 Dockingstation
15 Zusatzacku mit Atombetrieb
22 Festplatteninnenbeleuchtung
99 eingebauter Servicetechniker
Die Tabelle mit den Options fehlte.
Liebe Grüße aus http://www.braunschweig.de
Tom
tb_prodOpt
id product_id option_id <-- ist hier überflüssig
Warum soll das überflüssig sein? Ich muss dem Produkt die Optionen zuordnen...! Es kann letztendlich dann auch vorkommen, dass mehrere Produkte die selbe Option haben...
Die Tabelle mit den Options fehlte.
Warum, sie ist im vorherigen Thread...?
Gruss Daniel
Hello,
tb_prodOpt
id product_id option_id <-- ist hier überflüssig
Warum soll das überflüssig sein? Ich muss dem Produkt die Optionen zuordnen...! Es kann letztendlich dann auch vorkommen, dass mehrere Produkte die selbe Option haben...
Jetzt hatte ich Dir so eine hübsche "Grafik" gemalt und dann Escape gedrückt... Ich bin vi-geschädigt
produkt prod_opt option ----------- ------------ ------------ id ----+ id +----> id prod-bez +----> id_produkt | option-text id_option ------+
Die ID in prod_opt ist im ersten Augenblick "verbotene" Redundanz, da ip_produkt-id_option bereits einen primären Kombinationsschlüssel geben. Wenn Du dann aber später eine Historie haben möchtest, kann es durchaus sein, dass es mehrrere Einträge id_produkt-id_option in der Tabelle gibt, die zu verschiedenen Daten Gültigkeit haben. Dann ist die ID wieder berechtigt. Ich würde sie also mitführen und dafür sorgen, dass ihr Wertebereich groß genug ist und sie immer garantiert invrementiert wird. Das ist bei MySQL-Autoincrement angeblcih nicht gewährleistet / nicht zu gewährleisten. (?)
Die Schlüssel in der jeweils rechten Tabelle müssen Indiziert sein. Die "rechte Tabelle" muss in der Grafik nicht unbedingt rechts abgebildet sein, sondern kennzeichnet die "geführte" Tabelle, die den passenden Schlüssel zum gerade aktuellen Schlüssel der führenden Tabelle liefern muss.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom
Danke für deine ausführliche Antwort...aber ich denke das ist genau das was ich bereits hatte?
Gruss Daniel
Hello Daniel,
Danke für deine ausführliche Antwort...aber ich denke das ist genau das was ich bereits hatte?
Mmmh, dann habe ich dich wohl verkehrt verstanden. Sorry,
Aber doppelt genäht hält besser, als gar nicht ;-)
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom!
Aber doppelt genäht hält besser, als gar nicht ;-)
In diesem Sinne melde ich mich auch nochmal kurz zu Wort: Genau so irgendwie habe ich es auch gemeint ;)
Und mit Tom's "Bildchen" sind auch die Zusammenhänge zwischen den Tabellen nochmal deutlich geworden :)
MfG Götz
Vielen Dank für eure Hilfe!
Nocheinmal Hallo!
Also, du kannst eine zusätzliche Tabelle machen, die product_id's option_id's zuordnet.
Wie würde die dann deiner Meinung nach aussehen?
Gruss