数据库规范化 - 将其分解为 BCNF 并找到 F 的规范覆盖

Posted

技术标签:

【中文标题】数据库规范化 - 将其分解为 BCNF 并找到 F 的规范覆盖【英文标题】:Database normalization - to decompose it into BCNF and find the canonical cover for F 【发布时间】:2019-03-26 17:09:54 【问题描述】:

我正在尝试找出下表 F 的规范封面并将其分解为 BCNF。 - 书的属性

Book ID Title ISBN Publish Date Publisher ID Publisher Name Book score Author ID Author Name 

每本书都有一个分数,当然还有一个作者。

这些是给定的函数依赖:

Book ID - > Title, ISBN, Publish Date, Publisher ID, Publisher Name<br /> 
Book ID - > Author ID, Author Name, Book Score<br /> 
Publisher ID- > Publisher Name<br /> 
Author ID - > Author Name<br /> 

要找到 F 的规范海湾,我知道右手尺寸必须是单个 RHS,并且在 LFS 上没有多余的。

所以我有这个:

BookID- > Title <br /> 
BookID- > ISDN<br /> 
BookID- > Publish Date<br /> 
BookID- > Publish ID<br /> 
BookID- > Publisher Name<br /> 
BookID- > Author ID<br /> 
BookID- > Author Name<br /> 
BookID- > Book Score<br /> 
Publisher ID- > Publisher Name<br /> 
Author ID - > Author Name<br /> 

然后,我被卡住了,不知道如何继续...... 将其分解为 BCNF,每个行列式都是候选键,我相信 BookIDPublisher IDAuthor ID 都是候选键。

然后我不知道如何继续......

【问题讨论】:

请阅读编辑帮助以了解重新格式化的基础知识,包括缩进 4 个空格的代码块。在停止编辑之前,请查看帖子的格式化版本。 嗨。请提供您出版的学术教科书的名称和版本。展示你的工作。引用您正在使用的定义、定理和算法。您被卡住的第一个地方通过引用它们来解释原因以及您如何尝试使用它们。不要指望我们知道您正在使用的特定那些或一旦我们知道它们就会复制它们。 (无论如何,这是一个很容易找到的常见问题解答。) PS“这些是给定的功能依赖关系”没有帮助。出于什么目的?他们呢?你的意思是它们构成了这里所有 FD 的掩护。 【参考方案1】:

经典封面

在规范封面中,您应该消除依赖关系BookID → PublisherName,因为它可以从BookID → PublisherIDPublisherID → PublisherName 派生。

候选键

那么,唯一的候选键是 BookID:PublisherID 和 AuthorId 不是 候选键,因为它们确实确定关系的所有属性,只是其中一个.

BCNF 中的分解

最后在这种情况下很容易找到 BCNF,因为将关系分解为三个关系就足够了,候选键是不同功能依赖的三个决定因素,而其他属性是确定的属性。然而,在更复杂的情况下,有必要使用一些算法,例如所谓的“分析算法”,你可以在任何关于数据库的好书中找到。

【讨论】:

您好 Renzo,非常感谢您的回答。请问我可以再问一些问题吗?对于 Canonical Cover - 我可以将其理解为:BookID → PublisherName (A->B) BookID → PublisherID (A->C) PublisherID → PublisherName (C->B) 因此,A ->B 是无关的吗?但是我们是否应该只删除 LFS 上的无关内容和 RHS 上的无关内容?真的需要这一步吗?对于 BCNF,所以一旦我找到唯一的候选键是 BookID,我可以简单地用它来分解它到不同的表吗?我在 youtube 上阅读了一些视频,但似乎他们跳过了一些我错过的步骤......再次感谢! 对于一个规范的覆盖需要三个步骤:减少右侧具有单个属性的所有 FD;删除 LHS 上的无关属性,删除多余的依赖项(即其他人暗示的依赖项)。对于 BCNF,不,分解只在最简单的情况下起作用,比如这个,但一般来说这个过程更复杂。例如见reply。

以上是关于数据库规范化 - 将其分解为 BCNF 并找到 F 的规范覆盖的主要内容,如果未能解决你的问题,请参考以下文章

如何将关系模式分解到BCNF(3NF)

数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF

如何将一个关系模式分解成无损连接的BCNF?

数据库系统方面的问题,求最小函数依赖集、候选码、分解满足范式的关系模式

分解为 BCNF

功能依赖 - BCNF 规范化问题