2015-01-12 153 views
0

我有一個表 「位置」 至極媒體鏈接存在數據庫規範化:外鍵=主鍵?

  • PositionID(PK)INT
  • PositionText
  • ...

現在我要創建一個新表 「PositionComment」 (我不允許編輯表格位置,所以我必須創建一個新的表格)。 關係是1:0..1(通過代碼獲取,1個位置只能有1個註釋)。

,所以我需要在這個新表的主鍵 - 但是:

對於規範化的規則:

我必須使外鍵=主鍵,因爲它是1: 0..1 例如:

  • PositionID(PK,FK到位置表)
  • CommentText

OR

我一定要做出自己的主鍵 如:

  • CommentID(PK)
  • PositionID(FK到位置表)
  • CommentText

不同之處在於,在第一個建議中,我在第二個表中使用了不同的PK作爲PK ...但在第二個建議中,我有一個double Ident ifier,因爲CommentID和PositionID對於1行是唯一的...

如何對規則化進行此操作,爲什麼?

+8

就DBA而言,「通過代碼保證」等同於「完全不保證」:-)但是,如果您將它作爲新表的主鍵,則它是有保證的。通過DB。它應該在哪裏。 – paxdiablo

+0

我會去第二個選項。如果未來的關係發生變化以適應一對多的情況呢? – danish

回答

0

Please take a look at this

以前似乎有人問過類似的問題。

外鍵幾乎總是「Allow Duplicates」,這會使它們不適合作爲主鍵。

而是找到一個唯一標識表中每條記錄的字段,或者添加一個新字段(自動遞增整數或GUID)作爲主鍵。

唯一的例外是具有一對一關係的表格,其中鏈接表的外鍵和主鍵都是一樣的。

但你也應該考慮這個問題:

由兩個外鍵的複合主鍵也是實現許多一對多的關係完全正常。

3

你是絕對正確的,要實現1-1關係,你通常應該考慮將它們合併到同一個表中。如果你有充分的理由不這樣做,一個強制執行1-1關係的好方法是在引用表中使用外鍵作爲主鍵或備用鍵。