gem*_*der 4 normalization database-design
我正在建立一个网站,将托管各种调查问卷。每个问卷都有不同数量的问题,每个问题都有不同数量的答案。我曾尝试设计一个数据库来保存每个问卷的问题和可能的答案,但最终每个问题都有单独的表格。这是正确的还是我在某个地方出错了?
例如
Table for question x
Answer | Answer ID
1 019
2 089
Run Code Online (Sandbox Code Playgroud)
我无法为所有问题提供固定大小的表格,因为我没有最大数量的答案。这显然意味着我可能会得到数百张桌子,每个问题一张桌子。
我们的工作场所有一个应用程序可以做类似的事情。它的工作原理是有一个包含所有可能问题列表的表格,例如:
CREATE TABLE QUESTIONS
(
ID INT NOT NULL PRIMARY KEY,
SUMMARY NVARCHAR(64) NOT NULL UNIQUE,
DESCRIPTION NVARCHAR(255) NULL
);
Run Code Online (Sandbox Code Playgroud)
然后您有一个 ANSWERS 和一个 QUESTIONAIRES 表,使用上述相同的结构定义。有了这两个表后,您就可以定义一个表来保存问题/答案可能性列表:
CREATE TABLE QUESTION_ANSWERS
(
ID INT NOT NULL PRIMARY KEY,
QUESTION INT NOT NULL REFERENCES QUESTIONS(ID),
ANSWER INT NOT NULL REFERENCES ANSWERS(ID)
);
Run Code Online (Sandbox Code Playgroud)
一旦你有了这些,你就可以创建一个表来包含这样的响应:
CREATE TABLE RESPONSES
(
QUESTIONAIRE INT NOT NULL REFERENCES QUESTIONAIRES(ID),
RESPONSE INT NOT NULL REFERENCES QUESTION_ANSWERS(ID)
);
Run Code Online (Sandbox Code Playgroud)
这将为您提供最大的灵活性,让您无需频繁更改数据库设计即可添加新问题和答案。如果您需要对问题/答案进行版本控制,它可能会变得有点复杂,但这应该可以为您提供一个良好的工作立足点。
我希望这可以帮助你。