2014-01-06 50 views
1

我遇到了將多個外鍵拉入Microsoft Access表中的一個記錄的問題。Microsoft Access 2013 - 多個外鍵在同一記錄中

我有兩個表具有以下字段:

表1: 業主 領域: 所有者ID(主鍵) 名 姓

表2: 船舶 場: 船名ID(主鍵) 船名

我需要創建表1和表2之間的關係顯示誰擁有該船。我已經嘗試在表2中添加一個名爲Owner ID(外鍵)的數字字段,並且這種工作非常好。

工作實例:

Table 1 – Owners     Table 2 – Ships 
Owner ID (Primary Key)__   Ship ID (Primary Key) 
First Name    \   Ship Name 
Last Name    \________Owner ID (Foreign Key) 

不幸的是我的船在表2中可以同時擁有多個業主(最多5個)。我的問題出現了,當我嘗試在表中創建了一系列的連接字段的2

不工作:

Table 1 – Owners      Table 2 – Ships 
Owner ID (Primary Key)__    Ship ID (Primary Key) 
First Name    \   Ship Name 
Last Name    \   Owner1 ID (Foreign Key) 
          \______/ Owner2 ID (Foreign Key) 
           \ Owner3 ID (Foreign Key) 

任何人都可以提出任何解決方法,所以我可以顯示從業主表中的船舶採取多業主表?

感謝您的幫助!

+0

什麼是不工作的?如果你添加五個字段,併爲_eparately_(!)_each_定義一個關係,它應該可以正常工作。你的圖給我的感覺是你試圖創建1個關係,實際上你想創建其中的5個/ – oerkelens

+1

嘗試一下後,它可以很容易地工作,但你只需要確保你不要編輯現有的關係(Access問我是否想要)。相反,它會將table_1的副本添加到關係圖中,並將關係添加到關係圖中。混淆和imho不必要,但它的作品:) – oerkelens

回答

0

問題是,它看起來像Access不允許可空FK的,所以所有的所有者字段將不得不填充,無論有多少所有者。

我能想到的唯一解決方案是引入一個ShipOwner表,它具有ShipID和OwnerID列(作爲FK到Ship和Owner表)。然後,您可以擁有儘可能多的所有者。

Pros: You can add things like %Owned if that matters 
Cons: The software has to enforce the limit of 5 owners 

最大的臨:它會工作!

乾杯 -

編輯:第一對是錯:Access不會讓你添加可空FK的。不過,我仍然認爲這裏的建議是一個很好的建議。重複組(所有者1到5)違反規範化規則,並且此建議被規範化。

+1

從什麼時候Access不允許空字段,是他們的外鍵或不?我希望看到一個:) – oerkelens

+0

它的確如此,但這些是我認爲長號碼,並且它不會讓我在嘗試(Access 2013)時將它們設置爲空。 –

+0

好吧,我錯了。我再次檢查,確實如此。回答修訂 –

1

您的數據庫設計絕對不正確。

在您解釋的情況下,船舶與船東之間有多對多的關係,必須將其轉換爲關係模型中的「關係表」。
在這種情況下:具有2個字段的[擁有權]表,即相關表的2個主鍵(PK)。

換句話說,你需要3個表:

  • 船舶(ShipId,貨主,無論)PK是ShipId
  • 所有者(OWNERID,名字,姓氏)PK是OWNERID
  • 所有權(ShipId ,OWNERID)PK由2個FKS
+0

如果能夠超過那5個業主,那麼你是對的。但是這並沒有回答OP的問題:)當我想在表中包含Customer ShipFrom和CustomerShipTo時,會出現同樣的問題,這兩個問題都涉及到我的客戶。 – oerkelens

+0

@ oerkelens:使用正確的設計,問題*將不存在*。我保持我的觀點。對5個所有者的限制是一個約束,並不構成適當的第3或第4個NF的豁免 –