Bir sınav için MySQL veritabanı tasarımı

3 Cevap php

PHP ve MySQL ile online test yapma ve soru / cevap optimum ekleme için veritabanı tasarımı ve quiz soruları seçmek için nasıl karar biraz yardım ihtiyacım var. Tablo 80 soru 4 olası seçeneklerin artı doğru cevap ile her yapacak.

Veritabanından sorularını ve seçeneklerini alınırken ben rastgele 25 soru ve seçenekleri seçecektir.

Tüm sorular, seçenekler ve doğru cevaplar için tek bir sütun yapmak için daha iyi mi? Örneğin:

ID | Q | OPT1 | OPT2 | OPT3 | OPT4 | ANS

Ya da her soru için sütun, seçeneği ve doğru cevabı yapmak için daha iyi olurdu? Örneğin:

Q1 | Q1_OPT1 | Q1_OPT2 | Q1_OPT3 | Q1_OPT5 | Q1_ANS | Q2 | Q2_OPT1 | Q2_OPT2...

3 Cevap

Bu ayrı bir tabloda olası cevapları depolamak için daha iyi olurdu. Bu yerine sadece 4 soru başına cevapları herhangi bir miktarda olmasını sağlar. Ayrıca sorular cevaplardan farklı bir numaraya sahip olmanızı sağlar. Birden fazla sınav varsa, ayrıca bir Sınavlar Tablo isteyebilirsiniz.

Quizes:
  id
  name

Questions:
  id
  quiz
  prompt

Answers:
  id
  question
  prompt

QuizResult (someone taking a quiz)
  id
  quiz
  // other information about the quiz taker, possibly including the time

Şimdi doğru cevap bir şey çok daha zor olur. Ben burada yüksek uygulamaları tercih:

Each question has a value and each answer has value

Geçenlerde sizinle çalışmış bir sistem her soru için bir puan değeri ve her bir cevabı atayabilirsiniz. Yanlış cevaplar genellikle 0 var, doğru cevap tam miktarda var. Ayrıca, bu yöntemi kullanarak kısmen doğru cevap olabilir. Bu ben gitmek istiyorum yöntemdir.

Sen git ve her soru 10 puan değerinde olduğunu söylemek ya da farklı sorulara farklı ağırlıklar atayabilirsiniz olabilir:

Questions:
    id
    quiz
    prompt
    value (you can make this question worth more or less)

  Answers:
    question
    prompt
    value (you can make this answer worth more or less)

Store the correct answer in the Answers Table

Daha basit (ama daha az sağlam) çözümü sadece Cevapları tabloda doğru olan cevabı söylemektir.

Answers:
    question
    prompt
    is_correct

Store the correct answer in the Questions Table

Ben bunu tavsiye etmem. Bir soru oluşturduğunuzda birini eklemek kadar, bir doğru cevabı olmaz. Bu doğru bir soru yapmak için en az 3 sorguları demektir. Eğer yabancı anahtar bağımlılıkları kullanırsanız, bu hızla sinir bozucu alacak.

Her bir soru / seçenekler / cevap için bir satır yaşıyorsanız seçeneği 1 ile gidin.

Seçenek 2 herhangi bir anlam ifade etmiyor. Silmek / veritabanı şemasını değiştirmeden olacak bir soru eklemek istediğiniz her zaman! Ve her zaman sadece tek bir satır olacak!

İlk seçenek için gidin. Bu en normalize seçenek, ama mutlaka bir kanıt değildir. Ama normalize tasarım erdemleri çeşitlidir:

  • bu test portföyüne yeni soruları da dahil pasta bir parçasıdır. (Diğer seçenek masaya yeni sütunlar ekleyerek gerektirir).
  • Bu sonuç kümesi döndürür seçme deyimini yazmak basittir. (Alternatif seçenek bir dinamik SQL gerektirir)
  • her aynı coilumn_names metin haritaların set görüntülenen çünkü, soruları ve cevapları görüntüler bir GUI yazmak kolaydır.