java面試題之三大範式

面試失敗第二次

三大範式

 

第一範式(1NF):數據表中的每一列(每個字段)必須是不可拆分的最小單元,也就是確保每一列的原子性;

如:一張表裏的地址、電話。

 

第二範式(2NF):滿足1NF後,要求表中的所有列,都必須依賴於主鍵,而不能有任何一列與主鍵沒有關係,也就是說一個表只描述一件事情;

如:訂單表只描述訂單相關的信息,所以所有字段都必須與訂單id相關;產品表只描述產品相關的信息,所以所有字段都必須與產品id相關;因此不能在一張表中同時出現訂單信息與產品信息;

 

第三範式(3NF):必須先滿足第二範式(2NF),要求:表中的每一列只與主鍵直接相關而不是間接相關,(表中的每一列只能依賴於主鍵);

例如:訂單表中需要有客戶相關信息,在分離出客戶表之後,訂單表中只需要有一個用戶id即可,而不能有其他的客戶信息。因爲其他的客戶信息直接關聯於用戶id,而不是直接與訂單id直接相關。

 

2020.5.27號新的通俗理解

第二範式:在第一範式的基礎上,要求非主屬性對主屬性是完全函數依賴,即不存在部分函數依賴。

舉個例子:學生成績表這樣一個關係sc(sno,sname,cno,cname,grade),對於這樣一個關係是不滿足第二範式的,怎麼說,首先分析出主屬性,即學號sno和課程號cno,其他屬性均爲非主屬性,再看學生姓名sname這個非主屬性,很顯然只依賴於sno就可以確定,不依賴cno而確定,所以這樣一個關係存在部分依賴,故不滿足第二範式。

 

第三範式(3NF)
3NF在2NF的基礎之上,消除了非主屬性對於碼的傳遞函數依賴。也就是說, 如果存在非主屬性對於碼的傳遞函數依賴,則不符合3NF的要求。

對於上圖,主碼爲(學號,課名),主屬性爲學號課名,非主屬性只有一個,爲分數,學號不能直接找到分數,課名也不能直接找到分數,不可能存在傳遞函數依賴,所以選課表的設計,符合3NF的要求。

 

對於學生表,主碼爲學號,主屬性爲學號,非主屬性爲姓名系名系主任。因爲 學號 → 系名,同時系名 → 系主任,所以存在非主屬性系主任對於碼學號的傳遞函數依賴,所以學生表的設計,不符合3NF的要求。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章