數據庫的范式
1,構造數據庫必須遵循一定的規則,這種規則就是范式.
2,目前關系數據庫有6種范式,一般情況下,只滿足第三范式即可.
第一范式:原子性
1,第一范式是數據庫的基本要求,不滿足這一點就不是關系數據庫.
2,數據表的每一列都是不可分割的基本數據項,同一列中不能有多個值,也不能存在重復的屬性.
image.png
第二范式:唯一性
1,數據表中的每條記錄必須是唯一的.為了實現區分,通常要為表加上一個列用來存儲唯一標識,這個唯一屬性列被稱作主鍵列
image.png
第三范式:關聯性 (滿足第三范式意味著同時滿足了第一和第二范式)
1,每列都與主鍵有直接關系,不存在傳遞依賴.
image.png
2,依照第三范式,數據可以拆分保存到不同的數據表,彼此保持關聯.
3,第三范式很重要.
image.png
字段約束
image.png
不推薦使用外鍵約束.
主鍵約束
1,主鍵約束要求字段的值再全表必須唯一,而且不能為NULL值
2,建議主鍵一定要使用數字類型,因為數字的檢索速度會非常快.
3,如果主鍵是數字類型,還可以設置自動增長
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
......
);
非空約束
1,非空約束要求字段的值不能為NULL值
2,NULL值是沒有值,而不是""空字符串
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
married BOOLEAN NOT NULL DEFAULT FALSE
);
唯一約束
1,唯一約束要求字段值如果不為NULL,那么再全表必須唯一
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
......
tel CHAR(11) NOT NULL UNIQUE
);
//強烈建議創建表時給表名前加 t_ 和其他虛擬表區分
外鍵約束
1,外鍵約束用來保證關聯數據的邏輯關系
image.png
如果刪掉部門表中的10部門,員工表中的陳浩就不符合邏輯了.
為了確保數據表中的關聯數據的邏輯關系,引入外鍵約束.
員工表時依賴部門表,所以
外鍵約束的定義是寫在子表上的
CREATE TABLE t_dept(
deptno INT UNSIGNED PRIMARY KEY,
dname VARCHAR(20) NOT NULL UNIQUE,
tel CHAR(4) UNIQUE
);
CREATE TABLE t_emp(
empno INT UNSIGNED PRIMARY KEY,
ename VARCHAR(20) NOT NULL,
sex ENUM("男","女") NOT NULL,
deptno INT UNSIGNED,
hiredate DATE NOT NULL,
FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
);
外鍵約束的閉環問題
1,如果形成外鍵閉環,我們將無法刪除任何一張表的記錄
image.png