BCNF - 这可能吗?名称,体育中心,运动

时间:2018-04-24 18:55:23

标签: relational-database database-normalization functional-dependencies bcnf

我试图更好地理解规范化,以便我可以使用最佳实践。我在一本旧书中发现了一个问题,我对它有点困惑。基本上我给这个表提供了以下数据:

Name    Sport    Sport Centre
Jim     Tennis   A1
Jim     Golf     A2
Dan     Tennis   A1
Dan     Golf     A3
Ben     Golf     A2

所以我们假设每个运动中心只能举办一项运动。我想要的是将其转换为BCNF。我的过程(从我迄今为止所学到的)如下:

1 ,我在此确定了所有功能依赖项:

体育中心 - >体育
(姓名,体育中心) - >运动

2 ,我确定了所有候选键:

(姓名,体育中心)

但这是我被卡住的地方。我认为在BCNF中,表必须有超过1个候选键,我只能看到一个。我不确定如何把它送到BCNF。我所做的是以下分割表:

Name    Sport Centre
Jim     A1
Jim     A2
Dan     A1
Dan     A3
Ben     A2

Sport Centre    Sport
A1              Tennis
A2              Golf
A3              Golf

但我也明白,要在3NF(在BCNF之前),每个属性必须依赖于完整的主键,但我的分裂打破了这个规则。

我如何在这里正确规范化?

2 个答案:

答案 0 :(得分:2)

  

1,我在这里确定了所有的功能依赖:

您尚未确定所有持有的FD(功能依赖项)。第一:FD在属性集之间。虽然如果我们将自己限制在从一组属性到包含单个属性的集合的FD中,那么我们可以推断出其他FD所持有的东西。所以我们可以限制我们所说的所有",但你应该知道你在说什么。下一步:您已经确定了一些持有的FD。但是他们通过阿姆斯特朗的公理所暗示的所有这些也都成立了。这总是意味着一些琐碎的FD,例如{Sport Center} - >体育中心& {} - > {}。虽然我们可以通过了解属性来推断琐碎的FD。所以我们再次限制我们所说的所有",但你应该知道你在说什么。碰巧你已经在RHS上识别出具有一个属性的所有非平凡FD。但是你没有证明你找到的那些或者你找到了所有的那些。

你需要学习算法&用于生成所有持有FD的集合的描述的相关定义。包括阿姆斯特朗的公理,FD传递闭合的概念& FD规范封面的概念,以简洁地描述封闭。

  

2,我确定了所有候选键:

假设{{体育中心} - > Sport}是一个规范的封面,唯一的CK是{Name,Sport Center}。

你需要学习算法&查找所有CK的相关定义。

  

我认为在BCNF中该表必须有多个候选键

那是错的。你好像想要回忆起像" 3NF&不是BCNF意味着超过1个CK"或" 3NF& 1 CK意味着BCNF",这是真的。但是这些并不能说明BCNF意味着超过1个CK,或者相当于1个CK意味着不是BCNF。

你需要学习BCNF& amp;的定义。其他相关定义。

  

我不确定如何把它送到BCNF。

我们总是可以分解为BCNF设计。 BCNF的大多数定义都表明,当没有某种形式的FD时。碰巧我们可以通过反复无损地分解来消除问题FD到达BCNF。然而,这可能不必要地“保存”#34;函数依赖。因此,我们通常首先将保存分解为3NF / EKNF,这样可以始终保留FD。虽然然后去BCNF可能无法保留FD,即使直接从原始保留了FD保留分解。

你需要学习算法&分解为给定NF的相关定义。包括无损分解的概念& FD保存。

  

但我也明白,在3NF(在BCNF之前),每个属性必须依赖于完整的主键,而我的分裂打破了这个规则。

为了归一化到给定的NF,没有必要经历较低的NF。一般来说,这可以消除良好的最终NF设计。

另外"在3NF [...]中,每个属性必须依赖于完整的主键"是不正确的。你需要记住定义 - 必要和&充足的条件。而PKs(主键)与规范化无关,CK也可以。虽然我们可以调查一个CK的特殊情况,然后我们可以将其称为PK。另外"我的分裂打破了这个规则"没有意义。表格在某些NF中的必要条件不是关于如何分解到它或任何其他NF的规则。

你需要找一本(好的)学术教科书,并学习它的规范化定义。算法。 (几十本教科书都是免费在线的,也包括幻灯片和课程。)当你被困在它之后,参考&引用它,显示你的工作,然后解释你是如何陷入困境的。

答案 1 :(得分:-1)

我想我可能已回答了我自己的问题,但除非社区专家能够确认,否则我不会对此进行标记。

所以我的分裂是有效的,我错误地识别了候选键。

有两个候选键:

(姓名,体育中心)

(体育中心,运动)

如果这是正确的,那么我将表格拆分为BCNF并且有效。我认为这是正确的。