一、三大范式:
什么是范式:簡言之就是,數據庫設計對數據的存儲性能,還有開發人員對數據的操作都有莫大的關系。所以建立科學的,規范的的數據庫是需要滿足一些規范的來優化數據數據存儲方式。在關系型數據庫中這些規范就可以稱為范式。范式是關系數據庫理論的基礎,也是我們在設計數據庫結構過程中所要遵循的規則和指導方法,以下就是對這三個范式的基本介紹:
第一范式(1NF):
1、數據表中的每一列(字段),必須是不可拆分的最小單元,也就是確保每一列的原子性。滿足第一范式是關系模式規范化的最低要求,否則,將有很多基本操作在這樣的關系模式中實現不了。
如果需求知道那個省那個市並按其分類,那么顯然第一個表格是不容易滿足需求的,也不符合第一范式。
2、兩列的屬性相近或相似或一樣,盡量合並屬性一樣的列,確保不產生冗余數據。
顯然第一個表結構不但不能滿足足夠多物品的要求,還會在物品少時產生冗余。也是不符合第一范式的。
第二范式(2NF):
滿足1NF后要求表中的所有列,每一行的數據只能與其中一列相關,即一行數據只做一件事。只要數據列中出現數據重復,就要把表拆分開來。
一個人同時訂幾個房間,就會出來一個訂單號多條數據,這樣子聯系人都是重復的,就會造成數據冗余。我們應該把他拆開來。
這樣便實現啦一條數據做一件事,不摻雜復雜的關系邏輯。同時對表數據的更新維護也更易操作。
第三范式(3NF):
滿足2NF后,要求:表中的每一列都要與主鍵直接相關,而不是間接相關(表中的每一列只能依賴於主鍵)。
數據不能存在傳遞關系,即沒個屬性都跟主鍵有直接關系而不是間接關系。像:a-->b-->c 屬性之間含有這樣的關系,是不符合第三范式的。
注意事項:
1.第二范式與第三范式的本質區別:在於有沒有分出兩張表。
第二范式是說一張表中包含了多種不同實體的屬性,那么必須要分成多張表,第三范式是要求已經分好了多張表的話,一張表中只能有另一張標的ID,而不能有其他任何信息,(其他任何信息,一律用主鍵在另一張表中查詢)。
2.必須先滿足第一范式才能滿足第二范式,必須同時滿足第一第二范式才能滿足第三范式。
三大范式只是一般設計數據庫的基本理念,可以建立冗余較小、結構合理的數據庫。如果有特殊情況,當然要特殊對待,數據庫設計最重要的是看需求跟性能,需求>性能>表結構。所以不能一味的去追求范式建立數據庫。
二、五大約束:
數據庫中的五大約束包括:
1.主鍵約束(Primay Key Coustraint) 唯一性,非空性;
2.唯一約束 (Unique Counstraint)唯一性,可以空,但只能有一個;
3.默認約束 (Default Counstraint) 該數據的默認值;
4.外鍵約束 (Foreign Key Counstraint) 需要建立兩表間的關系;
5.非空約束(Not Null Counstraint):設置非空約束,該字段不能為空。
五大約束的語法示例:
1. 添加主鍵約束
Alter table 表名 add Constraint 主鍵名 primary key(字段)
2. 添加唯一約束
Alter table 表名 add Constraint 約束名 unique(字段)
3. 添加默認約束
Alter table 表名 add Constraint 約束名 default(默認內容) for 字段名
4. 添加檢查約束
Alter table 表名 add Constraint 約束名 check (字段表達)
5. 添加外鍵約束
Alter table 表名 add Constraint 約束名 foreign key(字段) references 表名(字段名)
詳細介紹:
(1)[外鍵約束 (Foreign Key Counstraint) ]
1.設置外鍵的注意事項:
①:只有INNODB的數據庫引擎支持外鍵,修改my.ini文件設置default-storage-engine=INNODB;
②:外鍵與參照列的數據類型必須相同。(數值型要求長度和無符號都相同,字符串要求類型相同,長度可以不同);
③:設置外鍵的字段必須要有索引,如果沒有索引,設置外鍵時會自動生成一個索引;
2.設置外鍵的語法:
[CONSTRAINT 外鍵名] FOREIGN KEY(外鍵字段) REFERENCES 參照表(參照字段) [ON DELETE SET NULL ON UPDATE CASCADE] -- 設置操作完整。
3、外鍵約束的參照操作:
當對參照表的參照字段進行刪除或更新時,外鍵表中的外鍵如何應對。
參照操作可選值:
RESTRICT: 拒絕對參照字段的刪除或修改(默認);
NO ACTION:與RESTRICT相同,但這個指令只在MySql生效;
CASCADE: 刪除或更新參照表的參照字段時,外鍵表的記錄同步刪除或更新;
SET NULL: 刪除刪除或更新參照表的參照字段時,外鍵表的外鍵設為NULL (此時外鍵不能設置為NOT NULL)。
(2)[主鍵約束](Primay Key Coustraint)
1.主鍵的注意事項:主鍵默認非空,默認唯一性約束,只有主鍵可以設置自動增長(主鍵不一定自增,自增一定是主鍵)。
2.設置主鍵的方式:
①:在定義列時設置:id INT UNSIGNED PRIMARY KEY。
②:在列定義完成后設置:PRIMARY KEY(id)。