数据库中一对一和一对多关系的区别

时间:2011-01-20 19:59:18

标签: database database-design

这可能是一个基本的(愚蠢的)问题,但是当在数据库中具有一对一关系时,另一个表具有外键ID(在此示例中)。在一对多关系中,表包含许多外键。

但数据库不知道这是一对一还是一对多关系对吗?我在ER-Diagram中建立的关系只是为了表明在制作实际表时它应该是外键的位置?

我并没有完全掌握关系的想法,尽管我已经阅读了很多关于此的教程。

提前致谢。

8 个答案:

答案 0 :(得分:17)

从某种意义上说,我们谈论的所有关系都不是已知数据库,它们是我们发明的结构,以便更好地理解如何设计表格。

在一对一和一对多之间的表结构方面的巨大差异在于,一对一可能(但不是必须)具有双向关系,这意味着表A可以具有表B中的外键,表B可以将外键放入表A中的相关记录中。对于一对多关系,这是不可能的。

一对一关系将一个表中的一个记录与另一个表中的一个记录相关联。一对多关系将一个表中的一个记录与另一个表中的多个记录相关联。

答案 1 :(得分:5)

要启用一对一关系,您需要为外键添加唯一约束。每个表都不可能有两个外键,因为无法创建记录。

答案 2 :(得分:3)

我无法理解实际问题是什么。

您的分析大部分是正确的,因为如果您有2个表,并且table2具有表1的外键,则它可以是一对一或多对一。

你的句子“并且在一对多的关系中,该表包含许多外键。”

'many'一侧的表仍然包含一个外键列,它只是多个行可以具有相同的外键值(许多行指向一个父键)。

另请注意,您可以将外键放在父表上,而不是相反。通过这种方式,如果您想这样做,可以防止一对多。另请注意,通过这种方式,多个父级可以共享一个孩子,这可能是您想要的,也可能不是。

答案 3 :(得分:2)

1:1与1:m的数据库级别等效项在外键列上具有唯一索引。请注意,这仅适用于1:1,而不是1:0..1,因为在评估唯一性时会考虑null。有这种限制的解决方法,但这是在基本级别。

答案 4 :(得分:1)

好吧,你是对的,这种关系对你很重要,但不适用于db本身。如果您有两个表,一个包含您的基本信息,另一个包含您的详细信息..对于这两个表,您就是这样,因此它是一对一的关系,您无法将数据映射到其他人。

现在将第三个表“城市”和您的一个信息点添加到您居住的城市 - 这是一对多的示例(可以使用一个城市,并且应该用于许多人)。

一对多/一对一只展示您的表格如何互动。在所有的时间里,你想要“保存”表中的行/列而不是复制它们,你将使用与另一个表的一对多关系。或多对多:)

答案 5 :(得分:1)

同样通过示例,产品只有一个产品代码,因此它是一对一的关系(产品< - > ABC123 ),但客户可以购买多个产品,所以这是一对多的关系( person< - >>>>>>> )。

答案 6 :(得分:0)

假设您有一个包含两个属性A和B的表。如果A是候选键而B不是,那么A和B之间的关系是1到多。如果A和B都是候选键,那么关系是1比1.

答案 7 :(得分:0)

如果是表A和B,那么

  1. A和B有严格的1对1关系
  2. 对于每个B实例,总会有一个A实例
  3. 最好的方法是使B的主键也是引用A的外键。这也称为“每类型继承表”和“是一个”关系。还有其他方法可以强制使用唯一的外键,但使用主键可以在架构和ER图中清楚地显示关系。

    当然,总有其他情况,如果您的设计不符合上述两个标准,则必须采用其他方法。

相关问题