MySQL學習筆記 十一 資料庫設計的三大正規化

2021-09-26 10:56:39 字數 1112 閱讀 2045

為了建立冗餘較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。

第一正規化是最基本的正規化。如果資料庫表中的所有字段值都是不可分解的原子值,就說明該資料庫表滿足了第一正規化。

比如某些資料庫系統中需要用到「位址」這個屬性,本來直接將「位址」屬性設計成乙個資料庫表的字段就行。但是如果系統經常會訪問「位址」屬性中的「城市」部分,那麼就非要將「位址」這個屬性重新拆分為省份、城市、詳細位址等多個部分進行儲存,這樣在對位址中某一部分操作的時候將非常方便。

第二正規化在第一正規化的基礎之上更進一層。第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在乙個資料庫表中,乙個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中。可以簡單理解為: 乙個資料表中至少要有乙個主鍵

比如要設計乙個訂單資訊表,因為訂單中可能會有多種商品,所以要將訂單編號和商品編號作為資料庫表的聯合主鍵,如下表所示。

而如果把這個訂單資訊表進行拆分,把商品資訊分離到另乙個表中,把訂單專案表也分離到另乙個表中,就非常完美了。如下所示。

這樣設計,在很大程度上減小了資料庫的冗餘。如果要獲取訂單的商品資訊,使用商品編號到商品資訊表中查詢即可。

第三正規化需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關。可以簡單理解為: 乙個資料表中有且只有乙個主鍵

比如在設計乙個訂單資料表的時候,可以將客戶編號作為乙個外來鍵和訂單表建立相應的關係。而不可以在訂單表中新增關於客戶其它資訊(比如姓名、所屬公司等)的字段。如下面這兩個表所示的設計就是乙個滿足第三正規化的資料庫表。

十一 資料庫和python

import pymysql 01 連線資料庫 引數1 mysql主機名 192.168.245.1 引數2 使用者名稱 引數3 密碼 引數4 連線資料庫名 db pymysql.connect localhost root root a 02 建立乙個cursor物件 cursor db.curs...

MySQL學習筆記(一)資料庫的操作

語法格式 create database if not exists 資料庫名 default character set 字符集名 default collate 校對規則名 資料庫名 建立資料庫的名稱。mysql 的資料儲存區將以目錄方式表示 mysql 資料庫,因此資料庫名稱必須符合作業系統的...

MYSQL資料庫學習筆記十一 讀寫鎖

1.鎖介紹參考部落格 按照鎖的粒度來說,mysql主要包含三種型別 級別 的鎖定機制 全域性鎖 鎖的是整個database。由mysql的sql layer層實現的 表級鎖 鎖的是某個table。由mysql的sql layer層實現的 show open tables 行級鎖 鎖的是某行資料,也可...