2010-06-10 49 views
4

我正在研究Mysql中直觀小型數據庫的數據庫佈局。 我們希望模塊化這個系統,以便爲我們要做的不同實現提供更多的靈活性。現在,想法是在數據庫中有一個模塊(簡單而言,一組表之間有約束)通過視圖將其數據傳遞到下一個模塊。通過這種方式,一個模塊中的更改不會影響其他模塊,因爲我們可以確保在任何時候存在正確的數據,儘管表格的基礎結構可能不同。將視圖用作數據庫中模塊之間的數據接口

處理數據庫的應用程序的結構同樣會被模塊化。

這是有時做到的事情嗎? 在技術方面,據我所知,視圖不能有主鍵 - 那麼我怎麼會這樣看待? 應考慮哪些其他問題?

+0

儘管從另一個角度來看,我認爲這是同一個主題。我自己並不關心性能(還沒有...) http://www.mysqlperformanceblog.com/2007/08/12/mysql-view-as-performance-troublemaker/ – Stefan 2010-06-10 19:28:48

回答

2

這是有時候做的事嗎?

是的,視圖通常用於將事物從數據模型中隔離出來。

在技術方面,據我所知,視圖不能有主鍵 - 那麼我將如何解決這種觀點?

MySQL不支持物化視圖。非物化視圖只是準備好的SQL語句 - 它們不存在於數據模型中,性能最終基於底層表和查詢優化上的內容。也就是說,不建議分層視圖(創建一個從另一個視圖中選擇的視圖) - 它很脆弱,而且存在很大的風險,性能會降低,因爲有人希望簡化查詢優化。

+0

「這就是說,分層視圖(創建不推薦使用另一種方法) - 這種方法很脆弱,而且由於有人希望簡化查詢優化,所以性能會下降的風險很大。「如果我可以單獨爲此發言,我會讓你百萬次滿意。我不得不與一個這樣做的系統合作,它幾乎讓我們失去了一個數百萬美元的客戶,因爲性能非常糟糕。稍後這種垃圾也不容易修復。 – HLGEM 2010-06-10 20:09:40

+0

非常感謝您的回答。也許我可以澄清問題的最後一部分:我並不是暗示層視圖,但希望有一個與視圖中的數據相關的表(通過外鍵)...只是我不知道什麼關聯,因爲視圖沒有主鍵。 我可以在視圖中構建一個'手動'我想如果這是一種方式去結合一些價值觀? – Stefan 2010-06-15 20:48:50

+0

@Stefan:主鍵是一個約束,你不能應用到非物化視圖。重要的是視圖中有列可以在JOIN子句中引用到相關表中以獲取相關數據。 – 2010-06-15 21:10:04

0

這是一個有效的辦法,但你當然應該要小心:

  • 確保您的查詢與分析查詢計劃的表現非常行之有效的。這些視圖將使用底層表的索引,但不良執行計劃的可能性更高。

  • 確保存在足夠的視圖來覆蓋所有需要的信息。