面試官:你這簡歷上寫著熟悉資料庫設計,那你知道資料庫一共有幾種正規化嗎?目前關聯式資料庫有六種正規化:
最常接觸到的是前三個正規化
面試官:不錯,還知道第五第六正規化,那你能說下正規化具體是用來幹嘛的嗎?我們在設計關聯式資料庫時,要遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小,簡單來說就是規範資料庫的設計
面試官:嗯,那你來具體說下前三大正規化分別是什麼?帶上例子解釋 一下第一正規化(1nf)
是對屬性的 原子性 的要求,要求屬性具有原子性,不可再分解;
如這個user表就不符合第一正規化,因為region列不具有原子性,能拆分成省份、市和具體位址
正確做法
第二正規化(2nf)
2nf是對記錄的 唯一性 ,要求記錄有惟一標識,即實體的惟一性,即不存在部分依賴;
這個表明顯說明了兩個事務:學生資訊, 課程資訊;
由於非主鍵字段必須依賴主鍵,這裡學分依賴課程號,名字依賴與學號,所以不符合二正規化。
這麼做可能會存在問題:
正確做法:
第三正規化(3nf,又稱巴斯-科德正規化(bcnf))
3nf是對字段的 冗餘性 ,要求任何字段不能由其他字段派生出來,它要求字段沒有冗餘,即不存在傳遞依賴;
因為存在依賴傳遞: (學號) → (姓名)→(所在學校) → (學校**) 。
可能會存在問題:
正確做法:
面試官:回答的不錯,那你平時設計的時候都遵守三大正規化嗎?不遵守的話什麼時候會去突破正規化?沒有規矩不成方圓,一般下我會只遵守第三正規化(3nf)。
沒有冗餘的資料庫設計可以做到三大正規化都遵守。但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高執行效率,就必須降低正規化標準,適當保留冗餘資料。
具體做法是:在概念資料模型設計時遵守第三正規化,降低正規化標準的工作放到物理資料模型設計時考慮。
降低正規化就是增加字段,允許冗餘,達到以空間換時間的目的。
面試官:好,那你最後再說下,遵守正規化化設計和不遵守正規化化設計,也就是反正規化化設計的優缺點?正規化化設計的優點在於:
缺點在於:
反正規化化優點在於:
缺點:存在資料冗餘及資料維護的異常
對資料的修改需要更多的成本
mysql五大正規化 MySQL五大正規化
第一正規化 1nf 資料表的每一列都要保持它的原子特性,也就是列不能再被分割。這張表就不符合第一正規化規定的原子性,不符合關係型資料庫的基本要求,在關係型資料庫中建立這個表的操作就不能成功。不得不將資料表設計為如下形式。第二正規化 2nf 概率 屬性必須完全依賴於主鍵。下滿這張表不符合第二正規化的要...
mysql三大特性 三正規化 五大約束
1.資料庫的三大特性 實體 表 屬性 表中的資料 字段 關係 表與表之間的關係 2.資料庫設計三大正規化 a 確保每列保持原子性 即資料庫表中的所有字段值是不可分解的原子值 c 確保每列都和主鍵直接相關,而不是間接相關 在乙個資料庫表中儲存的資料只能與主鍵相關 消除傳遞依賴 間接 比如在設計乙個訂單...
面試之「資料庫三大正規化」
為了能夠更好地理解資料庫的三大正規化,對資料庫中基本概念進行講解。資料庫的設計正規化是資料庫設計 所需要滿足的規範,滿足這些規範的資料庫是簡潔的 明晰的。同時不會發生插入 insert 刪除 delete 和更新 update 異常操作。物件 object 具有相同性質 遵循相同規則的一類事物的抽象...