我有一个 mySQL 数据库,其中包含一个 80 列和 1000 万行的巨大表。数据可能不一致。
我想以自动化和有效的方式规范化数据库。
我可以使用 java/c++/... 来做,但我想在数据库中做尽可能多的事情。我想数据库之外的任何工作都会大大减慢速度。
关于如何做的建议?什么是好的资源/教程开始?
我不是在寻找关于什么是标准化的任何提示(使用谷歌找到了很多这样的东西)!
我有一个 mySQL 数据库,其中包含一个 80 列和 1000 万行的巨大表。数据可能不一致。
我想以自动化和有效的方式规范化数据库。
我可以使用 java/c++/... 来做,但我想在数据库中做尽可能多的事情。我想数据库之外的任何工作都会大大减慢速度。
关于如何做的建议?什么是好的资源/教程开始?
我不是在寻找关于什么是标准化的任何提示(使用谷歌找到了很多这样的东西)!
您需要研究列以识别“相似”实体并将它们分成单独的表格。充其量,自动化工具可能会为某些列识别具有相同值的行组,但了解数据的人必须确定这些数据是否真正属于单独的实体。
这是一个人为的示例 - 假设您的列是名字、姓氏、地址、城市、州、邮编。自动化工具可能会识别出具有相同姓氏、地址、城市、州和邮编的同一家庭成员的行,并错误地得出这五列代表一个实体的结论。然后它可能会拆分表:
名字,参考ID
和另一张桌子
ID、姓氏、地址、城市、州、邮编
明白了吗?
我想不出任何方法可以自动化它。您必须创建所需的表,然后使用手动查询遍历并替换每条数据。
例如,
INSERT INTO contact
SELECT DISTINCT first_name, last_name, phone
FROM massive_table;
然后您可以将这些列从庞大的表中删除,并用 contact_id 列替换它。
当拉出进入一对多表的行时,您将有类似的过程。
在清理杂乱的数据时,我喜欢创建用户定义的 mysql 函数来执行典型的数据清理工作……这样你以后可以重用它们。以这种方式接近还可以让您查看是否可以找到已编写的现有 udf,您可以使用(修改或不修改)......例如mysqludf.org