我最近了解了规范化,并了解实现新模式时的重要性.
如何检查我的数据库是否符合2NF或3NF标准?
手动审查是一个肯定的选择,但我在这里寻找一个自动化工具.
我不是在寻找一个点击式工具,更多的东西会强调可能的优化以使表3NF兼容.我想它可能会使用基于良好的样本数据和/或列名称的语义分析的统计数据.
解决方法
标准化绝对在现实世界中使用……希望你知道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的书,数据库设计和关系理论:正常形式和所有爵士乐,这些都是关于关系模型的基本理论的极其详细的细节.