mySQL数据库的自动规范化 - 怎么做?

时间:2009-07-22 18:50:19

标签: mysql normalization

我有一个mySQL数据库,里面有一个包含80列和1000万行的巨大表。数据可能存在不一致。

我想以自动化和有效的方式规范化数据库。

我可以使用java / c ++ / ...来做,但我想在数据库中尽可能多地做。我想数据库外的任何工作都会使事情变得非常缓慢。

关于如何做的建议?有什么好的资源/教程可以开始?

正在寻找关于规范化的任何提示(使用谷歌找到了很多这样的东西)!

3 个答案:

答案 0 :(得分:4)

我想不出有什么方法可以自动化它。您必须创建所需的表,然后通过手动查询遍历并替换每个数据。

如,

INSERT INTO contact
SELECT DISTINCT first_name, last_name, phone
FROM massive_table;

然后你可以将列从大量表中删除,并用contact_id列替换它。

当拉出进入一对多表格的行时,你会有类似的过程。

答案 1 :(得分:3)

您需要研究列以识别“喜欢”实体并将其分解为单独的表格。最好的情况是,自动化工具可能会识别某些列的行组具有相同的值,但理解数据的人必须确定这些行是否真正属于单独的实体。

这是一个人为的例子 - 假设您的列是名字,姓氏,地址,城市,州,邮编。自动化工具可以识别具有相同姓氏,地址,城市,州和zip的同一家族成员的行,并错误地断定这五列代表实体。然后它可能会分割表格:

名字,ReferenceID

和另一张表

ID,姓氏,地址,城市,州,邮编

明白我的意思?

答案 2 :(得分:2)

在清理凌乱的数据时,我喜欢创建用户定义的mysql函数来执行典型的数据清理工作......以后您可以重用它们。接近这种方式还可以让您查看是否可以找到已经编写的现有udf(可以使用或不使用)...例如mysqludf.org