Stránka 1 z 1

Návr databáze, optimalizace, nazor...

Napsal: ned 17. úno 2013, 10:39
od Václav Sedlář
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

Re: Návr databáze, optimalizace, nazor...

Napsal: ned 17. úno 2013, 10:41
od OndraSter
2 je správně

Re: Návr databáze, optimalizace, nazor...

Napsal: ned 17. úno 2013, 10:45
od Václav Sedlář
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...

Re: Návr databáze, optimalizace, nazor...

Napsal: ned 17. úno 2013, 11:02
od OndraSter
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.

Re: Návr databáze, optimalizace, nazor...

Napsal: ned 17. úno 2013, 11:06
od Václav Sedlář
ok, díky...