一般的问题是称为数据清理的整个编程子区域,这是称为数据集成的较大子区域的一部分。避免此类问题很可能是从Excel工作表迁移的主要原因,也是为什么高级开发人员不希望允许字段变为可为空的原因。我认为这是数据迁移中较大的复杂性来源之一,这并不是没有道理的。
仅在可能的情况下选择使用NULL可能是很错误的事情,更不用说更改数据模型以使更多字段可为空了。Excel的完整性检查较弱或没有,这很可能是其中许多问题的原因。错误的做法是删除新数据库中的完整性检查并将垃圾转储到其中。这只是使问题永久存在,并为将来的集成增加了极大的复杂性,而这些集成必须以某种方式处理无意义的数据。
某些差异可能是由于数据模型不匹配造成的。处理此问题主要是(密切地)熟悉两个数据模型并知道如何将旧模型映射到新模型。只要新的能够捕获旧的。(否则,您的团队可能会遇到很大的问题。)这可能很容易需要做更多的工作,而不仅仅是复制列。Darkwing给出了一个很好的例子(以及为什么盲目插入NULL是错误的做法)。在阐述它,如果旧的模式有一个ReceivedDate
和InProgress
位和新的模式有一个StartDate
和ProcessingEndTime
,你将需要决定是否以及如何设置ProcessingEndTime
。根据使用方式,合理(但任意)的选择可能是将其设置为与StartDate
(或者不久之后会导致问题)。
但是,某些差异可能是由于“应该”存在的丢失或损坏的数据造成的。(很可能是由于数据输入错误或过去处理不当或数据处理系统中的错误引起的。)如果您的团队中没有人预料到这一点,那么您(集体)将自己花费在项目的20%上的时间设定为“几乎”完成。(这是一个虚构的数字,但可能很远比这更糟,甚至更好。这取决于多少数据不正确,它有多重要,它有多复杂,从负责数据的人员那里介入的难易程度,以及其他因素。)一旦确定数据“应该是”,但不见了。通常,您将尝试通过查询旧数据源来确定问题的严重程度。如果有数十个或数百个条目,则很可能是数据输入错误,负责数据的客户应手动解决它(即告诉您值应该是什么)。如果是数百万个条目(或数据的很大一部分) ,那么您可能需要重新考虑是否正确地识别出“应该”存在。这可能表明新系统中存在建模错误。
例如,假设一张发票有数量和每个项目的总和(但没有单价),只是其中一些数量莫名其妙地丢失了。与处理此类发票的人交谈可能会产生以下一种(或多种)情况:1)“哦,空白数量表示数量为1”,2)“哦,我知道这些物品的价格大约为$ 1,000,所以,显然,这是2的订单,3)“发生这种情况时,我在另一个系统中查找价格并四舍五入”,4)“我在另一个系统中查找价格”,5)“那不是真实数据”,6)“以前从未见过”。
如建议的那样,这可以指示自动解决情况的某些方法,但是您必须注意该解决方案适用于所有情况。涉及其他系统可以交叉检查数据是很常见的,这是一件好事。但是,这通常是一件坏事,因为很难获得访问权限并与这些系统集成以执行交叉检查,并且经常发现,系统之间的冲突不仅仅是因为丢失了一些数据。通常需要一些手动干预,并且取决于规模,很可能需要专门为数据清理任务创建工具和界面。通常,完成的工作是部分导入数据,但是将缺少数据的行发送到单独的表中,以便在其中查看它们。