问答数据库设计

gem*_*der 4 normalization database-design

我正在建立一个网站,将托管各种调查问卷。每个问卷都有不同数量的问题,每个问题都有不同数量的答案。我曾尝试设计一个数据库来保存每个问卷的问题和可能的答案,但最终每个问题都有单独的表格。这是正确的还是我在某个地方出错了?

例如

Table for question x

  Answer  | Answer ID
       1         019
       2         089
Run Code Online (Sandbox Code Playgroud)

我无法为所有问题提供固定大小的表格,因为我没有最大数量的答案。这显然意味着我可能会得到数百张桌子,每个问题一张桌子。

Wor*_*DBA 5

我们的工作场所有一个应用程序可以做类似的事情。它的工作原理是有一个包含所有可能问题列表的表格,例如:

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)

这将为您提供最大的灵活性,让您无需频繁更改数据库设计即可添加新问题和答案。如果您需要对问题/答案进行版本控制,它可能会变得有点复杂,但这应该可以为您提供一个良好的工作立足点。

我希望这可以帮助你。