sql >> Databáze >  >> RDS >> Mysql

Návrh databáze pro hru pro více hráčů/jednoho kvízu

Ve skutečnosti má váš systém tři logické části (moduly):

  • uživatelský modul, který obsahuje uživatelská data a implementuje ověřování a autorizaci uživatelských akcí
  • modul dotazníků, který zahrnuje správu otázek a odpovědí
  • modul historie dotazníků, který obsahuje historii každého uživatele

Návrh databáze těchto modulů může vypadat následovně

UŽIVATELSKÝ MODUL:

role - obsahuje uživatelské role v systému

  • id – jedinečný identifikátor role
  • jméno – název role, například správce, pracovník atd.

uživatel - obsahuje uživatele a informace o rolích, které jim byly přiděleny

  • id – jedinečný identifikátor uživatele
  • uživatelské jméno
  • heslo
  • role_id – identifikátor, kterým byla role přiřazena uživateli

MODUL DOTAZNÍKŮ:

téma - obsahuje témata otázek

  • id – jedinečný identifikátor motivu
  • název – název motivu

otázka - obsahuje otázky

  • id – jedinečný identifikátor otázky
  • topic_id – identifikátor tématu otázky
  • text – obsah otázky
  • is_exam_question – otázka ke zkoušce nebo ne
  • typ – typ odpovědí (logická hodnota, zaškrtávací políčka atd.)
  • obtížnost

odpověď - obsahuje všechny odpovědi na otázky

  • id – jedinečný identifikátor odpovědi
  • question_id – identifikátor otázky, která obsahuje odpověď
  • text – obsah otázky
  • is_correct – příznak, který znamená, že odpověď je pravdivá nebo nepravdivá

místnost - obsahuje informace o místnostech

  • id – jedinečný identifikátor rumu
  • name – název rumu
  • kapacita – maximální počet pracovníků, kteří se mohou připojit k místnosti
  • type – typ pokoje:skupina, sólo nebo atd.
  • learing_type – typ místnosti:zkouška, praxe nebo atd.

user_in_room - obsahuje informace o uživatelích, kteří byli připojeni k místnosti

  • user_id – identifikátor uživatele, který byl připojen k místnosti
  • id_pokoje – identifikátor místnosti
  • skóre – aktuální skóre uživatele v místnosti

MODUL HISTORIE:

user_question_history - obsahuje informace o otázkách, na které uživatel odpověděl

  • user_id – identifikátor uživatele
  • room_id – identifikátor místnosti, kde uživatel odpovídal na otázky
  • question_id – identifikátor otázky, na kterou uživatel odpověděl
  • skóre – skóre uživatele podle otázky

user_answer_history - obsahuje informace o odpovědích, které si uživatel vybral

  • user_id – identifikátor uživatele
  • room_id – identifikátor místnosti, kde uživatel odpovídal na otázky
  • question_id – identifikátor otázky, na kterou uživatel odpověděl
  • answer_id – identifikátor odpovědi, která byla vybrána uživatelem

Použití tohoto schématu umožňuje vytvářet různé sestavy. Můžete například zobrazit výsledek všech uživatelů podle místnosti

SELECT r.id,
    r.name,
    u.username,
    ur.score
FROM room as r
LEFT JOIN user_in_room as ur ON ur.room_id = r.id
LEFT JOIN user as u ON u.id = ur.user_id
WHERE r.id = <id>

Nebo si můžete prohlédnout podrobné informace o odpovědích uživatele

SELECT 
    q.text,
    a.text
FROM user_in_room as ur ON ur.room_id = r.id
LEFT JOIN user_question_history as uqh ON ugh.user_id = ur.user_id AND ugh.root_id = ur.room_id
LEFT JOIN question as q ON q.id = ugh.question_id
LEFT JOIN user_answer_history as uah ON uah.user_id = ugh.user_id AND uah.room_id = ugh.room_id AND uah.question_id = ugh.question_id
LEFT JOIN answer as a ON a.id = uah.answer_id
WHERE ur.room_id = <id> AND ur.user_id = <id>


  1. Odstraňování problémů Žádný takový soubor nebo adresář při spuštění `php app/console doctrine:schema:create`

  2. PHP jak uložit HTML řetězec do databáze

  3. SQL, Manipulace s prázdnými buňkami

  4. Při aktualizaci duplicitního klíče – více sloupců