2013-03-22 101 views
0

我有一个来自客户端的数据是一个很好的重复信息混乱。我将运行一个清理查询来抓取转储的数据,进行一些清理,最终将其放入新表中。最有效的方法来避免重复数据清理

下面是一个脚本:

INSERT INTO Spend (...) 
SELECT ... 
FROM Facilities F 
JOIN Dump d 
    ON d.facname = f.name 
    AND f.city = d.city 

到目前为止好。出现新的数据转储时会出现问题。我只想得到最新的东西。我无法想出一种看起来很有效的方法。快速简便的WHERE NOT条款将不起作用(我不认为...),因为没有任何独特的数据列。条目的唯一性实际上取决于大多数(如果不是全部)列的组合。考虑到去年一家公司的转储数量是20万行,所以对每个转储进行循环播放似乎是一个糟糕的想法。一旦我们在这里得到了一些用户,并且数据追溯到一年多以前,似乎清理工作将会过于密集。

或者我可能只是一个n00b,我正在从一座小山上爬山。感谢您的任何意见或pointers-


编辑#1

附加样本记录的图像设置 enter image description here

第一个关口是企业的ID从企业的外键表。其余的是购买记录。此表用于搜索。然后,在清理并转储到新的可搜索表格后,唯一的唯一列是每行的自动递增ID。

+1

你能给样品记录吗? – 2013-03-22 00:24:35

+0

肯定的事情。见上面的编辑。 – 2013-03-22 12:42:09

+0

您正在描述列。似乎有10个。您将第一列表征为特征,然后调用剩余的9个“购买记录”。你是一个喜欢捷径的人,呃? – Tim 2013-03-22 12:51:57

回答

1

消除事务数据库冗余的关键是规范化;每增加一次的正常化就消除了另一个潜在的冗余来源。

在你的情况下,我推断你有几个冗长的文本字段会膨胀主数据表中的索引。我建议你把它们中的每一个放在它自己的查找表中,并且从主数据表中查找一个(人为的)外键。这将缩小主表中的密钥,从而降低索引高度并相应地提高性能。同时你增加数据的标准化。

为了进行报告,随后将清理后的数据提取到一个非规范化表(也就是说,透视立方体)中,以便最终用户更有效地访问。

+0

感谢您的回复。我会在前面说,我现在只理解它的一半:)在清理数据时,我将公司元数据从另一个表中找到相应的记录,获取其唯一ID,然后使用它来代替所有记录当倾倒入被清洗的桌时meta。所以我的原始数据正常化了。可能能够进一步净化,但我现在还不确定。接受建议。 – 2013-03-22 12:44:44

+0

@JohnBlythe:你正确地做了,清洁数据总是让你的手变脏。 – 2013-03-22 15:51:57

+0

真棒,谢谢! – 2013-03-22 16:25:33

0

感谢您的互动和帮助,伙计们。我认为最简单的解决方案是只让客户端转储新数据。我将把它附加到一个大量的转储数据池中,这样我就可以连续记录所有转储,并在使用它清除并发送到我的Spend表之前覆盖Dump表。

再次感谢!