2012-08-02 72 views
1

我正在創建一個涉及上傳的系統。現在這些上傳需要附加到某種方式,例如。一個消息,一個合同,一個項目與許多不同表格的關係

是否還好有一個表中的附件,然後將它們鏈接到這些類型的 - 需要提醒的是,它需要被連接到單獨的ID從這些類型的

例如。在安裝表
類型 - 鏈接到一個表消息合同等
ID的列表。 - 一個ID的ID什麼樣的ID類型,所以如果類型是消息那麼它將引用message.id,如果它是一個合同,它將引用contract.id

但是那麼沒有外鍵檢查?但是,必須做外鍵例如似乎很奇怪。

type 
message_id (FK) 
contract_id (FK) 
project_id (FK) 

編輯:有幾個表超過3個像5-6或許更在未來的太..

回答

0

我會建議:

  1. 一種附裝表(attachment_id +其他需要爲您的附件)
  2. 對於每個可能的類型(消息,合同,項目)的列,你將有一個關係表。

例子:

  • MessageAttachmentTable:MESSAGE_ID(FK),attachment_id(FK)
  • ContractAttachmentTable:contract_id(FK),attachment_id(FK)

這樣一來,就可以擁有所有數據庫完整性約束,沒有未使用的列。與外鍵的相應表

+0

這似乎是不必要的複雜的東西 – Andreas 2012-08-02 05:24:16

0

三個可爲空領域在我看來是最明智的做法。

此外,如果你有三家外資重點領域,你甚至不必存儲「型」,因爲它是由這不是空的外鍵字段確定。

+0

感謝您的答覆 - 我沒有提到可能有幾個列3只是一個例子,我做了這樣的解決方案,但在想,我不認爲它會擴展以及作爲LMC的 – Keiiz 2012-08-02 06:33:08

+0

這種改進從何而來?您將擁有一個包含兩列的表格來創建鏈接,而不是現有表格中的一列。此外,如果您有100個附件,則將有200行,附件表中有100行,另有100行遍佈鏈接表(而不是附件表中的100行)。 – Andreas 2012-08-02 09:03:59

+0

安德烈亞斯你好,感謝您的答覆 - 我仍然很新的MySQL的 - 如果我有200行該表..我怎麼找非空FK沒有一個荒謬的選擇? – Keiiz 2012-08-02 13:23:05