Ahoj, řeším teď jeden web s databází (php, mysql-innoDB). Na webu budou k výběru testy ke kterým budou sady otázek. Může se stát, že test 1 a 3 budou mít několik otázek společných...
A teď jak vyřešit optimálně databázi...Zatím jsem to navrhl takto:
Mám tabulku kde je seznam testu a jejich info (id, popis testu, délka testu, počet otázek, vzorec pro výpočet výsledku a pod...)
A pak mám tabulky s otázkami (id, text otázky, možnosti,...)
A teď byly dvě (edit tři) možnosti:
1) V tabulce s otázkami vytvořit atribut id_testu, kde by bylo uloženo id testu, ke kterému otázka patří...Bylo by to skvělé, ale problém je, že víc testů může mít společnou otázku, takže by tam musel být záznam víckrát pokaždé s jiným id_testu...Docházelo by k redundanci.
2) Tak mě napadlo toto řešení (které se mi zdá lepší): Udělal jsem třetí tabulku kde je uloženo přiřazení testů, takže mám následující atributy: id (primární klíč), id_testu (cizí klíč tabulky seznam_testu id), id_otazky (cizí klíč tabulky seznam_otazek_id).
V této tabulce se ukládá propojení testů a otázek. Tedy například když budou dva testy a se třemi otázkami, tak záznam bude takový (např.):
(id,id_testu,id_otazky):1,1,1; 2,1,2; 3,1,3; 4,2,2; 5,2,3;6,2,4;...
Sice tam dochází také k menší redundanci, ale zdá se mi že už to není tak hrozné (může se opakovat max. 2 a 3 sloupec, na rozdíl od prvního řešení, kde by se mohl opakovat celý řádek s asi 7 sloupci)...
3) Ještě jedna možnost, kde by sice nebyla žádná redundance, ale nevím no: dát do tabulky s testy atribut id_otazek a tam uložit id otázek, které by byly odděleny nějakým znakem-oddělovačem (např. 1*4*7*9). Při startu testu si načíst ten řetězec, rozsekat do pole dle oddělovače a načíst ty otázky s idéčkama z výše uvedeného pole...Ale nevím, zda to nebude vypadat blbě...za druhé to komplikuje výmaz otázek - muselo by se projíždět všechny testy a kontrolovat zda k nim není otázka přidělena...
Co si o tom myslíte, případně máte jiné řešení? Díky
Návr databáze, optimalizace, nazor...
- Václav Sedlář
- Žlutá karta Bazar

-
- Registrován: 01. dub 2006
- Bydliště: Liberec
- Kontaktovat uživatele:
Návr databáze, optimalizace, nazor...
Naposledy upravil(a) Václav Sedlář dne ned 17. úno 2013, 10:44, celkem upraveno 1 x.
- OndraSter
- Středně pokročilý

- Registrován: 22. úno 2006
- Bydliště: Praha / ČVUT FIT
- Kontaktovat uživatele:
Re: Návr databáze, optimalizace, nazor...
2 je správně
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32
Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32
Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
- Václav Sedlář
- Žlutá karta Bazar

-
- Registrován: 01. dub 2006
- Bydliště: Liberec
- Kontaktovat uživatele:
Re: Návr databáze, optimalizace, nazor...
ok, díky...ještě jsem udělal třetí možnost (viz. původní příspěvek), která by byla nejjednodušší na implementaci a nebyla by žádná redundance ,ale nevím no...
- OndraSter
- Středně pokročilý

- Registrován: 22. úno 2006
- Bydliště: Praha / ČVUT FIT
- Kontaktovat uživatele:
Re: Návr databáze, optimalizace, nazor...
3 je fuj.
2 je to, jak se to má dělat. Je to klasická vazba M:N, takže přes třetí tabulku.
2 je to, jak se to má dělat. Je to klasická vazba M:N, takže přes třetí tabulku.
PC: i5-2500k 4.5GHz/24GB RAM/GTX560 Ti 1GB/>5TB - W7 Prof x64; Microsoft SideWinder X3 notebook: HP 6715b (4GB RAM) - W7 Prof x64;
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32
Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
mobil: Nokia Lumia 800 Cyan, 16GB; tablet: Toshiba Portege M200 (2GB, 64GB SSD, GeForce FX5200) - W7 Prof x32
Nahraďte Arduino výkonnější variantou!
Vývojová prostředí a nástroje | Webové prohlížeče | Seznam freehostingů
- Václav Sedlář
- Žlutá karta Bazar

-
- Registrován: 01. dub 2006
- Bydliště: Liberec
- Kontaktovat uživatele:
Re: Návr databáze, optimalizace, nazor...
ok, díky...