Wzorce projektowe / strategie dla niestandardowych pól i typów danych

12

Czy istnieją jakieś wspólne strategie lub wzorce projektowe do projektowania aplikacji, które mają możliwość dodawania niestandardowych pól do obiektów danych lub tworzenia własnej niestandardowej definicji obiektów. Na przykład myślę o produktach takich jak SalesForce, w których możesz mieć własne typy informacji, frameworki, takie jak Expression Engine i sposób, w jaki obsługuje kanały i grupy pól kanałów (przykład) , lub w jaki sposób CMSes Like wordpress mają możliwość dodaj pola do niestandardowych typów postów.

GSto
źródło
6
Być może zechcesz przeczytać niektóre odpowiedzi na to pytanie dotyczące projektowania bazy danych dla pól zdefiniowanych przez użytkownika
Rachel
Uwaga: Oracle krąży wokół każdego, kto wdraża to w określony (z tego, co rozumiem, powszechny) sposób. Zerknę również na to.
Steven Evers

Odpowiedzi:

4

EAVModelu jest zwykle używany do niestrukturalnych schematów jak opisujesz.

Cierpi na wydajności i możliwości zapytania o takie właściwości dynamiczne w sposób ad-hoc ... i jako taki jest uważany przez wielu za anty-wzór.

Inne podejścia polegają na użyciu dynamicznego formatu, takiego jak XML lub Json, do przechowywania takich właściwości, ewentualnie z dedykowanym miejscem do przechowywania dla każdej właściwości, aby pomóc w wyszukiwaniu.

Oded
źródło
Słyszałem również o ludziach, którzy używają baz danych opartych na dokumentach jako alternatywy dla EAV, ale nie mają osobistych doświadczeń z takim podejściem.
FrustratedWithFormsDesigner
@FrustratedWithFormsDesigner - o tym wspominałem, ale jak ty, nie ma osobistego doświadczenia.
Oded
4

Oprócz tabeli EAV, którą opisuje @Oded, ludzie używają bazy danych nosql dla tego typu informacji. Pamiętaj, że nie ma powodu, dla którego twoja aplikacja nie może używać relacyjnej bazy danych dla części, które mają sens w przypadku modelu relacyjnego i bazy danych nosql dla informacji, które tego nie robią.

Trzecią możliwością jest dodanie kilku kolumn do pól dodanych przez klienta (Customerfield1, customerfield2 itp.), A następnie poproszenie klienta o zdefiniowanie, co one oznaczają. Działa to tylko w przypadku liczby dodawanych przez użytkownika pól możliwych do skonfigurowania, więc dobrze jest, jeśli spodziewasz się, że będą potrzebować dwóch lub trzech, ale w ogóle nie będą działać, jeśli będziesz potrzebować setek.

HLGEM
źródło
1

Nie miałbyś pierwszej aplikacji, która miałaby tabelę z: UDF1, UDF2, UDF3 ... Inne sugestie (EVA lub NoSQL) są znacznie lepsze.

W zależności od RDBMS ( SQL Server oferuje to ), możesz wyjść z normalizacji i mieć pole, które przechowuje dane w formacie XML lub zwykły tekst. Do zarządzania tym będziesz musiał polegać na kodzie.

JeffO
źródło