我正在寻找一种优化我的数据库模型的解决方案。数据库管理调查,您可以添加问题并回答它们。条目是对调查的答案,并且对每个问题都有答案。
这是简化的架构:
有没有办法避免冗余而不删除条目表?
请记住,我的模型包含更多表以提供更复杂的问题类型。目前,我无法提供完整的架构。
您有一种感觉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
在其外键引用,因为这个领域是双方的主键的一部分QUESTIONS
和ENTRIES
:
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] 删除。
我来说两句