我正在尝试找一种好方法来检查我通过批量加载(SQLLoader)提供的数据是否已存在于我的数据集中,因此我不再加载它。
目前我们有这样的设置,
TableA
col1, col2, bulkLoadName
此表格包含数据
col1, col2, bulkLoadName
"Joe", 35, "Load1"
"Tim", 65, "Load1"
"Ray", 95, "Load1"
"Joe", 35, "Load2"
我想把它改成,
TableA
PK, col1, col2
TableAtoBulkLoadName
PK, TABLEA_PK, BulkLoadName_PK
BulkLoadName
PK, bulkLoadName
数据的样子,
PK, col1, col2
1, "Joe", 35
2, "Tim", 65
3, "Ray", 95
PK, TABLEA_PK, BulkLoadName_PK
1, 1, 1
2, 2, 1
3, 3, 1
4, 1, 2
PK, bulkLoadName
1, "Load1"
2, "Load2"
这使数据规范化,因此我可以轻松地检查特定负载而无需字符串搜索,MOST重要地阻止我在数据库中加载重复数据,因为在以后的加载中再次定义了某些内容。
我无法决定如何实施重复检查。我不熟悉SQL,需要一个ORACLE 11g的解决方案。我看了,我想出了两个可能的解决方案......
使用临时表来存储批量加载,并在加载后运行存储过程以进行检查。
在MERGE
上使用TableA
子句向TableA
添加新记录,或者如果记录已存在,则在TableAtoBulkLoadName
中创建新的交叉记录。
我现在的问题是,所有的背景信息都存在于这些方法中的专业人士和者是什么?这种正常化是否正常?有没有标准的方法来做这种事情?
谢谢!
答案 0 :(得分:1)
严格来说,从绩效角度来看,如果你能在一个陈述中做所有事情,那么通常更好。
但是一旦你开始以各种方式转换数据,我个人发现通过使用临时表,生成的代码更容易阅读和修改。