我应该如何设计我的SQL表?
我目前正在构建一个桌面应用程序,如下所示:用户创建一个项目,并添加问题/答案(每个问题只有一个非空答案)。每个项目可以有无限数量的问题/答案,每个问题/答案可以链接到无限数量的项目 我创建了两个项目表和问题表,但我不知道如何将两者联系起来。我本想将项目ID添加到每个问题中,但是问题只能链接到一个项目 例如:我应该如何设计我的SQL表?,sql,database,Sql,Database,我目前正在构建一个桌面应用程序,如下所示:用户创建一个项目,并添加问题/答案(每个问题只有一个非空答案)。每个项目可以有无限数量的问题/答案,每个问题/答案可以链接到无限数量的项目 我创建了两个项目表和问题表,但我不知道如何将两者联系起来。我本想将项目ID添加到每个问题中,但是问题只能链接到一个项目 例如: Project name: Geography Project name: History Question: When did the WW1 end? Answer: 1918 Li
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)中有两条记录作为将两个项目连接到同一个问题的一种方式。我不知道多对多的概念。通过快速的研究,我找到了它的意思,它完成了奥莫兹给出的答案。谢谢很高兴我能帮忙;学习数据库关系时可能会有点棘手,但一旦开始实现它们,它们就会变得更加清晰。