数据库架构规范化检查器?

时间:2009-02-12 19:28:11

标签: database database-normalization genexus

我有兴趣了解像这样运作的工具:

给定一个数据库模式和一些数据,建议模式是否可能以任何特定的正常形式构建,然后告诉如何将模式考虑在内以产生进一步的规范化。

基本上是一种用于数据库模式设计的静态分析工具。

与其他静态分析工具一样,这样的数据库工具无需生成完美的结果(我怀疑这种“完美”工具在计算上是可行的),或适用于所有数据库系统,或免费/开源,或其他任何东西。该工具不必独立;它可以捆绑为一些复杂的IDE功能。我只是想知道那里有什么。

6 个答案:

答案 0 :(得分:6)

您描述的工具,尝试分析您的数据和元数据,并建议您可能的非规范化结构,会给出错误的建议这么频繁让Clippy,微软的助手似乎是一个不可或缺的作家的帮助。

enter image description here

规范化过程涉及将软件需求映射到逻辑数据模型。分析工具无法比您更了解您的数据要求。因此,它无法从错误的数据库设计中推断出哪些部分是错误的。

我知道您已对该问题进行了限定,并且您对该工具的功能的期望有限。但是你希望它对普通的日常工作有用 - 但即使对于最简单的情况它也不可靠。

与静态代码分析工具比较。假设您编写了一个应用程序并将其交付给您的客户端,并且客户端说“为什么我不能从此应用程序发送电子邮件?”静态代码分析工具如何告诉您省略了所需的功能?它无法了解这些要求。

同样,数据库规范化分析工具如何知道UserAccount表是否适合具有单个MobilePhoneNumber属性,或者是否更适合将电话号码分隔到另一个表中,以便一个用户可以列出多部手机吗?

答案 1 :(得分:6)

可以这样做,并且至少有2种可以为您做标准化的商用工具:GeneXus和DeKlarit。 他们使用名为NormalizationBySynthesis

的流程

答案 2 :(得分:3)

我也考虑过这个问题。这在理论上是可行的,并且有一些关于这个主题的研究论文。以前在www.dbtools.cs.cornell.edu上有很酷的工具。这是由着名作家Raghu Ramakrishnan开发的。他目前在雅虎研究院工作。有关更多信息,请参阅以下文章

  1. Diederich,T。和Miton,J。,(1988),“用于数据库规范化的新方法和快速算法”,ACM数据库系统事务,13(3),339-365。
  2. Bernstein,P。A.(1986),“从功能依赖性合成第三范式关系”,ACM数据库系统事务,第1卷。第4号,第277-298页。
  3. JMathNorm:使用Mathematica的数据库规范化工具,计算机科学讲义;卷。 4488,第七届计算科学国际会议论文集,第二部分,Ali Yazici,Ziya Karakaya
  4. 第三个链接非常有趣。以下是论文的摘要:

      

    本文是关于设计一个   完整的互动工具,命名   JMathNorm,用于关系数据库   (RDB)使用Mathematica进行标准化。   它是原型的扩展   由同一作者[1]开发   包含第二范式   (2NF)和Boyce-Codd Normal Form   (BCNF)除了现有的   第三范式(3NF)模块。该   这项研究开发的工具是   完成并可用于实时   数据库设计以及帮助   教授DB的基本概念   对有限的学生进行规范化   数学背景。 JMathNorm   还支持交互式使用   实验的模块   基本集合操作如   关闭,并完全关闭在一起   用模块来获得最小化   功能依赖集的封面   并测试一个属性   候选人的关键JMathNorm的GUI   接口是用Java编写的   利用Mathematica的JLink工具   驱动Mathematica内核。

    我对这个问题的答案也很感兴趣。如果有人遇到过工具,请告诉我们!

答案 3 :(得分:2)

开源工具SchemaSpy检测到一些“异常”,例如“没有索引的表”或“标记为'可空'和'必须唯一'的列”。其中一个异常是“具有递增列名称的表,可能表示非规范化”

http://schemaspy.sourceforge.net/

答案 4 :(得分:0)

无法完成。

规范化是根据功能依赖定义的

  1. 无法用SQL表示
  2. 无法从数据推断
  3. 您可以查看

    等表格
    A | B
    --+--
    1 | 1
    1 | 2
    

    并推断B 依赖于A <(因为它对于单个A值具有两个不同的值),但是你永远不能推断依赖 存在,例如A可能依赖也可能不依赖于B.

答案 5 :(得分:0)

我认为这很难实现。

喜欢,表

Id | Name | Surname | SSN 

是1NF,

Id | Name | Surname | Mobile

不是,但你既不能从设计中也不能从数据中说出来,只能从字段名称中说出来。

我曾经见过一个超声波检查数据库,实际上在一张桌子上同时有GENDERLMP(最后一次月经期)。