代码之家  ›  专栏  ›  技术社区  ›  Steven Mercatante Dimitri Kopriwa

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

  •  0
  • Steven Mercatante Dimitri Kopriwa  · 技术社区  · 15 年前

    我有三张桌子:邮寄、附件和媒体。

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

    目前,post和attachment表是通过外键链接的,attachment和media表也是如此。我的问题是,为了正确的数据库设计和规范化,我应该在post和media之间建立一个外键关系吗?我不确定我应该把这些桌子连接在多深的地方。

    谢谢

    6 回复  |  直到 15 年前
        1
  •  3
  •   S.Lott    15 年前

    为了正确的数据库设计和规范化,我应该在post和media之间建立一个外键关系吗?

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

    如果有人更新了帖子,附件和媒体会发生什么变化?重命名post会断开附件和/或媒体的连接吗?如果是这样,那么你的FK是错的。[提示,您必须使用代理项密钥而不是帖子的名称才能使FK正常工作。]

    如果有人想将附件从一个帖子“移动”到另一个帖子(即更新附件的FK引用),那么媒体会发生什么情况?是否保留附件并移到新岗位?

    你能在文章中加入附件和媒体吗,以及附件中加入媒体吗?文章和附件是否会因为附件被“移动”而不更新而对媒体产生分歧?

    如果你有矛盾,你已经打破了第二个正常形式,你已经重复了关键的关系,你不应该重复。

    适当的标准化很容易。

    数据取决于密钥,而只取决于密钥。

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

        2
  •  2
  •   Jorge Córdoba    15 年前

    不,对于正常化来说 3NF 关心你,这是通常的规范化级别,结构是可以的。

    对于记录规范化来说,它既有成本,也有好处,特别是在数据插入和删除时,主要控制的是插入的方式和内容。

    一个标准化和非标准化的风险由他自己承担:)

        3
  •  1
  •   amelvin    15 年前

    我认为你没事。

    一篇文章可能有多个附件,一个附件可能有多个帖子,如果是这样的话,您将需要一个链接实体用于第三种正常形式:

      Post
    
        |
        |
      -----
      | | |
    
    Post_Attachment
    
      | | |
      -----
        | 
        |
    
    Attachment
    
        |
        |
      -----
      | | |
    
      Media
    

    但从你的描述来看,邮报和媒体之间似乎没有什么关键关系。

        4
  •  1
  •   TMN    15 年前

    将fk从介质添加到post的唯一原因是,您需要为特定post筛选或选择介质,而不考虑附件。即使您需要显示媒体(可能是按类型)及其所属的文章,我也不会添加直接关联;添加第二个连接(通过附件表)的开销可能很小,因此您不太可能看到任何显著的改进。

        5
  •  0
  •   TomTom    15 年前

    尽可能深入地链接表。报告和看到性能问题后取消规格化。

        6
  •  0
  •   dcolish    15 年前

    首先,不需要使用代理键。如果您需要,一个合适的数据库将级联更新。在规范化数据库时,通常要实现第三种标准形式,甚至bcnf。第二个普通表单并不总是保护您的数据不受更新异常的影响。一旦生成er图并确定哪些数据是实体(post、attachments、media)的一部分,以及哪些数据是关系的一部分,就应该很容易确定模式中的功能依赖关系。根据关系的基数,您可能需要也可能不需要联接表。最好的做法是在图表中对数据建模,然后处理实现问题。