我有兴趣了解像这样运作的工具:
给定一个数据库模式和一些数据,建议模式是否可能以任何特定的正常形式构建,然后告诉如何将模式考虑在内以产生进一步的规范化。
基本上是一种用于数据库模式设计的静态分析工具。
与其他静态分析工具一样,这样的数据库工具无需生成完美的结果(我怀疑这种“完美”工具在计算上是可行的),或适用于所有数据库系统,或免费/开源,或其他任何东西。该工具不必独立;它可以捆绑为一些复杂的IDE功能。我只是想知道那里有什么。
答案 0 :(得分:6)
您描述的工具,尝试分析您的数据和元数据,并建议您可能的非规范化结构,会给出错误的建议这么频繁让Clippy,微软的助手似乎是一个不可或缺的作家的帮助。
规范化过程涉及将软件需求映射到逻辑数据模型。分析工具无法比您更了解您的数据要求。因此,它无法从错误的数据库设计中推断出哪些部分是错误的。
我知道您已对该问题进行了限定,并且您对该工具的功能的期望有限。但是你希望它对普通的日常工作有用 - 但即使对于最简单的情况它也不可靠。
与静态代码分析工具比较。假设您编写了一个应用程序并将其交付给您的客户端,并且客户端说“为什么我不能从此应用程序发送电子邮件?”静态代码分析工具如何告诉您省略了所需的功能?它无法了解这些要求。
同样,数据库规范化分析工具如何知道UserAccount
表是否适合具有单个MobilePhoneNumber
属性,或者是否更适合将电话号码分隔到另一个表中,以便一个用户可以列出多部手机吗?
答案 1 :(得分:6)
可以这样做,并且至少有2种可以为您做标准化的商用工具:GeneXus和DeKlarit。 他们使用名为NormalizationBySynthesis
的流程答案 2 :(得分:3)
我也考虑过这个问题。这在理论上是可行的,并且有一些关于这个主题的研究论文。以前在www.dbtools.cs.cornell.edu上有很酷的工具。这是由着名作家Raghu Ramakrishnan开发的。他目前在雅虎研究院工作。有关更多信息,请参阅以下文章
第三个链接非常有趣。以下是论文的摘要:
本文是关于设计一个 完整的互动工具,命名 JMathNorm,用于关系数据库 (RDB)使用Mathematica进行标准化。 它是原型的扩展 由同一作者[1]开发 包含第二范式 (2NF)和Boyce-Codd Normal Form (BCNF)除了现有的 第三范式(3NF)模块。该 这项研究开发的工具是 完成并可用于实时 数据库设计以及帮助 教授DB的基本概念 对有限的学生进行规范化 数学背景。 JMathNorm 还支持交互式使用 实验的模块 基本集合操作如 关闭,并完全关闭在一起 用模块来获得最小化 功能依赖集的封面 并测试一个属性 候选人的关键JMathNorm的GUI 接口是用Java编写的 利用Mathematica的JLink工具 驱动Mathematica内核。
我对这个问题的答案也很感兴趣。如果有人遇到过工具,请告诉我们!
答案 3 :(得分:2)
开源工具SchemaSpy检测到一些“异常”,例如“没有索引的表”或“标记为'可空'和'必须唯一'的列”。其中一个异常是“具有递增列名称的表,可能表示非规范化”
答案 4 :(得分:0)
无法完成。
规范化是根据功能依赖定义的
您可以查看
等表格A | B
--+--
1 | 1
1 | 2
并推断B 依赖于A <(因为它对于单个A值具有两个不同的值),但是你永远不能推断依赖 存在,例如A可能依赖也可能不依赖于B.
答案 5 :(得分:0)
我认为这很难实现。
喜欢,表
Id | Name | Surname | SSN
是1NF,
Id | Name | Surname | Mobile
不是,但你既不能从设计中也不能从数据中说出来,只能从字段名称中说出来。
我曾经见过一个超声波检查数据库,实际上在一张桌子上同时有GENDER
和LMP
(最后一次月经期)。