我有三个表格:发布,附件和媒体。数据库规范化 - 我应该将表连接到多深?
帖子有附件,附件有媒体。
当前,Post和Attachment表由外键链接,Attachment和Media表也是如此。我的问题是,为了适当的数据库设计和规范化,我应该在Post和Media之间建立外键关系吗?我不确定我应该将这些表格连接在一起。
谢谢
我有三个表格:发布,附件和媒体。数据库规范化 - 我应该将表连接到多深?
帖子有附件,附件有媒体。
当前,Post和Attachment表由外键链接,Attachment和Media表也是如此。我的问题是,为了适当的数据库设计和规范化,我应该在Post和Media之间建立外键关系吗?我不确定我应该将这些表格连接在一起。
谢谢
了一个正确的数据库设计和规范化,我应该安装后与媒体之间的外键关系着想denormalizes?
对于“正确正常化”你必须确保没有“更新异常”。
如果有人更新帖子,附件和媒体会发生什么变化?重命名帖子是否会断开附件和/或媒体的连接?如果是这样,那么你的FK是错误的。 [提示,你必须使用代理键而不是帖子的名字来使你的FK的工作。]
如果有人想“附件”从一个职位“移动”到另一个[即更新附件的FK参考],什么媒体发生?它是否与附件保持一致并转移到新邮政?
你可以结束帖子有附件和媒体,以及附件有媒体吗?邮政和附件是否会对媒体持不同意见,因为附件“已被移动”,但邮政并未更新?
如果你可以有矛盾,你已经打破了第二范式,你有重复的关键关系,你不应该重复。
适当规范化很简单。
数据取决于关键,而且全部是关键。
不要复制或重复任何地方的依赖关系。你所说的“深度链接”似乎是一个重复的依赖关系。
从我的角度来看,所有这些都是商业逻辑关注点。底层结构代表了某些假定和关系(帖子可能有附件,附件可能有媒体文件或没有)。我认为这是他的想法,并且这是正常化的。 – 2010-03-08 15:45:09
您对将附件从一个贴子“移动”到另一个贴纸的评论是将这个家庭带给我的。谢谢! (现在是时候打开书,找出代理键是什么;)) – 2010-03-08 15:46:39
@JorgeCórdoba。我认为“业务逻辑”是数据库必须代表的东西。除了必须支持的“业务逻辑”之外,我看不出有什么“底层结构”。 – 2010-03-08 17:03:40
链接表尽可能深。非正常化报告并在看到性能问题后。
我认为你没事。
看来可能是一个POST可以有多个附件和附件可以有几个职位,如果是的话,你将需要一个链接实体进行第三范式:
Post
|
|
-----
| | |
Post_Attachment
| | |
-----
|
|
Attachment
|
|
-----
| | |
Media
但是,从你的描述似乎有POST和MEDIA之间不存在关键关系。
不,规范化深达3NF而言你的,这是通常的标准化水平,结构是好的。
为了记录正常化它的成本以及它的好处,特别是对数据的插入和删除对控制权正是如何和什么可以插入一个重大的水平。
一个规范化,并在自己的风险:)
如果您需要过滤或选择特定帖子的媒体而不考虑附件,则将媒体添加到帖子的唯一原因是将媒体添加到帖子。即使您需要显示媒体(可能按类型)及其所属的帖子,我也不会添加直接关联;添加第二个连接(通过附件表)的开销可能很小,所以您不太可能看到任何重大改进。
首先,您不需要使用代理键。如果你愿意,一个合适的数据库将会级联更新。规范化数据库时,通常会尝试实现第三范式甚至BCNF。第二范式并不总是保护您的数据免受更新异常的影响。一旦您生成一个ER图并确定哪些数据是实体的一部分(邮件,附件,媒体)以及哪些数据是这些关系的一部分,那么在模式中确定函数依赖关系应该很简单。根据您的关系的基数,您可能需要也可能不需要连接表。最好的做法是在图表中对数据进行建模,然后处理实施问题。
我不知道我理解你的问题。我不认为邮政的类型要根据邮政附件所在的媒体进行更改。在这种情况下,如果Post和Media之间没有直接关系,那么可能不需要是外键关系? – 2010-03-08 15:32:01
ATTACHMENT可以存在于几个POST吗? – amelvin 2010-03-08 15:36:58
请不要评论。请用人们需要回答问题的信息更新问题。请更新问题并删除您的评论。 – 2010-03-08 15:39:30