數據庫相關筆記

關係型數據庫設計

六大範式

第一範式(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):設置非空約束,該字段不能爲空。
發佈了27 篇原創文章 · 獲贊 32 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章