Frage von Evergreen89, 59

Produktdatenbank - Welche Struktur wäre besser?

Hallo, ich habe in meiner Datenbank zwei Tabellen (eine Produkt und die Spezifikationen). Ich suche nun nach einer besseren Lösung, bin mir aber nicht sicher ob sie es ist oder es sogar noch bessere gibt. In meiner jetzigen Produkttabelle stehen die wichtigsten Infos zu einem Gerät drin. In der Spezifikationstabelle alle technischen Daten. Diese Tabelle besitzt allerdings schon 60 Spalten. Da ich die technischen Daten erweitern möchte, können dies schnell mal 100 werden. Das nächste "Problem" wäre auch, dass nicht alle Geräte, je nach Typ, auch alle Spalten benötigen. So brauchen Smartphones alle, Smartwatches aber nur bspw. 20 Spalten.

Nachdem ich nun ein wenig im Internet gesucht habe, bin ich auf folgendes Bsp. gestoßen: Produkt Tabelle, Wert-Bezeichnung Tabelle, Wert Tabelle

Diese Methode wäre einfacher zu verwalten, da ich Werte-Bezeichnungen einfacher hinzu oder entfernen könnte. Auch würden nur die Werte ausgelesen, die ein Produkt wirklich braucht.

Ich hoffe ihr könnt mich verstehen, was ich meine. Ist dies eine bessere Lösung oder gibt es gar eine noch besser?

Edit: Ich habe mich eigentlich für diese Lösung entschieden:

Produkttabelle
ID | ProduktName
1 | A
2 | B

Spezifikationstabelle
ID | ProduktID | SpezifikationsId | value
1 | 1 | 1 | I7
2 | 1 | 2 | Nvidia
3 | 2 | 1 | I5
4 | 2 | 3 | Realtek

Spezifikationstabelle
ID | SpezifikationsName
1 | Prozessor
2 | Grafikkarte
3 | Soundkarte

Doch nun habe ich ein kleines Problem, mit dem ich nicht weiter weiß.

Ich habe verschiedene Datensätze wie Grammzahlen (Ganzzahlen), Abmessungen (Float) oder Bezeichnungen (Varchar). Habe ich aber in der Spezifikationstabelle nur eine Spalte (wohl Varchar) ist es ja schwieriger Daten miteinander zu vergleichen bzw. auch zu Filtern.

Macht es da jetzt Sinn, die Tabelle zu erweitern und für jeden Typ eine eigene Spalte zu erstellen? Also value_varchar, value_float usw.?

Antwort
von Malemeister, 40

Ich glaube, du solltest dich grundlegend nochmal mit einer Datenbankstruktur auseinandersetzen. Ein gutes Tutorial: http://www.peterkropff.de/site/mysql/struktur.htm

Wenn du eine ordentliche Strukturierung hast, dann brauchst du auch keine 60 oder 100 Spalten. In deinem Fall brauchst du wahrscheinlich nicht mal mehr als 5.

Leg einfach eine Tabelle an, wo deine Produkte drinne stehen. Jedes Produkt bekommt eine eindeutige ID.
Die Tabelle könnte ungefähr so aussehen:

ID | ProduktName

Nun legst du eine neue Tabelle an, wo die Spezifikationen drinne stehen. Hier musst du die Spezifikation eben dem Produkt zuweisen.

Diese Tabelle könnte ungefähr so aussehen:

ID | ProduktID | SpezifikationsName | value

Nun trägst du in die erste Tabelle ein Produkt (meinetwegen Produkt A ein). Die Datenbank gibt dem Produkt eine eindeutige ID (Serial). Mit dieser ID machst du einen Eintrag in der 2. Tabelle. Das könnte dann ungefähr so aussehen:

Produkttabelle
ID | ProduktName
1 | A
2 | B

Spezifikationstabelle
ID | ProduktID | SpezifikationsName | value
1 | 1 | Prozessor | I7
2 | 1 | Grafikkarte | Nvidia
3 | 2 | Prozessor | I5
4 | 2 | Soundkarte | Realtek

Ich hoffe, dass das einigermaßen verständlich war.

Grüße

Kommentar von Evergreen89 ,

Hallo und danke erst einmal für deine umfassende Antwort.

Das meine Datenbankstruktur nicht das Beste ist, ist mir bewusst. Damals hatte ich eben noch nicht so viele Erkentnisse als Heute. Desshalb möchte ich es ja ändern.

Deine Lösung ähnelt ja der, die ich bereits vorgeschlagen habe. Nur eben, das es eine zusätzliche SpezifikationsNamen-Tabelle gibt die mit der Spezifikationstabelle verknüpft ist. Das würde dann so aussehen.

Produkttabelle
ID | ProduktName
1 | A
2 | B

Spezifikationstabelle
ID | ProduktID | SpezifikationsId | value
1 | 1 | 1 | I7
2 | 1 | 2 | Nvidia
3 | 2 | 1 | I5
4 | 2 | 3 | Realtek

Spezifikationstabelle
ID | SpezifikationsName
1 | Prozessor
2 | Grafikkarte
3 | Soundkarte
Kommentar von Malemeister ,

Dann habe ich dich falsch verstanden.

Deine Lösung ist auch sehr gut, das kann man so machen.

Antwort
von maximilianus7, 33

SQL und daten als objekt kann auch zusammenpassen.

da du auch PHP als tag hast, so als idee: 1 sql-tabelle, alle eigenschaften in 1 spalte - inhalt: ein JSON-string, der die geräteattribute als als objekt enthält:

{ "attribute1": "value1", "attribute2": "value2", ... }
(eventuell auch strukturiert)

diese könntest du bei der anzeige eines gerätes direkt in ein <script>-teil der webseite überführen. dortselbst dann dynamisch mit js ein anzeige/eingabe-formular erstellen. 

Antwort
von tWeuster, 35

Solang du auf eine SQL Datenbank setzt ist das eine super Lösung!

Ohne SQL haust du einfach alles in ein Object was du brauchst und speicherst es.

Antwort
von Mikkey, 30

Eine Tabelle mit 60 Spalten kann nicht richtig designt sein.

Lege eine Tabelle mit Features an und eine Verweistabelle, die einem Produkt einen Satz von Features zuordnet.

Zumindest wäre ohne Detailwissen das mein erster Ansatz.

Keine passende Antwort gefunden?

Fragen Sie die Community