it-swarm-eu.dev

Návrh databáze dotazníků - který způsob je lepší?

Mám jednu dlouhou html stránku, několik sad otázek rozdělených do malých sekcí (přibližně 15 podsekcí na jedné stránce), celkový počet otázek je asi 100 otázek: liší se od vstupu, více možností, zaškrtávacích políček, přepínačů, textarea, a nahrání souboru. Jedna otázka by mohla obsahovat mnoho odpovědí, které byly získány buď ze skupiny zaškrtávacích políček, ze seznamu s výběrovým seznamem, ze skupiny s výběrem z více odpovědí, nebo se všechny sloučily do jedné odpovědi. Myslel jsem, že budu používat tento návrh databáze níže, ale v poslední době jsem zjistil, že to nakonec není dobrý přístup.

  1. Jeden zákazník mohl mít pouze jednu sadu otázek: jeden zákazník na 100 otázek.
  2. Pro starý přístup neuchovávám otázku v databázi, ale přiřaď ji jako konstantu v PHP kódování místo toho.) Problém je, že musím porovnat otázku v PHP synchronizovat s odpovědí v databázi. Pokud by byla jedna otázka změněna/smazána/přesunuta z PHP, určitě bych se ztratila, abych ji porovnala s odpovědí v databázi dotazníků. Lepší řešení?
  3. Mohl bych si ponechat více odpovědí získaných z více prvků ve formě do jednoho pole jako jednu odpověď? Jak lze toto pole načíst a znovu zobrazit pro prohlížení zákazníků ve formuláři?
  4. Kterou možnost níže bych měl použít?

MOŽNOST 1: Starý přístup (1 tabulka)

TABULKA: Dotazník

  • ID (PK)
  • Zákaznické identifikační číslo
  • Postavení
  • A1
  • A2
  • A3
  • .
  • .
  • .
  • A100

MOŽNOST 2: Nový přístup (2 tabulky)

TABULKA: Otázka

  • QID (PK)
  • Otázka (varchar)

TABULKA: Odpověď

  • AID (PK)
  • Zákaznické identifikační číslo
  • QID (int)
  • Odpověď (varchar)

Nebo MOŽNOST 3?

15
Modular

Váš dotazník rozhodně nemodifikujte. Použijte relační databázi nebo xml soubory. Navrhuji následující tabulky

  • Questionnaire: Obecný popis dotazníku. Název, název průzkumu, datum vydání dotazníku, verze atd.

  • Section: Sekce, které tvoří dotazník. Číslo sekce, název sekce, popis.

  • Question: Otázky patřící k sekci. Číslo otázky, text otázky, popis, typ otázky (text, výběr z několika možností atd.).

  • Question_Choice: Možné odpovědi patřící k otázce odpovídající jednotlivým zaškrtávacím políčkům, přepínačům atd. Text výběru, číslo volby, objednávka.

  • Respondent: Osoby odpovědné na otázky. Osobní údaje, uživatelské číslo.

  • Interview: Rozhovory nebo testy nebo průzkumy (v závislosti na povaze dotazníku) patřící jednomu respondentovi a jednom dotazníku. Pokud respondent může vždy odpovědět pouze na jeden dotazník (nebo pokud je průzkum anonymní), je tato tabulka zastaralá a může být sloučena s tabulkou respondentů. Datum rozhovoru (nebo datum zkoušky nebo datum průzkumu), tazatel (pokud je použit).

  • Answer: Odpovědi patřící jednomu rozhovoru (nebo respondentovi, viz výše) a jedné otázce. Odpověď na text (pro otázky typu textu), volba (pro přepínače).

  • Answer_Choice: Volby patřící jedné odpovědi a jedné otázce na dotaz, když lze zkontrolovat více možností.

Toto je velmi normalizovaný přístup; můžete se však rozhodnout zřetězit volby do jednoho řetězce nebo je uložit jako bitový vzor, ​​nebo jej podle jiného potřeby zjednodušit jiným způsobem.

Potřebujete několik stolů,

1 - Otázky (id otázky, typ vstupu, viditelný, typ otázky, text otázky, očekávané odpovědi ....)

2 - Odpovědi (id otázky, ID uživatele, id aktivity, odpověď ....)

3 - Uživatelé (uživatelské jméno, uživatelské jméno ......)

4 - Tabulka, ve které je uložena otázka/odpověď (id aktivity, data/čas, id uživatele)

Můžete také chtít mít tabulku, která určuje otázky, které by měly být použity pro každou aktivitu - buď seskupené podle uživatele, nebo možná sbírka otázek. Cizí/primární klíče budou sloupce, které mají stejný název ve více tabulkách a měly by být indexovány.

Pokud použijete tuto strukturu, měli byste být schopni přidat otázku nebo uživatele nebo změnit odpověď, aniž byste museli měnit schéma nebo prezentační kód - ujistěte se, že prezentační kód je dynamicky vytvářen v době spuštění - stačí přidat záznam na vhodném místě.

Tento přístup může zpočátku trvat déle než přístup s pevným kódováním, ale jeho údržba bude mnohem jednodušší, protože ke změně chování budete muset pouze změnit data.

(Tip, chcete-li vytvořit prezentační vrstvu, budete potřebovat dotaz, který zobrazí příslušné otázky, které se zobrazí, pak smyčku přes tuto sadu výsledků a zavolat metodu k vykreslení na otázku na obrazovce, metody, které si vyberete, jsou vhodné pro prezentace této otázky [textové pole, rozhlasová skupina atd.])

6
adam f