我应该如何设计我的SQL表?

时间:2015-06-24 19:33:17

标签: sql database

我目前正在构建一个类似这样的桌面应用程序:用户创建项目,并添加问题/答案(每个问题只有一个非空答案)。每个项目都可以有无限量的问题/答案,每个问题/答案都可以链接到无限量的项目。

我创建了两个项目和问题表,但我不知道如何将它们联系起来。我想过为每个问题添加项目ID,但问题只能链接到一个项目。

enter image description here

示例:

Project name: Geography
Project name: History

Question: When did the WW1 end?
Answer: 1918
Linked to: Geography, History, ...

这个问题可以包含在两个项目中,两个项目都可能有更多问题。

感谢。

2 个答案:

答案 0 :(得分:3)

您应该创建一个表来链接项目和QAs:

 Create table Projects_QAs(ProjectID int not null,QuestionID int not null,
 primary key(ProjectID,QuestionID)
 )

您还可以创建foreign keys以将QuestionIDProjectID关联到相关表格的ID

此外,您可以在(IndexQuestionID)上添加ProjectID以便更快地进行查询。

答案 1 :(得分:0)

这是一个非常普遍的问题,所以我有一个很普遍的答案。

有三种类型的数据库关系: -One到一 -One一对多 -many一对多

您目前只考虑一对一的关系,其中项目中的唯一ID链接到问题中的一个特定唯一ID

你应该考虑一对多或多对多的模式。

编辑:像Ormoz所说,可以使用第三个表来实现这种多对多模型,其中新表的每个条目代表一个问题/项目组合,作为项目和问题之间的链接的方式。

如果我们的general_question(question_id = 1)适合项目project_1(project_id = 1)和project_2(project_id = 2),那么我们希望新表p1_q1中有2条记录(project_id = 1且question_id = 1 )和p2_q1(使用project_id = 2和question_id = 1)作为将两个项目链接到同一个问题的方法。