我正在设计一个包含几个表的数据库;常见问题解答,公告和附件。公告和常见问题解答可能有一个与它们相关联的附件,因此我最初的想法是创建一个连接表,其中两个主键作为复合键:
Bulletin
--------
BulletinID
Subject
Description
Notes
Attachment
-----------
AttachmentID
FileName
FilePath
etc.
加入表格:
BulletinAttachments
-------------------
BulletinID
AttachmentID
正如我设计的那样,我也想过,如果以后引入了其他实体(比如通讯,电子邮件等),还需要附件。我必须为每个实体创建一个连接表。不是很糟糕,但它让我思考,如果我摆脱了连接表并在Attachment表中放置了AttachmentType然后相应地分配了类型该怎么办:
AttachmentType
--------------
AttachmentTypeID
AttachmentType
Description
该表中的数据为:
1,公告
2-FAQ
3月刊
4-电子邮件
然后Attachment表将保存AttachmentTypeID以识别它:
Attachments
-----------
AttachmentID
AttachmentTypeID
FileName
FilePath
etc.
所以我的问题是,为了性能明智(使用SQL 2008 R2),两者之间有更好的选择吗?有没有更好的方法来设计它?我对使用单个连接表的关注是我们可能有更多的实体出现并容纳附件,我们必须创建一个连接表,在我们的前端软件上,我们必须为它编写逻辑,而AttachmentTypeID将允许前端插入一个新的AttachmentType,不需要数据库交互。
答案 0 :(得分:0)
您的第二个解决方案没有办法将附件链接到项目,只是它是什么类型的项目。
即使它确实(即:itemID),你创建的内容也会违反第4范式 - 即:多值依赖。
坚持您的第一个计划,但请考虑Bulletins是否与您的应用程序中的简报,电子邮件,常见问题解答等有根本的不同。如果确实需要新表的简报,请为NewsletterAttachments添加新表。
还要考虑,您要分享不同商品或商品类型之间的附件吗?
答案 1 :(得分:0)
我完全同意podiluska。您需要为每种类型的附件创建单独的表,否则您无法将itemid与附件映射,并且您将面临为不同类型的附件连接表的问题。此外,如果您为每种类型的附件制作单独的表格,那么性能会更快。