天天看點

《視圖更新與關系資料庫理論》——1.1 可交換性原則

本節書摘來自異步社群出版社《視圖更新與關系資料庫理論》一書中的第1章,第1.1節,作者:【美】c.j. date(達特),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

到目前為止,表s是基表,ls和nls是視圖。現在仔細觀察,你會發現其實我們還可以用另一種方式來看它們,那就是把ls和nls作為基表,而s作為視圖,具體如下所示。

 

為了保證現在這個設計與原先的設計完全等價,我應該聲明并且讓資料庫滿足特定的完整性限制,當然其中應該包括針對city值的一緻性限制,以保證ls中每一個city值都是london,nls中city值都不是london。但是現在我們暫時不考慮這些細節,稍後我會對這些問題做更詳細的解釋。

那麼現在,做出上面這個變化所要表明的内容可以概括為:對基表和視圖的設定是沒有限制的,是可以互換的(至少從正式的角度來看是這樣)。換句話說,對于這個例子,我們至少可以用兩種方式設計資料庫,這兩種方式邏輯上不同,但包含的資訊是等價的。(這裡的等價資訊,是指兩個設計代表了相同的資訊,也就是說對于在一種設計執行的查詢,一定有在邏輯上和它等價的查詢可以在另一種設計上執行。第3章将詳細闡述這個概念。)而“可交換性原則”就是對上面内容的總結。

定義:可交換性原則說明在基表和視圖之間一定不能存在不确定的和不必要的差別。換句話說,在使用者看來,視圖與基表應該看起來感覺是很像的。

關于這個原則,下面幾點值得注意。

正如我所闡述的,視圖與基表一樣,受完整性限制的限制(我們通常認為完整性限制是專門應用于基表的,但是可交換性原則證明這種想法有失偏頗)。

特别要說的是,視圖是有鍵的(我确實應該在視圖的定義中包括鍵的聲明。但可惜的是,sql并不允許這樣聲明)[2]。同時,視圖也可能有外鍵,而外鍵也可能引用自視圖。

很多sql産品和sql标準,提供了某種叫作row id的特性(在标準中,此特性被稱為ref類型和引用值)。如果這個特性隻對基表有效,而對視圖無效(實際上,這種情況非常有可能發生),那就明顯違反了可交換性原則。

最後,也許最重要的是,我們必須能夠更新視圖,因為如果不能實作更新,那就等于“可交換性原則”内部自相沖突了。