2011-02-04 9 views
7

Mam projekt, aby utworzyć stronę mvc asp.net do generowania quizu. Oto specyfikacja:Jaki jest dobry projekt schematu bazy danych dla silnika quizu wielokrotnego wyboru?

  1. Dla każdego użytkownika odwiedzającego witrynę, on/ona dostaje quiz.
  2. Każdy quiz zawiera kilka problemów z wielokrotnym wyborem.
  3. Każdy problem zawiera pytanie i 5 wzajemnie wykluczających się opcji.

Najprostszy model mogę myśleć jest następujący:

public class Problem 
    { 
     public int ProblemId { get; set; } 
     public string Question { get; set; } 
     public string A { get; set; } 
     public string B { get; set; } 
     public string C { get; set; } 
     public string D { get; set; } 
     public string E { get; set; } 
    } 

nie jestem pewien, że to jest dobre. Czy możesz dać mi propozycję lepszego projektu?

+2

"Przepełnienie stosu"? strona stała się czuła i zadaje pytania? –

+0

Jestem zaskoczony, że ktoś wcześniej nie dostał tej nazwy użytkownika. Prawie chcę go głosować. –

+0

Czy możesz wybrać więcej niż jeden wybór dla każdej odpowiedzi? –

Odpowiedz

3

Prosta i intuicyjne projekty są zawsze najlepsze, a ponieważ są naprawdę proste, zaczynamy wątpić w siebie ;-). Dobrze ci idzie, oprócz tego, że możesz również zapisać poprawną odpowiedź za pomocą samego problemu. To nie jest już tylko problem. Teraz jest to ProblemAndAnswer lub QuizItem.

Wszystko to można przechowywać w pojedynczej tabeli jako wiele kolumn. Ale musisz także zrozumieć, co to znaczy. Oznacza to, że robisz założenie, że pytanie zawsze będzie miało 5 wyborów. Jeśli masz mniej niż 5, to jest w porządku, ponieważ możesz przechowywać wartości null. Ale co, jeśli masz więcej? Dzieje się tak, gdy model z pojedynczym stołem zaczyna się rozpadać. Zacząłbyś teraz myśleć, że pytanie naprawdę może mieć 1 lub więcej opcji i chciałoby podzielić się na rodzicielskie tabele dla dzieci .... teraz podjąłeś świadomą decyzję ;-)

+2

Nie wiem. Ograniczenie schematu do dokładnie pięciu odpowiedzi wydaje się złe. Oczywiście, może dokładnie odpowiadać wymaganiom (dzisiaj), ale jeśli tylko trochę bardziej ogólności przy niezbyt dużym stopniu złożoności kosztów, sprawiłbym, że jest bardziej elastyczny. Utrzymanie tego tak prostego, jak wymaga tego wymóg (modulo a little headway), jest jednak dobrą zasadą. – Thilo

4

Właściwości od A do E? Nie, dziękuję! Chciałbym ułożyć moje tabele następująco:

Quiz (int QuizId, ...) 
Problem (int ProblemId, int QuizId, string Question) 
Answer (int AnswerId, int ProblemId, int Index, string Answer) 

Pole nazwy powinny być oczywiste (Indeks jest indeksem sortowania odpowiedziach na jedno pytanie, czy ich sprawy order)

3

Tabela Question ma id i description, który jest tekstem pytania ("Czy koty są potajemnie psami?").

Edytuj: Dodatkowo tabela Question ma correct_answer_id, co odpowiada poprawnemu wierszowi tabeli Answer.

tabela Answer ma question_id, łącząc go z powrotem do jego Question i description, który jest tekst odpowiedzi („To zależy od koloru kota.”).

W tym schemacie pytania nie mają ustalonej liczby odpowiedzi.

+1

Plus pole na Pytanie dla poprawnej odpowiedzi. Lub może być zakodowana, aby pierwsza odpowiedź była poprawna zawsze, jeśli masz zamiar przetasować je mimo to podczas ich wyświetlania (ale wtedy nie używaj question_id bezpośrednio w ukrytych polach lub użytkownik zacznie oszukiwać). Lub pole i odpowiedź, aby zaznaczyć je poprawnie (co pozwoliłoby na rozszerzenie systemu na pytania z wieloma poprawnymi odpowiedziami). – Thilo

+0

@Thilo Dziękujemy za przypomnienie! Pomniejsze pominięcie ... – ClosureCowboy

1

Pracuję nad tym samym rodzajem struktury bazy danych. Lepiej mieć tabelę wyboru, aby wstawiać wybory przeciwko konkretnemu identyfikatorowi pytania. Identyfikator quizu jest osobną tabelą zawierającą pytania i czas trwania testu.

Powiązane problemy