数据库规范化 - 我应该将表链接到多远?

时间:2010-03-08 15:24:51

标签: database-design normalization database-normalization

我有三个表:帖子,附件和媒体。

帖子有附件,附件有媒体。

目前,Post和Attachment表是通过外键链接的,Attachment和Media表也是如此。我的问题是,为了正确的数据库设计和规范化,我应该在Post和Media之间建立外键关系吗?我不确定我应该把这些表连接起来有多深。

由于

6 个答案:

答案 0 :(得分:3)

为了正确的数据库设计和规范化,我应该在Post和Media之间设置外键关系吗?

对于“正常规范化”,您必须确保没有“更新异常”。

如果有人更新帖子,附件和媒体会怎样?重命名帖子会断开附件和/或媒体吗?如果是这样,那么你的FK是错误的。 [提示,你必须使用代理键而不是帖子的名称来使你的FK工作。]

如果有人想要将附件从一个帖子“移动”到另一个帖子[即更新附件的FK参考],媒体会怎么样?它是否与附件保持一致并转移到新帖子?

你可以结束发布附件和媒体,以及附件有媒体吗?邮件和附件是否可能不同意媒体,因为附件被“移动”但邮件还没有更新?

如果你可能有矛盾,你已经打破了第二范式并且你有重复的关键关系,你不应该重复。

正确的标准化很容易。

数据取决于关键因素而非关键。

不要在任何地方复制或重复依赖项。你所谓的“深层链接”似乎是依赖的重复。

答案 1 :(得分:2)

不,对于与3NF一样深的标准化而言,这是通常的标准化水平,结构是正常的。

对于记录标准化而言,它既有成本又有益处,特别是对于数据的插入和删除,以及对可以插入的精确方式和内容的主要控制水平。

一个标准化和非规范化,风险自负:)

答案 2 :(得分:1)

我认为你没事。

POST似乎可能有多个ATTACHMENT并且ATTACHMENT可能有几个POST,如果是这样,你需要一个第三范式的链接实体:

  Post

    |
    |
  -----
  | | |

Post_Attachment

  | | |
  -----
    | 
    |

Attachment

    |
    |
  -----
  | | |

  Media

但是根据你的描述,POST和MEDIA之间似乎没有关键关系。

答案 3 :(得分:1)

如果您需要过滤或选择特定帖子的媒体而不考虑附件,则从媒体添加FK的唯一原因是。即使您需要显示媒体(可能是按类型)及其所属的帖子,我也不会添加直接关联;添加第二个连接(通过附件表)的开销可能很小,因此您不太可能看到任何显着的改进。

答案 4 :(得分:0)

将表格链接到有意义的深度。报告和看到性能问题后,非规范化。

答案 5 :(得分:0)

首先,您不需要使用代理键。如果您愿意,适当的数据库将级联更新。规范化数据库时,通常会尝试实现第三范式或甚至BCNF。第二范式不会始终保护您的数据免受更新异常的影响。一旦生成ER图并确定哪些数据是实体(帖子,附件,媒体)的一部分以及哪些数据是关系的一部分,确定模式中的功能依赖性应该很简单。根据您的关系的基数,您可能需要也可能不需要联接表。最好的办法是在图表中建模数据,然后处理实施问题。