你真的會玩SQL嗎?三正規化 資料完整性

2021-09-22 19:06:13 字數 2063 閱讀 2991

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

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

你真的會玩sql嗎?和平大使 內連線、外連線

你真的會玩sql嗎?三正規化、資料完整性

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

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

你真的會玩sql嗎?exists和in之間的區別

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

你真的會玩sql嗎?case也瘋狂

你真的會玩sql嗎?表表示式,排名函式

你真的會玩sql嗎?簡單的 資料修改

你真的會玩sql嗎?你所不知道的 資料聚合

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

你真的會玩sql嗎?實用函式方法彙總

你真的會玩sql嗎?玩爆你的資料包表之儲存過程編寫(上)

你真的會玩sql嗎?玩爆你的資料包表之儲存過程編寫(下)

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

三正規化

第一正規化:屬性不可分,不允許存在隱藏字段,屬性保持「原子性」

第三正規化:要求乙個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。

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

第四正規化(4nf):消除多值依賴。

第五正規化(5nf):消除迴圈依賴。

我們設計表結構往往都尊從簡單的三正規化,從其他元素中消除資料冗餘問題, 從特定的表中最小化冗餘意味著擺脫不必要的資料。

先看看目的,消除資料冗餘的影響如下:

物理空間需要儲存的資料減少。

資料變得更有組織。

正規化化允許修改少量的資料(即單記錄)。換言之,乙個表的具體字段記錄更新時,會影響其他引用他的表。

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

資料完整性

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

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

實體完整性:保證每一行都能被由稱為主鍵的屬性來標識

域完整性:保證在效範圍內的值才能儲存到相應列中

使用者定義完整性:由使用者指定的一組規則

實現資料完整性的主要方式是約束

主鍵約束 primary key 確保字段值不重複不為null

唯一約束 unique 確保字段值不重複

外來鍵約束 foreign key 確保字段值必須來自於指定表

檢查約束 check 確保字段值的取值範圍

預設約束 default  給相應字段提供預設值

注:約束即可在創表時建立,也可在已存在的表上新增

練習

若想更深入了解可看一下園友的文章 

你真的了解 「正規化」嗎?

你真的會玩SQL嗎?三正規化 資料完整性

你真的會玩sql嗎?系列目錄 你真的會玩sql嗎?之邏輯查詢處理階段 你真的會玩sql嗎?和平大使 內連線 外連線 你真的會玩sql嗎?三正規化 資料完整性 你真的會玩sql嗎?查詢指定節點及其所有父節點的方法 你真的會玩sql嗎?讓人暈頭轉向的三值邏輯 你真的會玩sql嗎?exists和in之間的...

你真的會玩SQL嗎?簡單的資料修改

你真的會玩sql嗎?系列目錄 你真的會玩sql嗎?之邏輯查詢處理階段 你真的會玩sql嗎?和平大使 內連線 外連線 你真的會玩sql嗎?三正規化 資料完整性 你真的會玩sql嗎?查詢指定節點及其所有父節點的方法 你真的會玩sql嗎?讓人暈頭轉向的三值邏輯 你真的會玩sql嗎?exists和in之間的...

你真的會玩SQL嗎?簡單的資料修改

你真的會玩sql嗎?系列目錄 你真的會玩sql嗎?之邏輯查詢處理階段 你真的會玩sql嗎?和平大使 內連線 外連線 你真的會玩sql嗎?三正規化 資料完整性 你真的會玩sql嗎?查詢指定節點及其所有父節點的方法 你真的會玩sql嗎?讓人暈頭轉向的三值邏輯 你真的會玩sql嗎?exists和in之間的...