W kilku projektach aplikacji internetowych, w których uczestniczyłem, klient prosi o możliwość tworzenia własnych formularzy. Powstaje pytanie, jak przechowywać definicje formularzy, a następnie, jak przechowywać wartości wprowadzone przez użytkownika w tych niestandardowych formularzach.jaka jest najlepsza implementacja formowalnych i modyfikowalnych formularzy internetowych klienta w relacyjnej bazie danych?
Widziałem to zrobić na dwa sposoby:
Zakładając, że klient określa tylko, jak wielu dziedzinach i jakie etykiety związane są z tych dziedzinach; możemy znaleźć rozwiązanie obejmujące cztery tabele.
FormDefinition
,FormFieldDefinition
,FormInstances
,FormFieldValues
. Klient wprowadza zmiany doFormDefinition
iFormFieldDefinition
, a aplikacja internetowa wykorzystuje te informacje do renderowania formularza internetowego HTML, na którym użytkownik strony (użytkownik końcowy) prześle formularz, w którym zostanie utworzony nowy wiersz w numerzeFormInstances
, a wartości są zapisane w tabeliFormFieldValues
.Wiersze w
FormDefinition
określa postać, tjform definition ID = 2, form title = 'Car Registration Form'
. Wiersze wFormFieldDefinition
definiują pola formularza wFormDefinition
, tj.field definition ID = 7, field label = 'Car Model', field type = 'varchar(50)'
. Wiersze wFormInstance
to instancja każdego formularza wypełnionego przez użytkownika, tj.definition id = 2, date_entered = '2008-09-24'
. I wiersze wFormFieldValues
są wpisami użytkownika, tj.field definition = 7, value = 'Tiburon'
.Niestety, oznacza to, że wartość w kolumnie
FormFieldValues
musi być typu char największego możliwego rozmiaru, który klient może określić w formie internetowej ... i kiedy zmienić definicje form, zarządzanie starych danych staje się niepewna. Ale wpisy użytkowników są możliwe do sprawdzenia (napisałem quick query, który zawiera wpisy użytkowników o identyfikatorze formularza, który jest podobny do another pivot question).Alternatywą dla używania czterech tabel byłoby serializowanie definicji formularzy i formularzy formularzy użytkownika w formacie XML (lub YAML lub podobnym) i zapisywanie ich jako tekstu. Plusem jest to, że formularze są czytelne dla człowieka w bazie danych. Wadą jest to, że będzie więcej narzutów aplikacji przy analizie XML, a baza danych stanie się znacznie mniej dostępna z punktu widzenia SQL.
Moje prawdziwe pytanie brzmi: jak nazywa się ten model bazy danych? (Mogę google rozwiązać ten problem.) Ale chciałbym udzielić odpowiedzi na pytanie: która jest lepsza implementacja lub czy istnieją lepsze (lub równie dobre) implementacje?
Jestem zainteresowany najlepszymi praktykami w takich sprawach. Oprócz dodawania niestandardowych (meta) danych do istniejących formularzy/rekordów. W przeszłości wymyślałem własne rozwiązania, ale miło jest usłyszeć, co zrobili inni. – mattlant