Dynamiczne tworzenie nowych tabel na podstawie danych wprowadzonych przez użytkownika zwykle nie jest dobrym pomysłem. Jeśli zmieni się podstawowa struktura formularzy, wszystkie dynamicznie tworzone tabele będą musiały zostać zaktualizowane w celu uwzględnienia nowych kolumn lub usunięcia starych, co może powodować problemy z konserwacją. Następnie pojawia się problem ze znajomością tabeli do zapytania (co prawdopodobnie doprowadzi do dynamicznego SQL, który otworzy wszystkie nowe problemy). I prawdopodobnie są też problemy z wydajnością, ale nie jestem pewien, jak źle by to było. Ponadto tabela jest zwykle używana do reprezentowania typu encji (takiej jak „formularz internetowy”) zamiast posiadania kopii tej samej tabeli dla każdej nowej instancji tej samej encji.
Sugerowałbym pojedynczy stół dla formularzy. Będziesz potrzebował identyfikatora na każdym formularzu, aby określić, czyj to jest formularz:
formy
-----
id (PK)
imię
owner_id (FK do users.id)
(inne pola)
elementy_formowe
-------------
id (PK)
form_id (FK do forms.id)
element_type_id (FK na element_types.id)
podpis
(inne pola)
typ_types
-------------
id (PK)
imię
wartości_list_elementu
-------------------
id (PK)
element_id (FK do form_elements.id)
imię
wartość
(inne pola?)
Twoja aplikacja internetowa pozwala użytkownikom tworzyć formularze, które zostaną zapisane w forms
tabelach, z odniesieniem do utworzonego użytkownika (zakładając, że śledzisz użytkowników jako odpowiednie podmioty). Formularz jest wypełniany form_elements
tym odwołaniem do forms
tabeli, aby wiedzieli, do której formy należą, i element_types
tak, aby wiedzieli, jakiego typu są. element_types
będzie przechowywać statyczną (głównie) listę różnych elementów, które może posiadać formularz. Typy mogą być następujące: „pole_tekstowe”, „lista_dotykowa”, „przyciski radio”, „pole wyboru”. W przypadku typów takich jak „drop_down_list” i „radio_buttons” będziesz potrzebować dodatkowej tabeli, być może wywoływanej element_list_values
do przechowywania możliwych opcji dla list, które normalnie mają te elementy.