1)三大範式 概念: 在設計數據庫時,需要遵循的一些規範就叫做範式。
(1)1NF: 每一項都是不可分割的原子數據項
學號 姓名 系名 系主任 課程名稱 分數
10010 張無忌 經濟系 張三丰 高等數學 95
10010 張無忌 經濟系 張三丰 大學英語 95
10010 張無忌 經濟系 張三丰 計算機基礎 95
10011 令狐沖 法律系 任我行 法理學 95
10011 令狐沖 法律系 任我行 大學英語 95
10011 令狐沖 法律系 任我行 法律社會學 95
問題:
1.存在非常嚴重的數據冗餘(重複): 姓名、系名、系主任
2.數據添加存在問題,添加新開設的系和系主任時.數據不合法
3.刪除數據也存在問題,張無忌同學畢業了,刪除數據會將系的數據一起刪除
(2)2NF: 在1NF的基礎上,非碼屬性必須完全依賴於候選碼(在1NF基礎上消除非主屬性對主碼的 ‘部分函數依賴’)
幾個概念:
1.函數依賴 A-->B, 如果通過A的屬性(屬性組)的值,可以確定唯一B屬性的值,則稱B依賴於A。 如: 根據學號找到人
2.完全函數依賴:
屬性組: 如: (通過學號 + 課程名稱) --> 分數, 則稱(通過學號,課程名稱)是屬性組.
如果A是一個屬性組,則B屬性組的確定需要依賴於A屬性組中的所有的屬性值
3.部分函數依賴:
如果A是一個屬性組,則B屬性組的確定需要依賴於A屬性組中的某一個的屬性值即可
例如: (學號, 課程名稱) -->姓名 其實通過學號就能確定姓名
4.傳遞函數依賴:
A-->B B --》C
如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值, 在通過B屬性(屬性組),又可以確定唯一C屬性的值
如:學號--》系名--》系主任
5.碼: 如果在一張表中,一個屬性或屬性組,被其它所有屬性所完全依賴,則稱這個屬性(屬性值)爲該表的碼
例如: (學號,課程名稱)
主屬性: 碼屬性組中的所有屬性
非主屬性:出去碼屬性組的屬性
-----選課表-----
學號 課程名稱 分數
10010 高等數學 95
10010 大學英語 95
10010 計算機基礎 95
10011 法理學 95
10011 大學英語 95
10011 法律社會學 95
-----學生表-----
學號 姓名 系名 系主任
10010 張無忌 經濟系 張三丰
10011 令狐沖 法律系 任我行
依然存在2個問題:
2.數據添加存在問題,添加新開設的系和系主任時.數據不合法。 如:新開了計算機系 系主任時殷天正。
3.刪除數據也存在問題,張無忌同學畢業了,刪除數據會將系的數據一起刪除
(3)3NF: 在 2NF的基礎上,任何非主屬性不依賴於其它非主屬性(2NF基礎上消除傳遞依賴項)
學號--》系名--》系主任, 因此系主任傳遞依賴於學號, 3NF要消除這個
-----選課表-----
學號 課程名稱 分數
10010 高等數學 95
10010 大學英語 95
10010 計算機基礎 95
10011 法理學 95
10011 大學英語 95
10011 法律社會學 95
-----學生表-----
學號 姓名 系名
10010 張無忌 經濟系
10011 令狐沖 法律系
-----系表-----
系名 系主任
經濟系 張三丰
法律系 任我行
因此: 3NF中, 3個問題被解決
(4)巴斯-科德範式
(5)4NF
(6)5NF