新しい追加テーブルを作成する必要はありません。テーブルへの影響を最小限に抑えてスキーマを効率的に管理したい。
設計規則:
特定のコースブックの番号付きトピックをトピックテーブルの ID 番号と混同しないでください。コースは必ずしも試験に属している必要はありません。コースに属していなければならないのは試験です。これまでのところ、設計は正しく行われています。試験のすべての問題を GeneralQuestion テーブルに保存していると仮定します。これは、過去の試験の問題バンクのような役割を果たします (試験モデレーターのみにアクセスを許可する近い将来のスケジュール試験を含む)。
GeneralQuestions テーブルの名前を ExamsQuestions に変更する方が理にかなっています。このバンクを使用して、デザインは 2 つの仮想問題タイプを作成します。バンクからの試験問題と、試験問題が質問テーブルを参照している問題テーブルからの問題です。これで、試験問題バンクに必要な参照キーが得られます。私の意見では、それは履歴テーブルです。確信が持てない最終的なテーブルは、理想的には、リアルタイム データを提供する格納されたクエリであるべきです。
主な質問: 過去/将来の各試験の問題を保存する予定はありますか? はいと言います。したがって、
私が提供した設計によると、日付は試験テーブルの非常に重要な列になります。試験テーブルには、日付とコース ID の両方が必要です。
以下は、テーブルスキーマを提案する方法です。
tblコース
ID、コース
ID NAME
b105 biology 1st year
c323 chemistry 1st year
e120 english 1st year
m122 maths 1st year
m250 maths 2nd year
p302 physics 3rd year
tblTopic : ID はインデックスですが、CID はトピックの親 (コース) を認識するものです。
ID、CID、トピック
ID CID NAME
t1 m122 Algebra
t2 m122 Probability
t3 e120 Essay Writing
t4 p302 Optics
t5 b105 liver system
t6 b105 neural system
t7 p302 mechanics
tblQuestion : ID はインデックスですが、TID は質問の親 (トピック) を認識するものです
ID、TID、質問
tblExam : ID はインデックスですが、CID は質問の親 (コース) を認識するものです
ID, CID, Exam, Date
ID TID QUESTION
q1 t2 x
q10 t7 p
q11 t4 n
q12 t6 i
q13 t7 r
q14 t6 k
q2 t1 y
q3 t1 z
q4 t2 a
q5 t2 v
q6 t6 s
q7 t6 h
q8 t1 l
q9 t2 g
tblExamsQuestions : 外部キー : 試験 ID、問題 ID
ID、QID
ID CID EXAM DATE
e1 b105 1st Year Biology Main Stream June, 08 2012
e2 m122 1st Year Maths Elective December, 20 2011
e3 b105 1st Year Biology Main Stream February, 10 2012
アプリケーション: 誰かが 1 年生の数学コースの昨年の試験問題を取得したいと考えています。それをどのように照会しますか?試験 ID が自動インクリメントの場合、どの ID がどの試験であるかを知るのは非常に困難です。したがって、ここでは、コース ID と試験が開催された日付のみを使用して、特定のコース試験の問題を検索できます。それは仕事をするはずです->同じコースの試験が同じ日に複数回開催されない限り。その後、時間ごとにデータを保存することもできます。ID が 1、2、3 だけでなく、適切な試験 ID である試験 ID でクエリを実行するように試験テーブルの設計を変更する限り、日付、時刻を削除できます。
コースID = m122 日付 = 昨年/月/日
これらは、複合検索キーとして機能する最も論理的/重要な詳細であり、Exam テーブルから Exam ID を検索し、ExamsQuestions バンクでそれを使用して試験問題を取得するために必要です。
select * from question
where id in (
select eq.qid from examsquestions eq
inner join exam e
on e.id = eq.id
where e.date = '2011-12-20'
and e.cid = 'm122');
ID TID QUESTION
q1 t2 x
q5 t2 v
q7 t6 h
ところで、あなたは試験問題を無作為に選んでいるので、その試験を受けなければならないかとても心配です. 1 つのトピックからすべての質問を取得するリスクはかなり大きいためです。とにかく、それは副次的な問題であり、コースのすべてのトピックから試験を生成するための公平で公正なメカニズムがあることを願っています;)
さらに疑問があれば聞かせてください。より良い解決策のアイデアを改善するために、どなたでも光を投げてください。
PS: お返事遅くなってすみません。