Gibt es gemeinsame Strategien oder Entwurfsmuster für den Entwurf von Anwendungen, mit denen Sie Datenobjekten benutzerdefinierte Felder hinzufügen oder Ihre eigene benutzerdefinierte Definition von Objekten erstellen können? Ich denke zum Beispiel an Produkte wie SalesForce, in denen Sie Ihre eigenen Arten von Informationen haben können, Frameworks wie Expression Engine und die Art und Weise, wie Kanäle und Kanalfeldgruppen behandelt werden (Beispiel) , oder wie CMSes wie WordPress dies können Hinzufügen von Feldern zu benutzerdefinierten Beitragstypen.
12
Antworten:
Martin Fowler hat in seinem Buch "Analysis patterns" (Analysemuster ) ausführlich beschrieben, wie dynamische Eigenschaften modelliert werden können . Der größte Teil des Inhalts ist online kostenlos als PDF-Artikel verfügbar. Sie suchen nach folgendem Inhalt:
http://martinfowler.com/apsupp/properties.pdf
quelle
Das
EAV
Modell wird normalerweise für unstrukturierte Schemata verwendet, wie Sie sie beschreiben.Es leidet unter der Leistung und der Fähigkeit, solche dynamischen Eigenschaften ad-hoc abzufragen ... und wird daher von vielen als Anti-Pattern angesehen.
Andere Ansätze bestehen darin, ein dynamisches Format wie XML oder Json zu verwenden, um solche Eigenschaften zu speichern, möglicherweise mit dediziertem Speicher für jede Eigenschaft, um die Suche zu erleichtern.
quelle
Zusätzlich zu der von @Oded beschriebenen EAV-Tabelle wird für diese Art von Informationen die Datenbank nosql verwendet. Denken Sie daran, es gibt keinen Grund, warum Ihre Anwendung keine relationale Datenbank für die Teile verwenden kann, die mit dem relationalen Modell sinnvoll sind, und eine nosql-Datenbank für die Informationen, die dies nicht tun.
Eine dritte Möglichkeit besteht darin, mehrere Spalten für die vom Kunden hinzugefügten Felder (Kundenfeld1, Kundenfeld2 usw.) hinzuzufügen und dann vom Kunden definieren zu lassen, was sie bedeuten. Dies funktioniert nur für die Anzahl der benutzerdefinierten Felder, die Sie hinzufügen. Es ist also in Ordnung, wenn Sie nur davon ausgehen, dass sie zwei oder drei benötigen, aber wenn Sie Hunderte benötigen, funktionieren sie überhaupt nicht.
quelle
Sie hätten nicht die erste Anwendung mit einer Tabelle: UDF1, UDF2, UDF3 ... Die anderen Vorschläge (EVA oder NoSQL) sind viel besser.
Abhängig vom RDBMS ( SQL Server bietet dies an ) können Sie die Normalisierung abbrechen und über ein Feld verfügen, das die Daten in einem XML-Format oder nur in einfachem Text enthält. Sie müssen sich auf Code verlassen, um dies zu verwalten.
quelle