Sql-Server
第6範式,重組查詢,高效實現
我找到了 Hugh Darwen 為避免我的數據庫中出現空值而寫的這篇論文:連結,它描述瞭如何以第 6 範式實現數據庫,這樣你就可以避免空值。該邏輯在語言教程 D 中進行了描述。我了解如何將所有這些邏輯轉換為 SQL Server。但在最後他展示了這在目前的數據庫管理系統中實現得有多好,然後我看到這部分我需要實現:
- 重組查詢:可以完成但可能執行得非常糟糕。可能最好將 PERS_INFO 儲存為一個單獨的表,以便分解產生的表可以作為映射來實現。但是目前的技術並沒有將物理儲存與邏輯設計完全分離。也許是下一代軟體工程師需要解決的問題?
它建議將 PERS_INFO 作為單個表儲存在幕後,但這到底意味著什麼?我將如何在 SQL Server 中實現它?
可能最好將 PERS_INFO 儲存為一個單獨的表,以便分解產生的表可以作為映射來實現。但是目前的技術並沒有將物理儲存與邏輯設計完全分離。
他說的是 dbms 將其儲存為單個表,而不是您將其儲存為單個表。
關係模型本身並沒有說明物理儲存。它只要求“使用者將數據庫視為表……在物理層面上,事實上,系統可以自由地以任何牠喜歡的方式儲存數據……” (數據庫系統簡介,第 7 版,CJ 日期,第 61 頁)
所以 Darwen 是說如果數據庫設計者聲明了一組 6NF 表,以及它們的
- 候選鍵,
- 分佈式密鑰,
- 外鍵,
- 外分佈式密鑰,
- 等等,
那麼 dbms 就可以自由使用了
- 將該組 6NF 表實現為 SQL 表空間中的單個表,
- 對使用者隱藏該單表實現,並且
- 向使用者公開一組與數據庫設計者聲明的 6NF 表無法區分的可更新視圖。
說了這麼多,您也許可以通過在封面頂部創建一個表(可以這麼說)來解決缺少 dbms 支持的問題,並創建一組與您的 6NF 設計無法區分的可更新視圖。撤銷對單個表的權限,並要求所有使用者僅使用可更新的視圖。您不能做的是讓 dbms 僅根據一系列邏輯正確的 6NF CREATE TABLE 語句來處理所有這些細節。