这可能是一个基本的(愚蠢的)问题,但是当在数据库中具有一对一关系时,另一个表具有外键ID(在此示例中)。在一对多关系中,表包含许多外键。
但数据库不知道这是一对一还是一对多关系对吗?我在ER-Diagram中建立的关系只是为了表明在制作实际表时它应该是外键的位置?
我并没有完全掌握关系的想法,尽管我已经阅读了很多关于此的教程。
提前致谢。
答案 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)
现在将第三个表“城市”和您的一个信息点添加到您居住的城市 - 这是一对多的示例(可以使用一个城市,并且应该用于许多人)。
一对多/一对一只展示您的表格如何互动。在所有的时间里,你想要“保存”表中的行/列而不是复制它们,你将使用与另一个表的一对多关系。或多对多:)
答案 5 :(得分:1)
同样通过示例,产品只有一个产品代码,因此它是一对一的关系(产品< - > ABC123 ),但客户可以购买多个产品,所以这是一对多的关系( person< - >>>>>>> )。
答案 6 :(得分:0)
假设您有一个包含两个属性A和B的表。如果A是候选键而B不是,那么A和B之间的关系是1到多。如果A和B都是候选键,那么关系是1比1.
答案 7 :(得分:0)
如果是表A和B,那么
最好的方法是使B的主键也是引用A的外键。这也称为“每类型继承表”和“是一个”关系。还有其他方法可以强制使用唯一的外键,但使用主键可以在架构和ER图中清楚地显示关系。
当然,总有其他情况,如果您的设计不符合上述两个标准,则必须采用其他方法。