你真的會玩SQL嗎?三范式、數據完整性


 

你真的會玩SQL嗎?系列目錄

你真的會玩SQL嗎?之邏輯查詢處理階段

你真的會玩SQL嗎?和平大使 內連接、外連接

你真的會玩SQL嗎?三范式、數據完整性

你真的會玩SQL嗎?查詢指定節點及其所有父節點的方法

你真的會玩SQL嗎?讓人暈頭轉向的三值邏輯

你真的會玩SQL嗎?EXISTS和IN之間的區別

你真的會玩SQL嗎?無處不在的子查詢

你真的會玩SQL嗎?Case也瘋狂

你真的會玩SQL嗎?表表達式,排名函數

你真的會玩SQL嗎?簡單的 數據修改

你真的會玩SQL嗎?你所不知道的 數據聚合

你真的會玩SQL嗎?透視轉換的藝術

你真的會玩SQL嗎?冷落的Top和Apply

你真的會玩SQL嗎?實用函數方法匯總

你真的會玩SQL嗎?玩爆你的數據報表之存儲過程編寫(上)

你真的會玩SQL嗎?玩爆你的數據報表之存儲過程編寫(下)

 

每次上新功能時都需要添加新表,這時就要涉及到表結構的設計,那就要提到三范式,對於三范式教科書上說得很繞口,那簡單點的呢?

   三范式

第一范式:屬性不可分,不允許存在隱藏字段,屬性保持“原子性”

第二范式:要有主鍵。為實現區分通常需要為表加上一個列,以存儲各個實例的唯一標識。

第三范式:要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。

 

正規化范式(BCDF):所有表中的決定因素必須是一個候選鍵,如果只有一個候選鍵,那么就和第三范式是一樣的。

第四范式(4NF):消除多值依賴。

第五范式(5NF):消除循環依賴。

我們設計表結構往往都尊從簡單的三范式,從其他元素中消除數據冗余問題, 從特定的表中最小化冗余意味着擺脫不必要的數據。

先看看目的,消除數據冗余的影響如下:

物理空間需要存儲的數據減少。

數據變得更有組織。

范式化允許修改少量的數據(即單記錄)。換言之,一個表的具體字段記錄更新時,會影響其他引用他的表。

但是,設計表遵從范式越高則存在“過度設計“的問題,會增加多表間的查詢開銷,我們只能適度的設計,適度的反范式。如上圖中3范式,若就想把樓棟一起查詢出來,那從設計上可以分開,另用一個視圖將樓棟名稱一起查詢出來即可。

 

數據完整性

數據庫中的數據是從外界輸入的,而數據的輸入由於種種原因,會發生輸入無效或錯誤信息。保證輸入的數據符合規定,成為了數據庫系統,尤其是多用戶的關系數據庫系統首要關注的問題。數據完整性因此而提出。

 

      數據完整性保證了在數據庫中存儲數據的一致性和正確性。

  1. 實體完整性:保證每一行都能被由稱為主鍵的屬性來標識
  2. 域完整性:保證在效范圍內的值才能存儲到相應列中
  3. 引用完整性:確保外鍵的值必須與相關的主鍵相匹配,禁止在從表中插入包含主表中不存在的關鍵字的數據行;
  4. 用戶定義完整性:由用戶指定的一組規則

 

   實現數據完整性的主要方式是約束
  1. 主鍵約束 primary key 確保字段值不重復不為NULL
  2. 唯一約束 unique 確保字段值不重復
  3. 外鍵約束 foreign key 確保字段值必須來自於指定表
  4. 檢查約束 check 確保字段值的取值范圍
  5. 缺省約束 default  給相應字段提供默認值
  6. 注:約束即可在創表時創建,也可在已存在的表上添加

 

練習

      若想更深入了解可看一下園友的文章  你真的了解 “范式”嗎?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM