我最近了解了标准化,并了解实现新架构时标准化的重要性。
如何检查我的数据库是否符合2NF或3NF标准?
手动检查是肯定的选择,但是我在这里寻找自动化工具。
我不是在寻找点击工具,而是要突出一些可能的优化以使其符合3NF表的功能。我猜它可能使用基于良好样本数据和/或列名语义分析的统计信息。
我最近了解了标准化,并了解实现新架构时标准化的重要性。
如何检查我的数据库是否符合2NF或3NF标准?
手动检查是肯定的选择,但是我在这里寻找自动化工具。
我不是在寻找点击工具,而是要突出一些可能的优化以使其符合3NF表的功能。我猜它可能使用基于良好样本数据和/或列名语义分析的统计信息。
Answers:
规范化绝对用于现实世界中……希望您知道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)的书,《数据库设计和关系理论:范式和所有爵士乐》,其中详细介绍了关系模型的基础理论。
在发展关系理论中使用形式化方法的部分目的是开发可以自动化的程序。我确信CJ Date会在他的“数据库系统概论”中正确地指出。
1980年代末或1990年代初发布的几种CASE工具可以通过分析ER图或对样本数据进行统计分析来推导每种可能的5NF模式。
Visio Enterprise Architect(我认为)是遵循这些思路的相对较新的工具。
我非常怀疑您仍然需要答案,但是如果您或其他人可能会受益,则不妨尝试一下此工具:http : //uisacad5.uis.edu/cgi-bin/mcrem2/ database_design_tool.cgi
我认为,如果您可以编写工具来执行此操作,则仍然需要人工审核才能完成工作。正常形式是根据功能依赖性定义的,而不能仅通过检查数据来确定。换句话说,这是归纳逻辑而不是演绎逻辑,以确定功能依赖项是否存在。