【问题标题】:Versioning normalized Data in Oracle在 Oracle 中对规范化数据进行版本控制
【发布时间】: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


    【解决方案1】:

    严格从性能的角度来看,如果您可以在一个语句中完成所有操作,那通常会更好。

    但是一旦你开始以各种方式转换数据,我个人发现通过使用临时表,生成的代码更易于阅读和修改。

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 2013-10-11
      • 2021-09-05
      • 2020-07-31
      • 2016-06-12
      • 2013-06-30
      • 1970-01-01
      • 2016-04-04
      • 2010-10-22
      相关资源
      最近更新 更多