【发布时间】:2014-05-29 03:35:00
【问题描述】:
我正在尝试寻找一种好方法来检查我通过批量加载 (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"
这将数据标准化,因此我无需字符串搜索即可轻松检查特定负载,并且最重要的是防止我在数据库中加载重复数据,因为在以后的加载中再次定义了某些内容。
我无法决定如何实施重复检查。我不太熟悉 SQL,需要 ORACLE 11g 中的解决方案。我已经看了,我想出了 2 种可能的解决方案...
解决方案 1:
使用临时表存储批量加载并在加载后运行存储过程进行检查。
解决方案 2:
在TableA 上使用MERGE 子句将新记录添加到TableA 或在TableAtoBulkLoadName 中创建新的交集记录(如果记录已存在)。
现在所有背景信息都已公开,我的问题是这些方法的优缺点是什么?这种归一化正常吗?有没有做这种事情的标准方法?
谢谢!
【问题讨论】:
标签: oracle database-design triggers oracle11g normalization