我有一个mySQL数据库,里面有一个包含80列和1000万行的巨大表。数据可能存在不一致。
我想以自动化和有效的方式规范化数据库。
我可以使用java / c ++ / ...来做,但我想在数据库中尽可能多地做。我想数据库外的任何工作都会使事情变得非常缓慢。
关于如何做的建议?有什么好的资源/教程可以开始?
我不正在寻找关于规范化的任何提示(使用谷歌找到了很多这样的东西)!
答案 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