Ale*_*DPC 8 sql database-design survey
我的数据库技能充其量是平庸的,我必须为调查数据设计数据模型.我已经对此有了一些想法,现在我觉得我陷入了某种EAV模型和涉及数百个表的设计之间,每个表都有数百个列(以及数千个记录).必须有一个更好的方法来做到这一点,我希望这个论坛上的聪明人可以帮助我.
我的问题是:我应该如何在RDBMS中对调查问题的答案进行建模?使用SQL Server是必需的.因此,应该从讨论中排除替代数据存储系统.(当然,有些应该并且将会被评估,但请不要在这里.)我不需要整个数据模型的解决方案,现在我只对Answers部分感兴趣.
我已经搜索了各种论坛,但我找不到真正的解决方案.如果已经在其他地方给过,请原谅我并提供一个链接,以便我可以阅读.
关于我必须处理的数据的一些假设:
我已经与不同背景的人讨论了这个话题,但还没有找到一个好的解决方案.我主要有两种意见.
我能想到的另一个选择是每个答案类型创建一个表,即一个用于多项选择题,一个用于自由文本问题等.这不是那么通用,它会导致很多联合,我想想,如果发明了新的答案类型,我将不得不添加一个表格.
很抱歉让您厌烦所有这些文字,感谢您的投入!
干杯,亚历克斯
PS:我在这里问了同样的问题:http://www.eggheadcafe.com/community/aspnet/13/10242616/survey-data-model--how-to-avoid-eav-and-excessive-denormalization.aspx
这听起来像是您正在解决一个常见问题:如何使用锤子来拧紧螺丝。
您列出的两种选择都不好,每种选择都有不同的原因。但这是因为您试图将特定的数据模型填充到关系数据库系统中。一个好的方法是超越关系数据库,看看其他一些数据库/存储系统,尝试几个,然后找到最适合您的项目的系统。
我尝试过 EAV 模型并放弃了,因为它太复杂了,而且我不敢尝试使用关系数据库系统的多表模型。我发现的关系数据库最简单的解决方案是:将每个完整的响应存储为单个 CLOB,序列化为 JSON 或 YAML(或其他轻量级的内容),并存储在表中responses。
create table responses (
id uuid primary key,
questionnaire_id uuid references questionnaires.id,
data text
)
Run Code Online (Sandbox Code Playgroud)