一对一映射混淆
为什么很多人都指的是一对一,当我确定他们指的是多对一?一对一映射混淆
例如,如果你有两个表;
Inventory (InventoryID)
Item (ItemID, InventoryFK)
据我所知,这里没有一对一的映射。这是“多个项目到一个清单”。
现在,我们假设每个库存只有一个项目。在这种情况下,我的同事们会开始称它为“一对一”。我是否正确指出它是仍然是多对一的关系?当我试图向他们解释这一点时,他们似乎并不理解。
我认为适当的一个一对一的映射是这样的:
Person (Column: PersonID, Name)
PersonAddress (Column: PersonID, StreetName, StreetNumber)
在这里你有两个表,共享完全相同的PK。
假设我的假设是正确的,为什么这么多人滥用术语“一对一”?
一对多和一对一的关系是以稍微不同的方式实现的。
一一对多
对象(对象ID)ObjectCharacteristics(charId,OBJECTID)
一对一的
表中的顺序并不重要:
夫(丈夫Id)妻子(妻子Id,丈夫Id)+对丈夫的唯一约束Id
NB一对多关系在订单方式中也是一对一的关系。 ObjectCharacteristics只有一个对象。
但是你是对的关系是一个概念,它不依赖于数据库中的特定数据,而仅仅依赖于它的结构。
每个ObjectCharacteristics都只有一个Object,每个Object最多有一个ObjectCharacteristics,因此这种关系不是一对一的关系,而是一对零或一对一的关系。 – onedaywhen
“表格的顺序并不重要”是一个错误陈述:请参阅上面的评论,说明为什么方向很重要。 – onedaywhen
我同意这些条款被滥用。但我们谁是无罪的?在不知道约束条件的情况下,你认为是一对一关系的例子可能是一对一或一对一的关系(提示:外键的存在并不意味着存在实际引用值)。
Chris Date在他的论文All for One, One for All中写了一篇非常透彻的分析。
我不知道有人滥用这个词。顺便说一下,Person to Address也可能是一对多的关系。在极少数情况下,人们可能有多个地址。 –
实际上,要解决的人甚至可能是多对一的,甚至多到很多,因为任何与十二个其他令人厌恶的slo shared共享挖掘的学生都可以证明:-)如果您在'InventoryFK'中添加了一个唯一的约束条件,那么您会认为:-) – paxdiablo
有一对一的关系......只是因为有一个外键,它并不意味着你有一对多的关系。对我来说,你将“数据模型”(你的元素是如何相互关联的)与“数据库模型”(数据库的实现)混合起来 – pleasedontbelong