Database 如何开始在更大的数据库中查找功能依赖关系?

Database 如何开始在更大的数据库中查找功能依赖关系?,database,relational-database,functional-dependencies,Database,Relational Database,Functional Dependencies,我的数据库有4个表,每个表大约有20列。我要确定整个数据库是否符合BCNF。我假设第一步是查找函数依赖项,但我不确定如何做到这一点,因为有这么多列!正确的方法是什么?最简单的方法是购买支持逆向工程的计算机辅助软件工程(CASE)工具。这些工具可以检查SQL数据库,并从现有表生成每个可能的5NF模式。我想,我第一次看到这样的工具是在20世纪80年代;我不知道还有哪些 如果您自己做,那么是的,您必须首先确定所有的函数依赖关系。你必须知道每一列的含义才能可靠地做到这一点。如果您知道每一列的含义,并且了

我的数据库有4个表,每个表大约有20列。我要确定整个数据库是否符合BCNF。我假设第一步是查找函数依赖项,但我不确定如何做到这一点,因为有这么多列!正确的方法是什么?

最简单的方法是购买支持逆向工程的计算机辅助软件工程(CASE)工具。这些工具可以检查SQL数据库,并从现有表生成每个可能的5NF模式。我想,我第一次看到这样的工具是在20世纪80年代;我不知道还有哪些

如果您自己做,那么是的,您必须首先确定所有的函数依赖关系。你必须知道每一列的含义才能可靠地做到这一点。如果您知道每一列的含义,并且了解业务环境,那么您可以通过查看列名称来确定许多函数依赖项(如果不是全部的话)

如果你不知道每一列的含义,前进的道路仍然很简单,但并不容易

Simple:使用SQL,查询每种可能的列组合以获得不同的值,并计算行数。如果两组列之间存在函数依赖关系,它们将返回相同数量的行。你还是要看它的意思;您可能会碰巧得到相同数量的行

不容易:有很多列的组合。对于一个包含20列的表,大约有一百万个组合。(如果必须这样做,我会编写一个程序来生成所有SQL语句,并将它们的结果存储在一个表中以供以后分析。)

较硬的部分

在一般情况下,您无法知道迄今为止由应用程序代码创建和维护的表之间是否存在函数依赖关系。(您的具体情况可能不同。)可能是这些列中的某些列位于错误的表中,但应用程序代码将这些列放在一起

我想到了这个短语。四个表,每个表有20列,不知道其含义或业务环境,为您提供了大约1.2x1024个组合进行测试。这是不实际的;您必须通过理解列的含义来缩小范围,或者忽略表间依赖的可能性,直到您有了更好的结构开始