2010-05-14 31 views
3

對於那些生活和呼吸數據庫設計的人來說,你有沒有找到一個令人信服的理由在一個表中指向同一個父表的多個FK?多個FK列都指向同一父表 - 一個好主意?

我們最近不得不處理一個情況,那就是我們有一個表格,其中包含六列,這些列都是FK列到同一父表。我們正在辯論這是否表明我們的設計不好,或者這是否比我們想象的更普遍。

非常感謝。

回答

6

這取決於很多情況。通常有時候你需要這樣做,其他時候,需要重新設計。想到的第一個好用法是一個網站的消息系統,其中user_touser_from字段都將指向users表中的user_id。但是,我認爲需要重新設計一些東西,但不知道具體情況,這是不可能說的。

+0

+1,我的想法也是如此。本身有多個字段FKing到同一個表。事實上,你有六個,但讓我覺得有可能有​​一些空間添加另一個表,它更適當地管理至少一個邏輯關係,並允許您刪除一些FK字段,這些字段實際上只是多個實例(可能有一個額外的片段需要的信息,如序列號) – heisenberg 2010-05-14 19:09:54

1

我們偶爾會在PK的人表中使用它,我們需要在同一個表中存儲兩個不同類別的人的詳細信息。如果這六列是合法的不同信息(並且不太可能擴展到七列以後),那麼可能是好的,但是超過兩列,我會查看相關表格是否真的需要。

4

這真的不能在真空中分析(即沒有看到要求)。主要是要弄清楚這6個數據是否相互關聯。

列集如:Item1,Item2,Item3顯然會做錯誤的(使用聯結表),但如果每列的含義是彼此不相關的,那麼它很好,即使它看起來像有點奇怪。

0

我無法想象爲什麼你需要6個字段指向相同的父記錄......聽起來像你想象的那樣瘋狂。你說'我們的設計糟糕',貴公司是否以這種方式設計桌子?

+0

不是同一個父記錄......我相信它們意味着列會在同一個父表中引用不同的記錄。 – 2010-05-14 19:14:03

0

我有兩個表之間的多個FK的一些例子。

無論是在你的情況正確與否,我們可能不能沒有更多的信息說可能

一個例子,你經常看到:

比方說,我有東西與關鍵stuffID的表。我可能有一個包含stuffID1,stuffID2的子表來捕獲對。或3個FK色譜柱的三聯體。

3

那麼,有可能是IMO表樣柱:

所有者,CreatedBy,LastModifiedBy,AcceptedBy,ProposedBy,它可以指向一個用戶表

+1

+1我的想法確切。這種情況很常見。這裏沒問題。 – leonbloy 2010-05-14 19:26:13

0

擁有一個網上商店的數據庫,應該有一個包含地址的表格和包含訂單的表格 - 現在按順序,地址表格中包含兩個fk,一個包含發貨,另一個包含賬單地址密鑰。

0

表人員{personID otherpersonattributes ...} Table InterPersonRelationships {personID1 personID2 relationshipstype}

在這種情況下,有兩個不同的FK對同一父表是非常自然的。

相關問題