【问题标题】:Data consistency between Oracle tablesOracle表之间的数据一致性
【发布时间】:2020-03-28 01:01:24
【问题描述】:

我有一个大表 A,它有 PK (C1, C2, C3) 和许多其他列,为了加快选择速度,使用 PK (C1, C2) 创建了一个较小的表 B。所以我们可以通过连接两个表来在 A 中找到一行来进行选择。

但现在的问题是,如果 B 中的数据损坏导致联合选择什么也不返回,但我们在 A 中仍然有一行。

我的设计是否有问题?如何确保这两个表中的数据一致?

非常感谢。

【问题讨论】:

  • 能否请您发布一个关系示例? 听起来好像表 B 中的所有数据都存在于表 A 中,而您只是将其用于搜索,对吗?表 B 是如何填充的?

标签: oracle database-design relational-database data-consistency


【解决方案1】:

标准方式 - 如果这些表处于主从关系中 - 是创建一个外键约束,如果存在详细信息,它将阻止删除主表。

如果你现在可以修复它,那就去做 - 然后创建约束。

如果不能,则使用INITIALLY DEFERRED DEFERRABLE 选项创建外键约束,以便不检查当前值,但会检查未来的 DML。

最后,尽管某些行已不存在,但要获取数据,请使用外连接

【讨论】:

  • 是的,这两个表是主从关系。我会试试这个解决方案,非常感谢!
【解决方案2】:

“我这个设计有问题吗”

好吧,如果没有关于您的方案的更多详细信息,很难确定,但您可能只需要A(C1, C2) 上的非唯一索引。

虽然我希望看到一些基准测试证明对主键索引的索引范围扫描不能胜任这项工作。尤其是表 B 上的联接似乎正在使用该访问路径。

Oracle 数据库的性能调优是一个理解和处理许多变量的问题。这不仅仅是“在另一个索引上插入”的情况。我们需要了解什么数据库实际上在做什么以及为什么优化器做出了这个选择。因此,请阅读this post on asking Oracle tuning questions,它将让您深入了解如何进行查询优化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 2013-05-09
    • 2022-01-14
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多