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)
datum je tam proto, aby se rozlišily dva stejné testy; když by učitel chtěl testovat to samé na začátku a na konci roku
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
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
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
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
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
juriad:
Že je učitel také v tabulce studentivetride
Ne, není
Kajman
Profil
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
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

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