Ich erklär mal noch kurz das "große drumherum" ;)
Ich habe eine "Teile"-Datenbank die zur Zeit aus allen nähten Platz. Nun möchte ich alles in einer MySQL Datenbank speichern. Dazu sortiere ich diese Teile in Gruppen ein und weise ihnen Eigenschaften zu. Die Gruppen könnten z.B. so aussehen:
- aktive Elemente (ID 1)
- passive Elemente (ID 4)
- Widerstand (ID 5)
- Kondensator (ID 6)
Zudem gibt es Eigenschaften, z.B. kann die ID 1 für "Spannung" stehen, ID 2 für "Farbe", ID 3 für "Toleranz" und so weiter. Einzig wichtig ist das einige Eigenschaften einen INT Wert haben und andere einen STRING.
Dafür ist es erst mal unerheblich was die IDs bedeuten, im Falle der Gruppen hab ich schon ein Datenbankmodell und die "Eigenschafts-IDs" sind fest einprogrammiert. Das Programm weiß auch ob die Eigenschaft INT oder STRING ist. Daher wäre die Tabelle "Eigenschaft" in deinem Beispiel unnötig.
Bei den "INT-Eigenschaften" brauch ich halt <, > und = , STRING wird natürlich nur auf Gleichheit geprüft.
Durchsuchen muss ich das ganze später nach Eigenschaften UND Gruppe. Eine Suchanfrage könnte z.B. heißen: "Finde alle Teile in der Gruppe "LED (ID 3)" die eine Spannung (ID 1) größer 30 haben und als Farbe (ID 2) ROT".
Ich hoffe mein Problem wird jetzt etwas verständlicher. Ich weiß nicht wie ich das mit der Gruppe einbauen kann außer jeder Eigenschaft auch die Gruppe zu hinterlegen, wodurch ich aber die Normalform verletzt, da ja die Gruppenzuordnung mehrfach gespeichert ist (und wohl auch schnell zu Inkonsistenz führt).
Meine Ansatz wäre folgendes Schema:
Code:
Tabelle Objekt
id | Name | Group
1 | LED1 | 3
2 | LED2 | 3
3 | LED3 | 3
Tabelle Eigenschaft_INT
id | object | eigenschaft | value
1 | 1 | 1 | 31
2 | 2 | 1 | 31
3 | 3 | 1 | 29
Tabelle Eigenschaft_STRING
id | object | eigenschaft | value
1 | 1 | 2 | "ROT"
2 | 2 | 2 | "GRUEN"
3 | 3 | 2 | "ROT"
Der oben genannte Suchabfrage müsst ein dem Fall das Objekt LED1 liefern.
Nur keine Ahnung wie ich das sauber in MySQL mache...