软件设计师 - 函数依赖 和 范式
文章目錄
- 1.函數依賴:
- 1.0.前提范例:
- 1.1.函數依賴定義:
- 1.2. 部分依賴
- 1.3. 完全依賴
- 2.范式
- 2.1. 碼、候選碼、主碼
- 2.2.主屬性和非主屬性
- 2.3.第一范式(1NF)
- 2.4.第二范式(2NF)
- 2.5.第三范式(3NF)
- 2.6.BC范式(BCNF)
- 3.函數依賴推導規則(todo,沒看懂)
1.函數依賴:
1.0.前提范例:
教育局管理系統中學生表:
學生表(學生id,身份證號,姓名,性別,學號,學校id,學校名稱)學生id,可以唯一確定一條學生信息;
身份證號,可以唯一確定一條學生信息;
學號+學校id,可以唯一確定一條學生信息(同一學校內的學號是唯一的);
1.1.函數依賴定義:
函數 y = f(m),如果每個x都有唯一y值與之對應,
那么稱:m決定y,或y依賴于m,
寫作:m -> y,畫作:
例如:
1.函數 :y = m2,每個m取值,y都有唯一值與之對應,所以:
m決定 y 或 y 依賴于 m, 記做: m -> y。
2. 對應0.全局例子中:學生id -> 姓名(姓名依賴于學生id),身份證號->姓名
1.2. 部分依賴
對于1.1.函數依賴定義中:單獨一個m,就可以唯一確定y的值,那么用另一個無關變量n和m的組合值,必定也可以唯一確定y的值。
那么稱:(m,n)決定y,或y部分依賴于m,
寫作:(m,n) -> y,畫作:
例如:
1.函數 :y = m2,每個m取值,y都有唯一值與之對應,此時還有另一個函數 z = n2,那么每個唯一的m和n,y也有唯一值與之對應,所以:
(m,n)決定 y 或 y 部分依賴于(m,n), 記做: (m,n) -> y。
2. 對應0.全局例子中:(身份證號,性別) -> 姓名(姓名部分依賴于身份證號和性別)
1.3. 完全依賴
函數 y = f(m,n),如果確定的m和n,都有唯一y值與之對應,
那么稱:(m,n)決定y,或y完全依賴于(m,n),
寫作:(m,n) -> y ,畫作:
例如:
1.函數 :y = m2+n2,單獨一個m或n的值,不能唯一確定y的值,但是(m,n)的組合值可以唯一確定y的值。
(m,n) 決定 y 或 y 完全依賴于 (m,n), 記做: (m,n) -> y。
2. 對應0.全局例子中:(學校id,學號) -> 姓名(姓名部分完全于學校id和學號)。
2.范式
2.1. 碼、候選碼、主碼
碼、候選碼、主碼的說明
對應在數據庫中的每一條數據中:
碼:能唯一確定一條數據的一個屬性或一組屬性(可以包含冗余屬性);
候選碼:能唯一確定一條數據的一個屬性或一組屬性(消除冗余屬性);
主碼:主碼是唯一的,從候選碼中選出一個作為主碼;
2.2.主屬性和非主屬性
主屬性:在候選碼中的屬性;
非主屬性:不在候選碼中的屬性;
2.3.第一范式(1NF)
每個屬性都是不可分割的原子值;
2.4.第二范式(2NF)
消除非主屬性對候選鍵的部分依賴;
學生表(學生id,身份證號,姓名,性別,學號,學校id,學校名稱)問題:學生表中,(學校id,學號)是一個候選鍵,但是 ,學校名稱部份依賴(學校id,學號),所以就不符合2NF。
解決方法:把(學校id,學校名稱)單獨抽取成一個學校表,就符合2NF了。
2.5.第三范式(3NF)
消除非主屬性對候選鍵的傳遞依賴
學生表(學生id,姓名,性別,學校id,學校名稱)問題:學生表中,學生id 是一個候選鍵,有學校姓名 傳遞依賴 學生id,不符合3NF
學生id-> 學校id (學校id 依賴 學生id) 學校id -> 學校名稱 (學校姓名 依賴 學校id) 所以: 學校姓名 傳遞依賴 學生id解決方法:把(學校id,學校名稱)單獨抽取成一個學校表,就符合3NF了。
學生表(學生id,姓名,性別,學校id) 學校表(學校id,學校名稱)2.6.BC范式(BCNF)
消除主屬性對候選鍵的傳遞依賴(列出關系中所有的函數依賴,依賴左側都是候選鍵)
3.函數依賴推導規則(todo,沒看懂)
總結
以上是生活随笔為你收集整理的软件设计师 - 函数依赖 和 范式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MyBatisPlus_更新篇_入门试炼
- 下一篇: 将Github中Fork的代码,克隆到本