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.
12
Odpowiedzi:
Martin Fowler podał ładny opis sposobu modelowania właściwości dynamicznych (o co właściwie prosi się) w swojej książce „Wzorce analizy” . Większość treści jest dostępna online za darmo jako artykuły w formacie PDF, ten, którego szukasz:
http://martinfowler.com/apsupp/properties.pdf
źródło
EAV
Modelu 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.
źródło
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.
źródło
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.
źródło