2011-09-22 224 views
1

为什么很多人都指的是一对一,当我确定他们指的是多对一?一对一映射混淆

例如,如果你有两个表;

Inventory (InventoryID)  
Item (ItemID, InventoryFK) 

据我所知,这里没有一对一的映射。这是“多个项目到一个清单”。

现在,我们假设每个库存只有一个项目。在这种情况下,我的同事们会开始称它为“一对一”。我是否正确指出它是仍然是多对一的关系?当我试图向他们解释这一点时,他们似乎并不理解。

我认为适当的一个一对一的映射是这样的:

Person (Column: PersonID, Name) 
PersonAddress (Column: PersonID, StreetName, StreetNumber) 

在这里你有两个表,共享完全相同的PK。

假设我的假设是正确的,为什么这么多人滥用术语“一对一”?

+0

我不知道有人滥用这个词。顺便说一下,Person to Address也可能是一对多的关系。在极少数情况下,人们可能有多个地址。 –

+1

实际上,要解决的人甚至可能是多对一的,甚至多到很多,因为任何与十二个其他令人厌恶的slo shared共享挖掘的学生都可以证明:-)如果您在'InventoryFK'中添加了一个唯一的约束条件,那么您会认为:-) – paxdiablo

+1

有一对一的关系......只是因为有一个外键,它并不意味着你有一对多的关系。对我来说,你将“数据模型”(你的元素是如何相互关联的)与“数据库模型”(数据库的实现)混合起来 – pleasedontbelong

回答

4

一对多和一对一的关系是以稍微不同的方式实现的。

一一对多

对象(对象ID)ObjectCharacteristics(charId,OBJECTID)

一对一的

表中的顺序并不重要:

夫(丈夫Id)妻子(妻子Id,丈夫Id)+对丈夫的唯一约束Id

NB一对多关系在订单方式中也是一对一的关系。 ObjectCharacteristics只有一个对象。

但是你是对的关系是一个概念,它不依赖于数据库中的特定数据,而仅仅依赖于它的结构。

+1

每个ObjectCharacteristics都只有一个Object,每个Object最多有一个ObjectCharacteristics,因此这种关系不是一对一的关系,而是一对零或一对一的关系。 – onedaywhen

+0

“表格的顺序并不重要”是一个错误陈述:请参阅上面的评论,说明为什么方向很重要。 – onedaywhen

1

我同意这些条款被滥用。但我们谁是无罪的?在不知道约束条件的情况下,你认为是一对一关系的例子可能是一对一或一对一的关系(提示:外键的存在并不意味着存在实际引用值)。

Chris Date在他的论文All for One, One for All中写了一篇非常透彻的分析。