2012-11-08 30 views
2

我正在处理的应用程序有一个遗留问题,其中创建了2个表ADULT和CHILD在oracle 11g dB中。 这导致了许多相关的表都有ADULT字段和CHILD没有FK应用。 这个错误发生在糟糕的发展已经将关系映射到错误的领域。使用物化视图来修复错误并减少代码

我们的技术架构师计划将ADULT和CHILD表合并到新的ADULT_CHILD表中,并创建物化视图来代替表。该计划还将创建一个新的id值,并替换所有关联表中的I值,因此即使plsql/apex代码映射到错误的字段,数据映射仍然是正确的。

这个解决方案背后的推理它并不要求我们改变任何其他代码。

我的看法是这是一个骗局,但我更多的Java/.NET面向对象。

我可以用什么论据来说服建筑师这是错误的,而不是真正的解决方案。我担心我们正在创建更复杂的解决方案,并且性能将成为问题。

感谢任何指针

+0

你们两个人中的一个在你对“物化视图”的理解上是错误的 - 它们只是给定时间的数据快照。因此,除非您打算持续更新它们,否则主表上的第一次更新后,它们中的数据将不正确。你可以使用普通的观点 - 我认为没有理由不这样做。 –

+0

该示例看起来像是在更新源表时更新MV。我应该关心表现吗? – aurawibbler

+0

采取为备份/复制/快照而设计的某些东西,并试图使用它(困难)而不是标准视图的意义何在。针对标准“视图”的争论是什么?更新时间不会比尝试复制更新的数据更差,如果您在主表上需要索引,查询时间再次不会更糟。那么,为什么不呢? –

回答

1

虽然它可能是一个所需的解决方案,可能也创造了新的问题。如果您确实需要使用随时更新的MV,则需要进行提交刷新,并且这反过来会使所有更新顺序进行。意味着写入它的所有进程都等待更新表提交的进程。不是,表格,不是行。

因此谨慎的做法是用实际负载测试方法。为什么它必须成为一张桌子?他们不能分开,添加FK吗?如果您需要对更新进行更多控制,请将其重命名并使用替代触发器替换其视图。