有没有工具可以检查我的数据库是否被规范化为第三种形式?


20

我最近了解了标准化,并了解实现新架构时标准化的重要性。

如何检查我的数据库是否符合2NF或3NF标准?

手动检查是肯定的选择,但是我在这里寻找自动化工具。

我不是在寻找点击工具,而是要突出一些可能的优化以使其符合3NF表的功能。我猜它可能使用基于良好样本数据和/或列名语义分析的统计信息。


1
我希望这样的工具不存在。不需要强制执行2NF / 3NF。通常设计一个架构/模型必须采取实用性和性能考虑进去,这通常夹头XNF窗外
Philᵀᴹ

2
这是否意味着不实际使用归一化?我计划将其用作起点,并会在降低性能时考虑进行非规范化。
ack__ 2012年

3
模式设计更多是一门艺术,而不是一门科学。当然,有一些基本规则可以遵循,但是一旦您做得足够多,您就会开始对什么可行,什么不可行有了一个很好的认识。工艺。
datagod 2012年

我不同意菲尔。标准化有时是要走的路。其他时候,星型架构更好。这取决于您在做什么。您将需要大量表,而自动化才值得。
Walter Mitty

Answers:


24

规范化绝对用于现实世界中……希望您知道3NF只是其中的第三个……现在是什么8?但是3NF应该是一个容易的目标。

但是...我敢说没有这样的工具。

从技术上讲,规范化是每个表的属性。在给定的数据库中,不同的表可能具有不同的规范化级别。

每个表都代表事实……关于某种事物(人,帐户,订单,装运,物品,位置)的实例的事实,有时包括外键,这些外键会导致您找到关于该事物的其他种类的事实。

规范化与表中事实的准确度和效率以及表设计防止模棱两可和冗余数据模式的能力有关。

因此,需要了解实际事实……这超出了自动化工具的范围。

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

在一个由所有讲师讲授所有科目并且每个学生可以任意组合但每个教授就每个科目开设不多于一门课程的世界中,此表确实可以说是3NF。在现实世界中,为此表要求3NF的说法是荒谬的。

要了解3NF中没有的内容,需要了解其代表的事实的性质。在我们的现实中,该表不会是3NF,因为(除其他原因外)主题和讲师是以与学生无关的方式关联在一起的。如果我们开设的课程由讲师讲授存储在数据库中其他地方的科目,为什么我们要在此处复制这两个值,而不是从另一个表中复制外键来表明该学生已注册该课程?如果更换了讲师,我们必须在多个位置更改多个记录。

数据库越规范化,它与现实世界以及与自身之间的内在一致性就越强,并且数据库事实不经意间变得不真实就越困难。数据库设计是一门艺术,但绝对是一门科学。

即使我看不到他撰写的所有文章,我还是推荐克里斯·伊达(Chris Date)的书,《数据库设计和关系理论:范式和所有爵士乐》,其中详细介绍了关系模型的基础理论。


2
感谢您提供详细的答案。但是,按照您的示例,应该有可能使用一种分析样本数据的工具来检测“讲师”的值重复很多,并且还出现在另一个表中,因此建议它可能是外键或任何其他更改的候选对象会使该表符合3nf标准,还是我缺少什么?
ack__ 2012年

2
是的,但是关键字仍然是“建议”。一个工具可以通过寻找明显的冗余来建议结构上的改变,但是我仍然坚持认为,对于这种工具来说,真正的冗余和相关性的巧合显得很难区分。需要了解数据的真实世界性质。
Michael-sqlbot 2012年

@ack__:是否为第三范式是关系的属性,不是一对或一组关系。因此,我看不到建立外键关系与第三范式有任何关系。
miracle173'12

我认为更大的问题是确定多列功能依赖关系尤其是有问题的。如果值可以相同,但表示不同的实体(即涉及复合键的位置)。考虑一个表:(地址文本,城市,州政府,邮件代码,国家/地区)。现在这还没有规范化。(城市,省)->(国家/地区)。因此,要完全规范化,我们必须将其分解为至少三个表,也许是四个表(mail_code处理!),但是复合键使此问题难以即时检测。还比较。键是nf思想的关键,因此不要忽略它们!
克里斯·特拉弗斯

有人可以解释为什么“在这样一个世界里,一个学生只能学习一个学科的课程,而所有讲师都教授所有学科,这个表的确可以说是3NF”。感觉到这张桌子的钥匙是(学生,讲师),这不会破坏3NF吗?每个教授每门学科的老师都对我们有什么帮助?
Drew Verlee 2014年

5

在发展关系理论中使用形式化方法的部分目的是开发可以自动化的程序。我确信CJ Date会在他的“数据库系统概论”中正确地指出。

1980年代末或1990年代初发布的几种CASE工具可以通过分析ER图或对样本数据进行统计分析来推导每种可能的5NF模式。

Visio Enterprise Architect(我认为)是遵循这些思路的相对较新的工具。


真好 我确实在寻找两种分析模式的方法(ER图和样本数据分析)。您知道Visio以外的其他任何最新软件吗?我还没有许可证。
ack__ 2012年

1
但是您的ER图本质上是对象模型图。这与获取现有数据库并确定是否已对其进行规范化不太一样。
克里斯·特拉弗斯

2
带有示例数据的表分析和规范化建议是Access的功能,如果我还记得的话,在早期版本中。
ypercubeᵀᴹ

@Chris:是的,我指的是ER图,仅用于语义分析。
ack__ 2012年

@ypercube:感谢您的提示,我将介绍Access。
ack__ 2012年


2

我认为,如果您可以编写工具来执行此操作,则仍然需要人工审核才能完成工作。正常形式是根据功能依赖性定义的,而不能仅通过检查数据来确定。换句话说,这是归纳逻辑而不是演绎逻辑,以确定功能依赖项是否存在。


实际上,将需要进行一些手动检查,我不希望有一种工具可以完全自动进行检查。但是我很确定,大部分工作可以通过分析数据库中的现有数据(至少是其样本)和/或字段name / type来实现自动化。
ack__ 2012年

1
怎么样?规范化是在联接依赖关系和功能依赖关系上定义的。功能依赖关系基本上可以轻松地定义为:对于超键的每个可能值,功能依赖关系中都只有一个值。您无法通过自动执行数据审查来达到目标​​,因为仅因为对于您当前的集合而言,它似乎是功能依赖项,但这并不意味着新的键将符合要求。这非常类似于旧的相关性与因果关系划分。您无法通过观察数据库中当前内容来引入功能依赖性。
克里斯·特拉弗斯

2
至少有一种工具可以暗示可能存在某种关系。如果数据样本的质量和大小足够大,则这种猜测的准确性将足够高以用于实际目的。
miracle173 2012年

也许。但是,让我们以一个真实的示例为例,该示例在关系设计方面非常明智:地址。邮寄地址应如何规范化?建议多少张桌子?根据我对3NF的理解,您需要用于国家,州/省和城市的表格。我不知道邮政编码/城市细目分类是否有意义,但可能确实如此。但是,您如何分析现有数据并确定(城市,州)->国家?您如何确定全球邮政编码是否与这些结构有关?
克里斯·特拉弗斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.