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

我应该如何设计我的SQL表?,sql,database,Sql,Database,我目前正在构建一个桌面应用程序,如下所示:用户创建一个项目,并添加问题/答案(每个问题只有一个非空答案)。每个项目可以有无限数量的问题/答案,每个问题/答案可以链接到无限数量的项目 我创建了两个项目表和问题表,但我不知道如何将两者联系起来。我本想将项目ID添加到每个问题中,但是问题只能链接到一个项目 例如: Project name: Geography Project name: History Question: When did the WW1 end? Answer: 1918 Li

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

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

例如:

Project name: Geography
Project name: History

Question: When did the WW1 end?
Answer: 1918
Linked to: Geography, History, ...
这个问题可以包含在两个项目中,两个项目都可能有更多的问题


谢谢。

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

 Create table Projects_QAs(ProjectID int not null,QuestionID int not null,
 primary key(ProjectID,QuestionID)
 )
您还可以创建
外键
,将
问题ID
项目ID
链接到相关表格的
ID
s


此外,您可以在(
QuestionID
ProjectID
)上添加
索引,以加快查询速度。

这是一个非常一般的问题,因此我有一个非常一般的答案

有3种类型的数据库关系: -一对一 -一对多 -多对多

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

你应该在一对多或多对多模型中思考

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


如果我们有一个通用的_问题(问题_id=1),它同时适用于项目_1(项目_id=1)和项目_2(项目_id=2),那么我们希望在新表p1_q1(项目_id=1和问题_id=1)和p2_q1(项目_id=2和问题_id=1)中有两条记录作为将两个项目连接到同一个问题的一种方式。

我不知道多对多的概念。通过快速的研究,我找到了它的意思,它完成了奥莫兹给出的答案。谢谢很高兴我能帮忙;学习数据库关系时可能会有点棘手,但一旦开始实现它们,它们就会变得更加清晰。