database-design - 规范化具有互连 m2m 关系的数据库
问题描述
我有一个问卷调查的商业模式。每份问卷都有多个问题和受访者。所以我的模型看起来像这样:
table questionnaire - id
table respondent - id, name
table question - id, text
table questionnaire_respondent - id, questionnaire_id, respondent_id
table questionnaire_question - id, questionnaire_id, question_id
table respondent_answer - id, questionnaire_respondent_id, questionnaire_question_id, answer_text
模型的问题在于,respondent_answer
我在该问卷中有一种数据重复,可以从两者中找出questionnaire_question_id
和questionnaire_respondent_id
(意思是数据重复)。第二个潜在问题是我们可以插入问题的问卷与受访者问卷不对应的行。我知道我可以使用插入/更新触发器来保护自己。然而,我正在寻找一种在架构层面上确保这一点的方法。因为当前的架构似乎不符合 5 种规范化形式(不确定 5 种中的哪一种)。如果我未能清楚地说明问题,请告诉我,我将尝试提供一个示例。
问题是如何规范当前的数据库架构?
解决方案
有了这个模型,这两个问题都在架构上得到了解决!
table questionnare_name - id, name
table question_text - id, text
table respondent - id, name
table question - id, questionnare_name (FK), question_text (FK)
table answer - id, respondent (FK), question (FK), text
推荐阅读
- apache-spark - Spark SQL 是否会一直检查所有分区的信息,甚至指定分区?
- xaml - xaml ControlTemplate 中的 TemplateBinding 不起作用
- html - HTML“字体”标签正在使用基因组数据创建空白
- ios - 如何缩放视图的所有组件?
- java - 如何验证 RestAPI 控制器端点的 RequestHeader
- node.js - 从包含“require”的 C++ 插件中运行 JS 代码
- python - 测试数据和新数据之间的随机森林准确度差异
- android - 带有数据绑定的自定义视图中的 Kotlin android 扩展
- postgresql - 在 Postgres 中使用子查询重构执行缓慢的查询
- sql - 红移中的日志功能