Ich habe eine selbst erstellte Webanwendung in PHP
und MySQL
. Die vielen verschiedenen Clients, die mein System verwenden, möchten Entitäten mit benutzerdefinierten Feldern erweitern. Jeder Kunde möchte seine eigenen zusätzlichen Daten speichern, also sollte dies dynamisch geschehen.Welcher Weg ist besser, benutzerdefinierte Felder in einer Webanwendung zu implementieren?
Zum Beispiel client1 möchte die „Farbe“ Eigenschaft, um ihre Produkte hinzuzufügen, client2 ein Feld „safety_level“ für ihre Produkte genannt werden sollen.
Ich möchte eine Methodik, die nicht nur für Produkte, sondern auch für Benutzer und andere Entitäten angewendet werden kann.
Hier gibt es 2 Möglichkeiten ich die optimale gefunden, aber nicht entscheiden kann, was man am effektivsten:
OPTION 1: Für jede Entität Ich mache eine [entityname]_customfields
Tabelle, in der ich den Laden zusätzliche Feldwerte in 1: 1. z.B .:
+---------------------------------------------+
|products_custom_fields |
+---------------------------------------------+
|product_id (PK and FK related to products.id)|
|safety_level |
|some_other_fields |
+---------------------------------------------+
pro: Diese Tabelle kann nicht mehr Datensätze als die Objekt-Tabelle hat (in diesem Fall der Produkte), die weniger Datensätze und es ist ganz einfach zur Übersicht bedeutet.
con: das Hinzufügen neuer Felder oder das Löschen alter Felder erfordert DDL-Abfragen. Ich möchte DDL nicht an Benutzer weitergeben ... nicht einmal an Benutzer mit Administratorberechtigungen.
Option 2: [entity]_custom_field_values
wird N: 1 haben Beziehungen zu [entity]
Tabelle. Jede Zeile enthält den Typ des benutzerdefinierten Felds und den Wert selbst. In diesem Fall benötigen wir eine andere Tabelle, die die benutzerdefinierten Feldtypen enthält. zB:
benutzerdefinierte Feldwerte:
+----------------------------------------------------------------------+
|products_custom_field_values |
+----------------------------------------------------------------------+
|custom_field_id |
|custom_field_type (FK product_custom_field_types.custom_field_type_id)|
|value |
+----------------------------------------------------------------------+
benutzerdefinierte Feldtypen:
+---------------------------------------------------------+
|products_custom_field_types |
+---------------------------------------------------------+
|custom_field_type_id (PK AUTO_INCREMENT) |
|product_id (FK related to products.id) |
+---------------------------------------------------------+
pro: Verwaltung Felder ist einfach, erfordert keine Tabellenstrukturen
verändern con: mehr Datensätze, alle Arten von benutzerdefinierten Feldwerten in einem großen Durcheinander ... was nicht notwendig ist falsch, weil das ist der Punkt von MySQL, um nützliche Daten aus einem großen Durcheinander zu extrahieren. Die Frage ist was ist mit Effizienz und Leistung?