Oracle中规范化数据的版本控制
我试图找到一种好方法来检查通过批量加载(SQLLoader)提供的数据是否已经存在于我的数据集中,这样我就不会再次加载它了 目前我们有一个这样的设置Oracle中规范化数据的版本控制,oracle,database-design,triggers,oracle11g,normalization,Oracle,Database Design,Triggers,Oracle11g,Normalization,我试图找到一种好方法来检查通过批量加载(SQLLoader)提供的数据是否已经存在于我的数据集中,这样我就不会再次加载它了 目前我们有一个这样的设置 TableA col1, col2, bulkLoadName 此表将包含以下数据: col1, col2, bulkLoadName "Joe", 35, "Load1" "Tim", 65, "Load1" "Ray", 95, "Load1" "Joe", 35, "Load2" 我想把它改成 TableA PK, col1, col2
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中的解决方案。我已经看过了,我想出了两个可能的解决方案
解决方案1:
使用临时表存储大容量加载,并在加载后运行存储过程进行检查
解决方案2:
在TableA
上使用MERGE
子句,将新记录添加到tableaa
或在TableAtoBulkLoadName
中创建新的交叉点记录(如果记录已存在)
现在我的问题是,所有的背景信息都在那里,这些方法的优点和缺点是什么?这种正常化正常吗?有做这类事情的标准方法吗
谢谢 严格地说,从性能的角度来看,如果你能在一句话中做到一切,那通常会更好 但一旦您开始以各种方式转换数据,我个人就会发现,通过使用暂存表,生成的代码更易于阅读和修改