Sql-Server

第6範式,重組查詢,高效實現

  • June 14, 2018

我找到了 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 語句來處理所有這些細節。

引用自:https://dba.stackexchange.com/questions/8994