2012-11-08 26 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嗎?如果您需要對更新進行更多控制,請將其重命名並使用替代觸發器替換其視圖。