2012-10-17 22 views
0

我正在設計一個包含幾個表的數據庫;常見問題解答,公告和附件。公告和常見問題可以與他們有關聯的附件,所以我最初的想法是創建一個連接表具有兩個主鍵的組合鍵:與主表中的連接表或單獨標識的表設計

Bulletin 
-------- 
BulletinID 
Subject 
Description 
Notes 

Attachment 
----------- 
AttachmentID 
FileName 
FilePath 
etc. 

加入表:

BulletinAttachments 
------------------- 
BulletinID 
AttachmentID 

正如我設計這個,我也想過,如果其他實體稍後介紹(比如新聞簡報,電子郵件等),還需要附件。我將不得不爲每個這些實體創建一個連接表。不可怕,但它讓我覺得,如果我擺脫了連接表的東西,把一個AttachmentType在附件表中,然後分配相應類型:

AttachmentType 
-------------- 
AttachmentTypeID 
AttachmentType 
Description 

該表中的數據是:
1,公告
2-FAQ
3月刊
4電子郵件

然後附件表將持有AttachmentTypeID識別它:

Attachments 
----------- 
AttachmentID 
AttachmentTypeID 
FileName 
FilePath 
etc. 

所以我的問題是,爲了性能(使用SQL 2008 R2),兩者之間有更好的選擇嗎?有沒有更好的方法來設計這個?我對使用單個連接表的擔心是,我們可能會有更多的實體出現,爲了適應附件,我們必須創建一個連接表,並且在我們的前端軟件中,我們必須爲其編寫邏輯,而AttachmentTypeID將允許需要插入新的AttachmentType並且不需要數據庫交互的前端。

回答

0

您的第二個解決方案沒有辦法將附件鏈接到該項目,它是什麼類型的項目。

即使它做了(即:一個itemID),你會創建什麼將違反第四範式 - 即:多值依賴。

堅持您的第一個計劃,但要考慮公告是否與您的應用程序中的通訊,電子郵件,常見問題等根本不同。如果您確實需要新聞快訊的新表格,請爲NewsletterAttachments添加一個新表格。

另外考慮,你打算分享不同項目或項目類型之間的附件?

+0

謝謝Posiluska,我甚至沒有看到第二個選擇,他們沒有任何聯繫(知道什麼是不對的,這就是爲什麼我張貼我的想法在第一個地方)。另外,你是正確的;附件可以在不同的項目之間共享。 – Robert

0

我完全同意podiluska。您需要爲每種附件創建單獨的表格,否則您無法將itemid與附件進行映射,並且您將面臨爲不同類型的附件連接表格的問題。此外,如果您爲每種附件製作單獨的表格,則性能會更快。