さまざまなモジュール/カテゴリの質問を含み、さまざまな質問/問題の種類 (つまり、複数選択、音声付き複数選択、音声とフォーム、その他) を許可するテスト ツールを開発しています。テスト (クイズ) には、選択肢の数が可変の多肢選択問題が含まれます。
以下は私の初期スキーマです:
Category(Id, Name)
Question (Id, CategoryId)
MultipleChoiceQuestion (Id, QuestionId, Text)
MultipleChoiceWithAudioQuestion (Id, QuestionId, Text, AudioFile, Transcript)
AudioQuestion (Id, QuestionId, AudioFile, Transcript)
Answer (Id, QuestionId, Correct)
MultipleChoiceAnswer (Id, AnswerId, Text)
AudioQuestionAnswers (Id, AnswerId, Field, Value)
Test (Id, UserId, TestDate)
TestQuestions (Id, TestId, QuestionId)
TestAnswers (Id, TestId, QuestionId, AnswerId)
さまざまな質問/問題タイプを許可する最善の方法は、その質問タイプに固有の追加フィールドを含むサブタイプごとにテーブルを作成することだと思いました. このアイデアは、データ モデリングに関する次の記事から得ました:論理データ モデリングにおけるタイプ、サブタイプ、およびカテゴリ パターン
テストはさまざまなカテゴリで構成され、各カテゴリはその特定のカテゴリの質問をランダムに選択して構成されます。ユーザーが実施した各テストは、データベースに保存されます。
私は正しい軌道に乗っていると思いますか?EntityFramework のような ORM を使用してテーブルをクラスにマップするにはどうすればよいですか。
私が考えた別のスキーマは、一般的すぎてクエリが難しいように思えました。
Content (Id, Name)
ContentMeta (Id, ContentId, MetaKey, MetaValue)
階層複合型である Test を表示するにはどうすればよいですか? ASP .NET MVC 3 (Razor) でモデル バインドを使用することは可能ですか?