Autor Zpráva
Snipo
Profil
Ahojte, skúšam vytvoriť niečo ako online systém pre trénera a narazil som asi na menší problém. Totiž po registrácií užívateľ musí vyplniť dotazník, resp. formulár. Formulár obsahuje veľké množstvo otázok a logicky potrebujem tie hodnoty niekde uchovať pre neskoršie použitie. Aký je najlepší spôsob? Mňa napadlo vytvoriť stĺpec pre každú otázku ale to by ich tam bolo strašne veľa, nevadí to?
juriad
Profil
Klasicky se to dělá tak, že máš tři tabulky:
Uživatelé (id, jméno)
Otázky (id, text, typ)
Odpovědi (id_uzivatele, id_otazky, odpoved)

Případným rozšířením je například tabulka možností u otázek (když je výběrová).
Snipo
Profil
No, lenže keď to vytvorím takto aj s tou tabuľkou možností, potom čo ukladať do stĺpca odpoved? Kedže pri jednom type otázky to môže byť obyčajný text a pri druhom zase id možnosti.
juriad
Profil
Snipo:
Budeš mít sloupec textová odpověď, která může být NULL v případě vyběru jedné z možností.

Pokud chceš umožnit i více odpovědí z výběru, přidáš další vazební tabulku
možnosti_v_odpovědi (id_odpovedi, id_moznosti)
Pokud to nechceš umožnit, postačí do do tabulky odpovědi přidat sloupec id_moznosti, který může být NULL.
Všimni si, že toto umožňuje i textovou odpoěď při výběru možnosti „jiné“ (pak by tabulka možnosti měla i sloupec indikující, zda možnost umožňuje uživatelský komentář).
V případě výběru více možností a komentáře každé z nich, by se přidal textový sloupec i do té vazební tabulky.
Snipo
Profil
Jasné, ďakujem za rady...
Keeehi
Profil
Snipo:
To co navrhuje juriad je typický návrh pro situaci, kdy se otázky generují dynamicky. To znamená, pokud se pro každého uživatele mohou používat jiné otázky. Kdyby jsi měl třeba 30 otázek a každý uživatel by podle nějakého pravidla odpovídal jen na 5 z nich, tak pokud by jsi pro každou vytvořil sloupec, bylo by tabulce spousta prázdného místa.
Pokud máš ale 30 otázek a všichni uživatelé ti vyplňují všech 30, může být správným návrhem i jedna velká tabulka s 30ti sloupci.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0