有人能帮我理解外键关系吗?

时间:2016-09-04 23:09:41

标签: database-design

我有四个实体,一个公司,一个问题清单,一个问题和一个答案

公司有一个QuestionList。 QuestionList有一个或多个问题。 一个问题有答案。

我的四个实体是公司,问题清单,问题,答案

公司拥有主键company_id。 QuestionList具有主键questionList_id。 现在我将company_id作为QuestionList中的外键引用,还是将公司中的questionList_id作为外键引用?

3 个答案:

答案 0 :(得分:0)

都不是。您创建与名为Company_QuestionList_Relation相关的表,该表仅包含两列,这两列是两个表的主键。 :)

答案 1 :(得分:0)

  

在关系数据库的上下文中,外键是一个字段(或   一个表中唯一标识一行的字段集合   另一张桌子。 - Wikipedia

外键是这样一个概念,即如果您将另一个表的主键存储到唯一标识行,则另一个表你的桌子,我们称这个字段为外键。

我快速为您提供的实体关系图简要解释了您的问题的解决方案:

enter image description here

如果要在字段中存储多个外键(我的意思是创建与另一个表的多行的表的元素/行的关系),则需要将外键存储为00001之类的数组, 00002,00003,...然后你需要解析并将该字段转换为程序中的实际数组类型,因为显然数组定义因语言而异。

答案 2 :(得分:0)

要表示Company和QuestionList之间的关联,您需要在同一个表中使用两列:company_id, questionlist_id。哪个表以及如何约束这些列取决于关系的基数和可选性。

如果公司只有一个QuestionList,这意味着QuestionList取决于公司,换句话说,公司确定QuestionList。为此,我们需要一个表格,其中company_id是一个键 - 要么是单独的表格,要么我们可以在公司表格中包含questionlist_id

如果一个QuestionList只有一个公司,那么公司依赖于QuestionList,QuestionList决定公司,我们想要一个以questionlist_id作为关键字的表 - 要么是一个单独的表,要么我们可以包含company_id在QuestionList表中。

依赖关系可以兼顾两种方式 - 每个公司都有一个独有的QuestionList。我们可以遵循上述任何方法,只要我们使非主要列唯一。

如果公司可以拥有多个问题列表,而问题列表可以属于多个公司,则单独的表格是唯一的选项。在这种情况下,company_id, questionlist_id的组合将成为关键。

您可以将此推理应用于任何二元关系。

请注意,我没有提及有关外键约束的任何内容。他们的诚信约束并没有与实施关系有任何关系。关系映射到表中的列集;大多数ERD软件和在线教程都是错误的。