Dynamiczne formularze kreatora formularzy i projektowanie baz danych? [Zamknięte]

30

Powiedz, że użytkownicy mogą tworzyć własne formularze internetowe (pola tekstowe, zaznaczenia itp.) I publikować je w Internecie, aby użytkownicy mogli je wypełnić.

Czy ktoś ma jakieś zasoby lub porady na temat sposobu tworzenia bazy danych w celu powiązania z dynamicznymi formularzami?

Na przykład, czy utworzyłbyś tabelę podrzędną dla każdego formularza, czy różne wersje danego formularza?

Jeff Borden
źródło
Podoba mi się ten post: Tworzenie dynamicznego interfejsu użytkownika
opartego na danych

Odpowiedzi:

35

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 formstabelach, z odniesieniem do utworzonego użytkownika (zakładając, że śledzisz użytkowników jako odpowiednie podmioty). Formularz jest wypełniany form_elementstym odwołaniem do formstabeli, aby wiedzieli, do której formy należą, i element_typestak, aby wiedzieli, jakiego typu są. element_typesbę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_valuesdo przechowywania możliwych opcji dla list, które normalnie mają te elementy.

FrustratedWithFormsDesigner
źródło
2
Świetne rozwiązanie. TY
Jeff Borden,
czy znasz jakieś istniejące narzędzia GUI do tworzenia formularzy internetowych, których można użyć do wypełnienia schematu tabeli, który został opisany powyżej przez przypadek? W razie potrzeby korzystamy z .NET. TY.
Jeff Borden,
@JeffBorden: Nie, ale jestem pewien, że coś tam jest.
FrustratedWithFormsDesigner
Zakładam więc, że najlepszym sposobem rejestrowania przesłanych formularzy byłby schemat: form_submissions id (PK) id_formacji (FK do forms.id) id_użytkownika (FK do users.id) ... id_dostępu_formacji id (PK) id_formacji (FK do form_submissions.id) wartość form_element_id (FK do form_elements.id) wartość Spójrz, prawda?
Jeff Borden,
@FrustratedWithFormsDesigner W jaki sposób można wybrać opcję generowania tabeli z pól formularza i wartości pól w tym schemacie !?
Hermes Autran