如何避免数据库模型中的冗余?

昆汀·沃尔特

我正在寻找一种优化我的数据库模型的解决方案。数据库管理调查,您可以添加问题并回答它们。条目是对调查的答案,并且对每个问题都有答案。

这是简化的架构: 在此处输入图片说明

有没有办法避免冗余而不删除条目表?

请记住,我的模型包含更多表以提供更复杂的问题类型。目前,我无法提供完整的架构。

随机种子

您有一种感觉ENTRIES.survey_id或者说QUESTIONS.survey_id是多余的感觉(可能是因为您看到一个可以通过ANSWERS实体推断出一个或另一个)。

实际上,QUESTIONS与保持ENTRIES一种识别关系SURVEYS(如果没有相应的调查,则条目或问题可能不存在)。从形式上讲,它们的主键必须包括对其父表的外键引用SURVEYS

CREATE TABLE SURVEYS (
    survey_id INT NOT NULL,
    PRIMARY KEY (survey_id)
);

CREATE TABLE QUESTIONS (
    question_id INT NOT NULL,
    survey_id INT NOT NULL,
    PRIMARY KEY (question_id, survey_id),
    FOREIGN KEY (survey_id) REFERENCES SURVEYS(survey_id)
);

CREATE TABLE ENTRIES (
    entry_id INT NOT NULL,
    survey_id INT NOT NULL,
    PRIMARY KEY (entry_id, survey_id),
    FOREIGN KEY (survey_id) REFERENCES SURVEYS(survey_id)
);

作为一个有趣的结果,你的ANSWERS表应该*其实包括survey_id在其外键引用,因为这个领域是双方的主键的一部分QUESTIONSENTRIES

CREATE TABLE ANSWERS (
    entry_id INT NOT NULL,
    survey_id INT NOT NULL,
    question_id INT NOT NULL,
    PRIMARY KEY (entry_id, survey_id, question_id),
    FOREIGN KEY (entry_id, survey_id)
        REFERENCES ENTRIES(entry_id, survey_id),
    FOREIGN KEY (question_id, survey_id)
        REFERENCES QUESTIONS(question_id, survey_id)
);

如果可以帮助您消除一个survey_id字段是多余的错误印象,请考虑可能存在一个没有答案的条目(例如,创建新条目时)。在这种情况下,ENTRIES.survey_id显然是必需的。


*其实这额外的字段需要以约束“的答案必须涉及到一个问题,一个条目都属于同一调查”的模式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何防止数据库中的APNS设备令牌冗余

来自分类Dev

创建DTO时如何避免冗余业务逻辑(数据库获取)?

来自分类Dev

避免锦标赛软件的数据库中存在冗余?

来自分类Dev

数据库设计,如何减少不同列的数据冗余

来自分类Dev

如何避免从数据库中检索重复的值?

来自分类Dev

如何避免在数据库中创建“假” ID?

来自分类Dev

如何构造数据库以避免表中重复

来自分类Dev

如何避免从数据库中检索重复的值?

来自分类Dev

如何使用JavaScript从数据库/模型中获取数据

来自分类Dev

如何从linq数据库模型中获取数据

来自分类Dev

避免Prolog中的数据冗余

来自分类Dev

如何从此脚本中删除冗余数据库名称?

来自分类Dev

如何从数据库中检索选择性对象?对象的冗余渲染

来自分类Dev

如何从数据库中删除所有文件的空链接和所有冗余文件

来自分类Dev

数据库如何处理冗余值?

来自分类Dev

数据库架构中的外键太多(冗余?)

来自分类Dev

如何避免视图模型的冗余属性

来自分类Dev

如何从数据库模型中__repr__类型Unicode

来自分类Dev

如何更改Rails中的ruby数据库模型?

来自分类Dev

如何在Django中创建数据库模型?

来自分类Dev

如何:Visio 2013中的数据库模型

来自分类Dev

如何观察模型从 Firebase 数据库中的删除?

来自分类Dev

如何从此数据库布局的1:M关系中删除冗余,并且仍然能够摘录所需的数据?

来自分类Dev

Hibernate的创建数据库冗余列

来自分类Dev

Laravel在模型中定义数据库

来自分类Dev

当不同的函数需要数据库调用中的数据时,如何避免全局变量。(JS)

来自分类Dev

向数据库中插入数据时如何避免重复

来自分类Dev

使用asp.net在数据库中插入数据时如何避免重复值?

来自分类Dev

如何将表单模型中的数据获取到 Django 中的数据库中

Related 相关文章

  1. 1

    如何防止数据库中的APNS设备令牌冗余

  2. 2

    创建DTO时如何避免冗余业务逻辑(数据库获取)?

  3. 3

    避免锦标赛软件的数据库中存在冗余?

  4. 4

    数据库设计,如何减少不同列的数据冗余

  5. 5

    如何避免从数据库中检索重复的值?

  6. 6

    如何避免在数据库中创建“假” ID?

  7. 7

    如何构造数据库以避免表中重复

  8. 8

    如何避免从数据库中检索重复的值?

  9. 9

    如何使用JavaScript从数据库/模型中获取数据

  10. 10

    如何从linq数据库模型中获取数据

  11. 11

    避免Prolog中的数据冗余

  12. 12

    如何从此脚本中删除冗余数据库名称?

  13. 13

    如何从数据库中检索选择性对象?对象的冗余渲染

  14. 14

    如何从数据库中删除所有文件的空链接和所有冗余文件

  15. 15

    数据库如何处理冗余值?

  16. 16

    数据库架构中的外键太多(冗余?)

  17. 17

    如何避免视图模型的冗余属性

  18. 18

    如何从数据库模型中__repr__类型Unicode

  19. 19

    如何更改Rails中的ruby数据库模型?

  20. 20

    如何在Django中创建数据库模型?

  21. 21

    如何:Visio 2013中的数据库模型

  22. 22

    如何观察模型从 Firebase 数据库中的删除?

  23. 23

    如何从此数据库布局的1:M关系中删除冗余,并且仍然能够摘录所需的数据?

  24. 24

    Hibernate的创建数据库冗余列

  25. 25

    Laravel在模型中定义数据库

  26. 26

    当不同的函数需要数据库调用中的数据时,如何避免全局变量。(JS)

  27. 27

    向数据库中插入数据时如何避免重复

  28. 28

    使用asp.net在数据库中插入数据时如何避免重复值?

  29. 29

    如何将表单模型中的数据获取到 Django 中的数据库中

热门标签

归档