0

我正在设计一个有几个表的数据库;常见问题解答、公告和附件。公告和常见问题解答可能有一个与之关联的附件,所以我最初的想法是创建一个连接表,其中两个主键作为复合键:

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

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

加入表:

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

当我设计这个时,我还想,如果稍后引入其他需要附件的实体(比如 Newsletter、Email 等)怎么办。我必须为这些实体中的每一个创建一个连接表。不可怕,但它让我想,如果我摆脱连接表并将 AttachmentType 放入 Attachment 表中,然后相应地分配类型:

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

该表中的数据为:
1-公告
2-常见问题
3-新闻通讯
4-电子邮件

然后 Attachment 表将保存 AttachmentTypeID 来识别它:

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

所以我的问题是,出于性能方面的考虑(使用 SQL 2008 R2),两者之间有更好的选择吗?有没有更好的方法来设计这个?我对使用单独的连接表的担忧是,我们可能会有更多的实体出现并容纳附件,我们必须创建一个连接表,并且在我们的前端软件上,我们必须为其编写逻辑,而 AttachmentTypeID 将允许前端插入一个新的 AttachmentType 并且不需要数据库交互。

4

2 回答 2

0

您的第二个解决方案无法将附件链接到项目,只是它是什么类型的项目。

即使这样做(即:itemID),您将创建的内容将违反第 4 范式 - 即:多值依赖项。

坚持您的第一个计划,但请考虑公告是否与您的应用程序中的时事通讯、电子邮件、常见问题解答等存在根本不同。如果您确实需要一个新表用于 Newsletter,请为 NewsletterAttachments 添加一个新表。

还要考虑一下,您是否要在不同项目或项目类型之间共享附件?

于 2012-10-17T14:33:25.987 回答
0

我完全同意podiluska。您需要为每种类型的附件创建单独的表格,否则您无法将 itemid 与附件映射,并且您将面临为不同类型的附件加入表格的问题。此外,如果您为每种类型的附件制作单独的表格,那么性能会更快。

于 2012-10-26T18:31:20.170 回答