2011-11-10 197 views
1

我正在建模一個關係數據庫,其中以下模式用於描述兩個表:ERD ModelMySQL外鍵依賴關係解析

指定的規則是:

  1. 的辦公室有一個經理
  2. 每名工作人員被分配到一個辦公室

爲了模擬這種我用ERD MySQL工作臺創建,其中提供了以下DDL

我的問題是,爲了強制辦公室必須有一個經理,辦公室表中的外鍵不可空。同樣,員工表中代表他們工作的辦公室的外鍵對於每個員工都是必需的,因此而不是可以爲空。這在模型中對我來說很有意義,但是對於實現來說,它使得不可能插入數據,因爲每個數據都依賴於表中元組的存在。

我能想到的唯一答案是使鍵可以爲空,以便一個人可以暫時存在而沒有另一個。

這是解決問題的正確方法嗎?數據庫最終將被歸一化爲3NF或BCNF。

回答

1

問題是你試圖記錄兩次辦公室和員工之間的關係。一旦進入辦公室記錄並再次進入員工記錄。你應該只記錄一個地方的關係。通常這是在具有兩列的交叉引用表中完成的:Office_ID和Staff_ID。但是,跳過第三個表並僅記錄其中一個表中的關係也很常見。

在這種情況下,您可以通過從Staff表中刪除Office字段和外鍵來消除您的問題。您可以根據需要創建儘可能多的員工記錄。然後,當您創建一個辦公室記錄時,您將可以將其中一個員工分配給該辦公室。

+0

感謝您的回覆。我確實考慮過這個。因此,如果我使用複合主鍵(Staff_ID + Office_Id)創建中間表,那麼我將如何將一位經理分配到辦公室。我可以將管理器外鍵保留在辦公室表格中,但讓它在交叉引用表中引用一行嗎?再次感謝 –

+0

如果您使用中間表,您將從Office中刪除「管理器」字段,並將中間表的外鍵添加到「職員」和「辦公室」。如果您在中間表中使用複合主鍵,則您可以在每個辦公室插入多個管理員。您可以使用Office_Id作爲唯一的主鍵,以便每個Office在中間表中只有一條記錄。雖然如果你這樣做,那麼你根本不需要中間表,並且可以使用Office表中的管理員字段,因爲辦公室到管理員是1:1。 –