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

ack*_*k__ 22 schema normalization database-design database-recommendation

我最近了解了规范化,并了解在实现新模式时它的重要性。

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

手动审查是一个确定的选择,但我正在寻找一种自动化工具。

我不是在寻找点击式工具,更多的是强调可能的优化以使表格符合 3NF。我猜它可能会使用基于良好样本数据和/或列名语义分析的统计数据。

Mic*_*bot 25

在现实世界中绝对使用标准化......希望你知道3NF只是......现在是什么,8?但是 3NF 应该是一个容易的目标。

但是……我敢说不可能有这样的工具。

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

每个表都代表事实……关于某种类型事物(人员、帐户、订单、装运、物品、位置)实例的事实,有时包括外键,这些外键可引导您了解有关该事物的其他类型的事实。

规范化与事实在表中表示的准确性和效率以及表设计防止歧义和冗余数据模式的能力有关。

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

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?
Run Code Online (Sandbox Code Playgroud)

在一个所有教师都教授所有科目并且每个学生可以从每个教师的每个科目上选择任何组合但不超过一门课程的世界中,这张表确实可以说是在 3NF 中。在现实世界中,为这张表声称 3NF 是荒谬的。

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

数据库越规范化,它与现实世界和自身的内在一致性就越强,数据库的事实越难在无意中不真实。数据库设计是一门艺术,但它绝对也是一门科学。

尽管我对他写的所有东西都没有意见,我还是推荐 Chris Date 的书,数据库设计和关系理论:范式和所有爵士乐,其中详细介绍了关系模型的基础理论。

  • 谢谢这么详细的回答。但是,按照您的示例,分析样本数据的工具应该可以检测到“导师”值重复很多,并且还出现在另一个表中,因此表明它可能是外键或任何其他更改的候选者会使这张表符合 3nf 标准,还是我遗漏了什么? (2认同)
  • 没错,但关键词仍然是“建议”。一种工具可以通过寻找明显的冗余来建议结构性变化,但我仍然认为,这种工具很难区分真正的冗余和偶然出现的相关性。需要了解数据的真实世界性质。 (2认同)

Mik*_*ll' 5

在开发关系理论时使用形式化方法的部分目的是开发可以自动化的程序。我很确定 CJ Date 在他的数据库系统简介中说出来了。

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

Visio Enterprise Architect(我认为)是沿着这些路线的相对较新的工具。

  • 使用样本数据分析表格和规范化建议是 Access 的一个功能,如果我没记错的话,在早期版本中也是如此。 (2认同)