我正在开发一种测试工具,它将包含不同的模块/类别的问题,并允许不同的问题/问题类型(即多种选择,多种选择,音频,音频和表格,其他)。测试(测验)将包括具有可变数量选择的多项选择题。
以下是我的初始架构:
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)
我认为允许不同问题/问题类型的最佳方法是为每个子类型创建一个表,其中包含特定于该问题类型的其他字段。我从这篇关于数据建模的文章中得到了这个想法:Type, Subtype, and Category Patterns in Logical Data Modeling
测试由不同类别组成,每个类别将包含该特定类别中随机选择的问题。用户执行的每个测试都将保存到数据库中。
你认为我走在正确的轨道上吗?如何使用ORM(如EntityFramework)将表格映射到类。
我认为另一种模式似乎过于通用且难以查询。
Content (Id, Name)
ContentMeta (Id, ContentId, MetaKey, MetaValue)
如何显示分层复合类型的测试?是否仍然可以在ASP .NET MVC 3(Razor)中使用模型绑定。
答案 0 :(得分:1)
怎么样:
<强>调查强> ID 名称 描述
<强> QuestionType 强> ID 名称 描述
<强>问题强> ID QuestionTypeId 显示
调查有问题,问题有类型。在存储答案时,这是一个不同的故事。如果您将有成千上万的响应,并且您将不得不临时查询该数据,那么我会编写动态SQL来为您的每个调查创建一个表,否则我会将响应存储在一个表