2012-07-24 153 views
0

我有一個數據庫設置(簡化)表用戶和表超級用戶的情況。兩者都有一個列ID。每個超級用戶行在用戶表中都有一個具有相同Id值的行(不是我的設計!!!)。 SUperUser表不會從用戶表中提取常用信息,它會複製它。單個外鍵可以指向多個主鍵嗎?

Can/should指向User.Id的任何外鍵是否也具有與SuperUser.Id的FK:PK關係?我認爲這是至少是一個非常糟糕的想法,許多(大多數?)數據庫無法強制執行這種關係/

我離開這裏嗎?

+0

您應該能夠創建一個額外的約束,將相同的字段連接到第二個表。但是,這似乎只是要求更多的麻煩。如果兩個表之間有1對1關係,通常是因爲其中一個表是可選的。用戶表總是在那裏,超級用戶有時在那裏。如果是這種情況,您的FK約束應該只基於用戶表而不是超級用戶表。超級用戶表應限制在用戶表中。 – GDF 2012-07-24 17:25:28

回答

2

基於我對你的問題的理解,你將遇到兩個主要問題,即設置到User和SuperUser表的外鍵。

  1. 您將無法進入或自外鍵預計,用戶ID存在於二者的更新與外鍵的設置一樣,除非用戶是兩個表中的表。

  2. 如果您通過級聯刪除設置了外鍵並從超級用戶中刪除記錄,那麼所有設置了這些表的記錄都將刪除與該用戶標識關聯的記錄,這些記錄可能會讓用戶只記錄用戶表中的記錄,所有其他信息丟失。

什麼會是一個更好的選擇是設置在超級用戶表中的用戶ID列在用戶表中的用戶ID列這樣你就不會遇到問題,其中一個用戶是不是在一個外鍵這兩個表或從超級用戶表中刪除用戶。

1

由於每個用戶在用戶表中都有一條記錄,我假設並非每個用戶都是超級用戶,所以我只會引用他們,並在需要時檢查他們是否是超級用戶。

如果可能,最好刪除重複的字段。隨着事情的發展,這很容易成爲惡夢。