Die erforderliche Struktur hängt vom Beziehungstyp ab: Eins-zu-Viele, Viele-zu-Eins oder Viele-zu-Viele (M2M).
Bei einem Eins-zu-Viele-System bezieht ein Fremdschlüssel (FK) auf der "Viele" -Seite viele Elemente auf die "Eins" -Seite. Das Gegenteil ist für viele Eins zu eins.
Für Viele-zu-Viele (M2M) benötigen Sie eine intermediäre relationale (oder Junction-) Tabelle, genau wie Sie es vorschlagen. Dadurch können Sie sowohl Kategorien als auch Eigenschaften in beliebigen Kombinationen wiederverwenden. Allerdings ist es etwas mehr SQL - erfordert 2 JOINs.
Wenn Sie nach Leistung suchen, dann wäre die Verwendung von FKs zu Primärschlüsseln (PKs) sehr effizient und die Abfragen sind ziemlich einfach. Die Verwendung von JSON würde vermutlich erfordern, dass Sie PHP analysieren und fliegende zweite Abfragen erstellen, die Ihre Codierungsarbeit und das Testen, die Datenübertragung, den CPU-Overhead und die Skalierbarkeit der Grenzen vervielfachen würden.
In Ihrem Fall rate ich, dass sowohl "Grafikkarten" und "Festplatten" z. "Speichergröße" plus andere Eigenschaften, so würden Sie eine M2M relationale Tabelle benötigen, wie Sie vorschlagen.
Solange Ihre Schlüssel indiziert sind (welche PKs sind), wird Ihr JOIN zu dieser relationalen Tabelle sehr schnell und effizient sein.
Wenn Sie CONSTRAINTs mit Ihren Beziehungen verwenden, stellen Sie sicher, dass Sie die Datenintegrität beibehalten: Sie können keine Kategorie löschen, an die eine Eigenschaft angehängt ist. Dies ist auf lange Sicht eine gute Eigenschaft.
Hunderte und Tausende von Datensätzen ist eine winzige Menge für MySQL. Sie würden diese Technik sogar mit Millionen von Datensätzen verwenden. Es gibt also keine Sorgen über die Größe.
RDBMS-Datenbanken wurden speziell dafür entwickelt. Daher würde ich empfehlen, die nativen Funktionen zu verwenden, anstatt es in JSON selbst zu tun. (es sei denn, ich vermisse etwas neues JSON MySQL-Feature! *)
* Seit dieser Veröffentlichung stolperte ich tatsächlich über a new JSON MySQL feature. Es scheint, als könnten Sie nach einer kurzen Lektüre alle möglichen neuen Strukturen und Relationen mit JSON und virtuellen Spaltenschlüsseln implementieren, wodurch möglicherweise Junction-Tabellen überflüssig werden. Dies wird wahrscheinlich die Grenze zwischen MySQL als RDBMS und NoSQL verwischen.
Wow, ich habe gerade etwas Neues gelernt. Ich wusste nichts über CASCADE. Vielen Dank für Ihre Hilfe. Ich werde Ihre Lösung verwenden. –