關係型數據庫設計
六大範式
第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、
第四範式(4NF)和第五範式(5NF,又稱完美範式)。
第一範式
數據庫表的每一列都是不可分割的原子數據項,而不是數組、集合。即實體中的某個屬性有多值
時,必須拆分爲不同的屬性。在符合第一範式(1NF)表中的每個域值只能是實體的一個屬性或一個
屬性的一部分。簡而言之,第一範式就是無重複的域。
第二範式
建立在第一範式的基礎上,第二範式要求數據庫表中的每個實例或記錄必需可以被唯一的區分
選取一個能區分每個實體的屬性或屬性組作爲實體的唯一標識,例如在員工表中的身份證號碼即可實
現每個一員工的區分,該身份證號碼即爲候選鍵,任何一個候選鍵都可以被選作主鍵。(該主鍵的添
加是在ER設計時添加,不是建庫時隨意添加)
第二範式要求屬性完全依賴於主關鍵字,而不能存在任何一列和主鍵沒有關係
第三範式
第三範式(3NF)是第二範式(2NF)的一個子集,即滿足第三範式(3NF)必須滿足第二範式
(2NF)。簡而言之,第三範式(3NF)要求一個關係中不包含已在其它關係已包含的非主關鍵字信
息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信
息。那麼在員工信息表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的信息再加入
員工信息表中。
第三範式要求表中的每一列都要與主鍵直接關聯,而不是間接關聯
什麼是主鍵
在一張表中,用來唯一標識一條記錄的字段集,叫做主關鍵字或者主關鍵碼,簡稱主鍵(或主碼),
這裏說"字段集"是因爲主鍵可能用一個字段或者多個字段來表示
什麼是外鍵
一張表的非主屬性是另一個表的主屬性就是這個表的外鍵。這裏有兩個分別爲: 學生表(學
號, 姓名, 性別,專業編號),專業信息表(專業編號,專業名稱,專業備註信息)。學生表
中主鍵是學號,專業信息表中主鍵是專業編號。學生表中的非主屬性專業編號恰好是專業信息表中的
主鍵。我們就稱這個專業編號是學生表的外鍵。像這樣,一個表的非主屬性是另一個表的主屬性,該
非主屬性就是外鍵。
父表和子表
有兩張表,一張表中的外鍵是另一張表的主鍵時,外鍵的那張表稱之爲字表,另一張表就是父
表,以上面的學生表和專業信息表爲例,學生表的外鍵專業編號是專業信息表的主鍵,那麼學生表
是字表,專業信息表是父表。
應用實例
學生系統的設計
確定要設計的內容
- 學生有那些基本信息?
- 學生選了那些課,成績是什麼?
- 每個課的學分是多少?
- 學生屬於那個系,系的基本信息是什麼?
首先先把所有屬性放在一張表中,看有什麼結果
(學號,學生姓名、年齡、性別、課程、課程學分、系別、學科成績,系辦地址、系辦電話)
(學號, 課程名稱) → (姓名, 年齡, 成績, 學分)
不符合第二範式的要求
數據冗餘
數據修改困難
解決:
設計四張表:
- 學生信息表(學號,姓名,年齡,性別,系別);
- 課程表 (課程名稱,學分)
- 選課關係表 (學號,課程名稱,成績)
- 系別關系表(系別,系辦地址、系辦電話)。
數據庫約束
五大約束:
- 主鍵約束(Primay Key Coustraint) 唯一性,非空性;
- 唯一約束 (Unique Counstraint)唯一性,可以空,但只能有一個
- 默認約束 (Default Counstraint) 該數據的默認值;
- 外鍵約束 (Foreign Key Counstraint) 需要建立兩表間的關係;
- 非空約束(Not Null Counstraint):設置非空約束,該字段不能爲空。