1

我正在开发一个测试工具,它将包括不同的模块/问题类别,并允许不同的问题/问题类型(即多项选择、带音频的多项选择、音频加表格等)。测试(测验)将包括具有可变数量选择的多项选择题。

以下是我的初始架构:

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)

我将如何显示作为分层复合类型的测试?是否仍然可以在 ASP .NET MVC 3 (Razor) 中使用模型绑定。

4

1 回答 1

1

怎么样:

调查 ID 名称 描述

QuestionType ID 名称 描述

问题 ID QuestionTypeId 显示

调查有问题,问题有类型。在存储答案时,情况就不同了。如果您将有数以万计的回复并且您必须临时查询该数据,那么我将编写动态 SQL 为您的每个调查创建一个表,否则我会将回复存储在一个桌子。

于 2011-10-10T08:21:00.617 回答