2013-01-21 32 views
0

我正在尋找一種將「上載附件」功能實施到系統的方法。這些附件可以應用於兩個方面,調查答案和員工行爲。我想要一個鏈接表,因爲我想要一種實現附件存儲庫的方式,以便它們可以應用到Answers和Actions,而不必再次上傳相同的文檔。在系統>枚舉(1回答是否和2如果動作)帶有3個表的鏈接表 - 架構設計

INT-AppliesToId - -

INT - 附件ID

INT - AppliesTo>的編號:難道我只需創建一個鏈接表等的行動或答案

這是一個糟糕的設計?我有一種感覺,我正在以這種錯誤的方式去做。

這是我的第一篇文章,如此appologics,如果它不達標!

非常感謝,

克里斯

回答

0

這不會是從設計的角度不合適,但GUID的被用來作爲你的主鍵,你可以很可能有所下降的AppliesTo領域,如GUID的保證是獨特。

下面是一個例子,將查找所有附件一規定的調查回答:

SELECT 
    AttachmentId 
FROM 
    Attachments 
WHERE 
    AppliesToId = @SurveyAnswerId 
+0

Woops,知道我會做一個錯誤我實際上使用我的ID的整數。我已經更新了這個問題,並對此表示道歉。 – CoopDog

+0

您可能需要考慮切換到此應用程序的GUID,因爲您可以從唯一性中獲得一些好處。有關更多信息,請參閱http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus-guids.html。 –

0

這不是一個糟糕的設計,但你可能會發現這樣的設計更加有用:

Attachment 
AttachmentId (pkey) 

Answer 
AnswerId (pkey) 
AttachmentId (fkey) 

Action 
ActionId (pkey) 
AttachmentId (fkey) 

這允許您擁有沒有動作的附件,沒有將數據值設置爲NULL,並且siple連接顯示相同附件的所有動作和答案,而不是條件連接

(僞)

select * from Attachment 
outer join Answer on Answer.AttachmentId = Attachment.AttachmentId 
outer join Action on Action.AttachmentId = Attachment.AttachmentId 

如果動作/答案都可以具有與其相關的多個附件,那麼你會修改這包括交叉聯接:

Attachment 
AttachmentId (pkey) 

Answer 
AnswerId (pkey) 

Action 
ActionId (pkey) 

AttachmentAnswer 
AttachmentAnswerId (pkey) 
AttachmentId (fkey) 
AnswerId (fkey) 

AttachmentAction 
AttachmentActionId (pkey) 
AttachmentId (fkey) 
ActionId (fkey) 
+0

感謝您的回覆,但我不明白底部解決方案的必要性。 AnserId和AttachmentId是否足以允許多個附件? – CoopDog

+0

只有在需要與動作以及答案保持多對多關係時,才需要使用AttachmentAction交叉表。你可能不會...... – EtherDragon