我们正在为在线测验创建数据库模式。每个用户都会被问到几种类型的问题,例如:
类型1问题。答案为是/否的问题。
类型2问题。答案为是/否的问题。如果用户选择"是",那么用户必须写几个字来说明他为什么说"是"。
类型3问题。答案为是/否的问题。如果用户选择了"是",那么用户几乎没有选择余地。你的车是意外的吗?如果用户选择是,那么我们会显示复选框,如发动机故障、车身重新喷漆、洪水损坏、轮胎损坏等。用户可以选择其中一个或多个选项。
我们希望为此设计数据库,记住在在线测试中添加/删除/更新特定类型的问题应该是灵活的,并且应该快速检索数据以检查任何给定用户的答案。
我们正在考虑以下DB设计:
表用户:Id | Name | Email | Mobile。
表格问题:Id|Type|Title。(此表包含所有问题的列表)
表QuestionChoice:Id|QuestionId|值。(此表包含类型3问题的选择值,即发动机故障、车身重新喷漆等)
表用户响应:Id | UserId | QuestionId | IsYes | TextForYes
我有一些问题,比如在表"QuestionChoice"中,我们应该将每个值保存在单独的行中,还是只将它们保存为单行中逗号分隔的值?
它是最好的数据库设计还是其他选择?
用户:
id |名称|电子邮件|移动
问题:
id|title |类型
选项:
id|questionId|value
一个[questionId]对多个[value]。
根据你有多少数据,如果一个选项[值]可以用于多个问题,你可以创建一个表
值
id|name
并将选项设置为
id|questionId|valueId
用户答案:
id|userId|questionId|choice|optionId|输入
将这三个问题放在一个表中,或者为每种问题制作一个表。[或者甚至一个表用于输入,另一个用于选择/选项]
难道你不想用一张表来"链接"你的问题吗?[或用代码(?)处理的零件]
链接问题:[发件人和收件人为questionId,选项为是/否]
从|到|optionId|choice
对于您的担忧:请尽量避免将数据保存为单行中逗号分隔的值。出于"好"的原因,这是一种糟糕的做法。[ie:管理你的数据将是一件痛苦的事,sql是关系型的,而且更容易用这种方式]