2011-09-22 167 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中寫了一篇非常透徹的分析。