2017-06-21 1 views
0

Ich würde gerne wissen, ob meine Datenbank-Setup für ein Multiple-Choice-Quiz ausreicht. Wenn es einen besseren Weg gibt, um dies zu tun, lass es mich wissen.Erstellen einer Multiple-Choice-Quiz-Datenbank

  • Es hat drei Arten von Tests (Clerical, Numerical, Verbal).
  • Der Benutzer wird jeder alle drei Tests und die Punktzahl für beantworten müssen gespeichert
  • ich die Entscheidungen und die richtige Antwort zu speichern in der tbl_answer so , dass ich konnte
in der Anwendung abrufen und Ausgang

tbl_user (ID, Name, clerical_score, numerical_score, verbal_score)

tbl_quiz (ID, klerikale, numerisch, verbal)

tbl_question (ID, FK: quiz_ID, Frage)

tbl_answer (ID, FK: question_ID, choice_1, choice_2, choice_3, choice_4, correct_answer)

+1

Ich würde versuchen, Tabellen mit verwirrenden Namen zu vermeiden wie 'ID'. Erwägen Sie die Verwendung von 'User_ID, Quiz_ID usw. –

+0

Das scheint ein anständiges Schema zu sein. – 97amarnathk

+0

@RichBenner: Interessant, weil ich das genaue Gegenteil behaupten würde. Begriffe wie 'User.User_ID' sind für mich sehr überflüssig. (Obwohl ich auch dagegen sprechen würde, aus ähnlichen Gründen jede Tabelle mit 'tbl_' zu versehen.) – David

Antwort

0

nach Ihrem Schema, das releation zwischen tbl_question-tbl_answer Eins zu Eins sein wird. Also, es ist besser, Gruppe die beiden Tabellen in einem: tbl_question (ID, FK: quiz_ID, questionn, choice_1, choice_2, choice_3, choice_4, correct_answer)

0

Wie pro Ihr Szenario würde ich dies vorschlagen :

user_table (benutzer_id (primary_key), benutzer_name, klerikale_score, numeric_score, verbal_score, total_score);

clerical_table (c_question_id, (primärer_key), c_questions, c_option1, c_option2, c_option3, c_option4, marks);

numerische_Tabelle (n_question_id, (primary_key), n_fragen, n_option1, n_option2, n_option3, n_option4, Marken);

verbal_table (v_fragen_id, (primärer_schlüssel), v_fragen, v_option1, v_option2, v_option3, v_option4, marks);

-> Jetzt denken Sie daran, Option 1 immer eine in allen drei Tabellen zu korrigieren. -> Also, wenn Sie Optionen aus Tabellen während der Anzeige der Optionen abrufen verwenden Sie die "RANDOM" -Funktion, um die Optionen zu vervollständigen, sogar die Fragen beim Starten neuer Seccsion für jeden Kandidaten zu mischen. -> Um die richtige Option zu finden, nehmen Sie einfach den Schlüssel auf Ihrer Webseite, den der Kandidat ausgewählt hat, und stimmen Sie ihn mit Option1 der Tabelle für die Richtigkeit ab.

0

Warum drei Felder für den Quiztyp in tbl_quiz? Er erwartet stattdessen etwas wie tbl_quiz(ID, quiztype_id).

  • tbl_user (id, name)
  • tbl_quiztype (id, Beschreibung)
  • tbl_quiz (id, fk: quiztype_id)
  • tbl_question (id, fk: quiz_id , Frage, choice_1, choice_2, choice_3, choice_4, correct_answer_no)
  • tbl_user_result (id, fk: user_id, fk: quiztype_id, Punkte)

an dessen Stelle auch alle Antworten speichern könnten eher dann die aggregierten Ergebnisse:

  • tbl_user_answer (id, fk: user_id, fk: question_id, answer_no)

Und wenn Sie für eine unterschiedliche Anzahl von Antwortmöglichkeiten in der Zukunft ermöglichen wollen, könnten Sie tbl_question von

ersetzen
  • tbl_question (id, fk: quiz_id, frage, correct_answer_no)
  • tbl_answer (id, fk: question_id, answer_no, Antworttext)