Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle中规范化数据的版本控制_Oracle_Database Design_Triggers_Oracle11g_Normalization - Fatal编程技术网

Oracle中规范化数据的版本控制

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

我试图找到一种好方法来检查通过批量加载(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中的解决方案。我已经看过了,我想出了两个可能的解决方案

解决方案1: 使用临时表存储大容量加载,并在加载后运行存储过程进行检查

解决方案2: 在
TableA
上使用
MERGE
子句,将新记录添加到
tableaa
或在
TableAtoBulkLoadName
中创建新的交叉点记录(如果记录已存在)

现在我的问题是,所有的背景信息都在那里,这些方法的优点和缺点是什么?这种正常化正常吗?有做这类事情的标准方法吗


谢谢

严格地说,从性能的角度来看,如果你能在一句话中做到一切,那通常会更好

但一旦您开始以各种方式转换数据,我个人就会发现,通过使用暂存表,生成的代码更易于阅读和修改