0

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

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

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

谢谢

4

6 回答 6

3

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

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

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

如果有人想将附件从一个帖子“移动”到另一个帖子[即,更新附件的 FK 参考],媒体会发生什么?它是否保留在附件中并移至新帖子?

你能用 Post 有附件和媒体,以及 Attachments 有媒体吗?帖子和附件是否会因为附件被“移动”但帖子没有更新而对媒体存在分歧?

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

适当的标准化很容易。

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

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

于 2010-03-08T15:38:50.090 回答
2

不,对于像3NF一样深的规范化,这是通常的规范化级别,结构没问题。

因为记录规范化既有成本也有好处,特别是在数据插入和删除方面,对精确控制插入方式和插入内容的主要级别进行了控制。

一个归一化和非规范化的人自担风险:)

于 2010-03-08T15:38:20.980 回答
1

我觉得你没问题。

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

  Post

    |
    |
  -----
  | | |

Post_Attachment

  | | |
  -----
    | 
    |

Attachment

    |
    |
  -----
  | | |

  Media

但是从您的描述来看,POST 和 MEDIA 之间似乎没有关键关系。

于 2010-03-08T15:35:57.007 回答
1

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

于 2010-03-08T16:23:12.027 回答
0

尽可能深的链接表是有意义的。为报告和看到性能问题后进行非规范化。

于 2010-03-08T15:31:33.583 回答
0

First off, you don't need to use surrogate keys. A proper database will cascade updates if you desire. When normalizing a database, you're usually trying to achieve 3rd normal form or even BCNF. 2nd normal form will not always protect your data from update anomalies. Determining the functional dependencies in your schema should be simple once you produce an ER diagram and decide what data is part of the entities (Posts, Attachments, Media) and what data is part of the relationships. Depending on the cardinality of your relations, you may or may not need join tables. The best thing to do is to model your data in a diagram, then deal with the implementation issues.

于 2010-03-08T16:45:51.377 回答