Entwurfsmuster / Strategien für benutzerdefinierte Felder und Datentypen

12

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.

GSto
quelle
6
Vielleicht möchten Sie einige Antworten auf diese Frage zum Entwerfen einer Datenbank für benutzerdefinierte Felder
Rachel
Bemerkenswert: Oracle verklagt derzeit jeden, der dies auf eine bestimmte (nach meinem Verständnis übliche) Weise umsetzt. Ich würde auch einen Blick darauf werfen.
Steven Evers

Antworten:

4

Das EAVModell 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.

Oded
quelle
Ich habe auch von Leuten gehört, die dokumentenorientierte Datenbanken als Alternative zu EAV verwenden, habe aber keine persönlichen Erfahrungen mit einem solchen Ansatz.
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner - Darauf habe ich hingewiesen, aber als Sie selbst keine persönliche Erfahrung.
Oded
4

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.

HLGEM
quelle
1

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.

JeffO
quelle