Autor | Zpráva | ||
---|---|---|---|
Taps Profil |
Zdravím, vytvářím webovou aplikaci na zkoušení slovíček. Principiálně je aplikace vytvořena tak, že uživatel s rolí učitel zařadí studenty do třídy a pak pro ně vypíše test. Při založení testu se zároveň naplní tabulka odpovídá, do niž se uloži id testu a id uživatele. Mohl by mi prosím někdo poradit jak mohu SQL dotazem vypsat testy, které jsou zařazeny do určité třídy. Databázový návrh uvádím níže. Děkuji
|
||
juriad Profil |
Máš špatný návrh. Pozná se to v tomto případě podle toho, že prázdné třídě není možné vypsat test. Ale test přece nezávisí na počtu studentů.
Přidal bych tabulku: vypsane_testy (vypsaniID PK, třídaID, testID, datum) Do tabulky odpovida by přibyl sloupec s odkazem na vypsaniID .
Pokud mají učitelé možnost sdílet testy, tak by do tabulky vypsáných testů přibyl sloupec učitel, který test vypsal. |
||
Kajman Profil |
#3 · Zasláno: 6. 4. 2016, 11:01:56
SELECT t.*, tt.Nazev NazevTypu FROM test t JOIN (SELECT DISTINCT TestId FROM odpovida o JOIN studentivetride svt ON o.UzivatelId = svt.UzivatelId WHERE svt.TridaId = 42) x ON t.TestId = x.TestId LEFT JOIN typtestu tt ON t.TypTestuId = tt.TypTestuID ORDER BY t.Datum, t.TestId V případě nové tabulky vypsane_testy by se dalo ještě spojení na ni, pokud se mát test vypsat vícekrát s různým datumem vypsání. |
||
Taps Profil |
#4 · Zasláno: 6. 4. 2016, 11:27:20
juriad:
Na aplikační úrovni to mám ošetřeno tak, že ve třídě musí být alespoň jeden žák, proto aby mohl být vypsán test pro předmětnou třídu. Možná je to diskutabilní. Kajman: Děkuji |
||
Taps Profil |
#5 · Zasláno: 6. 4. 2016, 19:51:27
Kajman:
Zkouším SQL dotaz, který jsi mi uvedl a bohužel dochazí trošku k problematické situaci. Pokud např. do třídy x vložím test, tak test se v pořádku uloží. Pokud však vložím test do třídy y, tak se následně i v této třídě ukáže test, který jsem vložil do x, což je špatně. Bylo by možné ještě dotaz poupravit, tak aby k tomuto problému nedocházelo? Při založení nového testu vkládám i vlastníka testu (UzivatelID) jako nový řádek do tabulky Odpovida ( samozřejmě jsou do tabulky vloženi i další uživatele pro nichž je test určen). Nevím zda by šlo využít i této vlastnosti. Děkuji |
||
juriad Profil |
#6 · Zasláno: 6. 4. 2016, 20:33:11
Taps:
Že je učitel také v tabulce studentivetride? To by ten problém mohlo způsobovat. Čím víc to své schéma ukládání popisuješ, tím horší se mi jeví. |
||
Taps Profil |
#7 · Zasláno: 6. 4. 2016, 22:43:08
juriad:
„Že je učitel také v tabulce studentivetride“ Ne, není |
||
Kajman Profil |
#8 · Zasláno: 6. 4. 2016, 23:11:43
Pokud je stejný student v třídě x i y, tak přidáním testu studentovi spadne do obou tříd. Nevýhoda neopravené struktury.
|
||
Taps Profil |
#9 · Zasláno: 7. 4. 2016, 15:59:53
Omlouvám, se ještě že dodatečně upřesňuji popis. Aplikace je navržena do dvou úrovní a to
1) učitel - zařadí studenty do třídy a pak pro ně vypíše test 2) student - ten zakládá testy sám pro sebe (na této úrovni se nepracuje se třídami, ale pouze s testy) Můžete mi prosím ještě poradit, jak optimalizovat DB strukturu s přihlednutím na zmíněné úrovně. Samozřejmě mě jde primárně o to jak u úrovně učitele zjistit testy jenž spadají do určité třídy. Děkuji |
||
Časová prodleva: 8 let
|
0