6

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

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

我可以使用 java/c++/... 来做,但我想在数据库中做尽可能多的事情。我想数据库之外的任何工作都会大大减慢速度。

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

不是在寻找关于什么是标准化的任何提示(使用谷歌找到了很多这样的东西)!

4

3 回答 3

5

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

这是一个人为的示例 - 假设您的列是名字、姓氏、地址、城市、州、邮编。自动化工具可能会识别出具有相同姓氏、地址、城市、州和邮编的同一家庭成员的行,并错误地得出这五列代表一个实体的结论。然后它可能会拆分表:

名字,参考ID

和另一张桌子

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

明白了吗?

于 2009-07-22T19:08:14.977 回答
4

我想不出任何方法可以自动化它。您必须创建所需的表,然后使用手动查询遍历并替换每条数据。

例如,

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

然后您可以将这些列从庞大的表中删除,并用 contact_id 列替换它。

当拉出进入一对多表的行时,您将有类似的过程。

于 2009-07-22T19:02:55.550 回答
2

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

于 2009-07-23T00:35:53.030 回答