共計(jì) 899 個(gè)字符,預(yù)計(jì)需要花費(fèi) 3 分鐘才能閱讀完成。
自動(dòng)寫代碼機(jī)器人,免費(fèi)開通
這篇文章主要介紹了數(shù)據(jù)庫三范式和反范式是什么,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
在日常開發(fā)過程中,我們需要對 Mysql 數(shù)據(jù)庫進(jìn)行操作,這就涉及到表的構(gòu)建,如何創(chuàng)建一個(gè)結(jié)構(gòu)良好的數(shù)據(jù)庫表,就需要遵循以下 3 個(gè)數(shù)據(jù)庫范式。
1. 第一范式
確保數(shù)據(jù)表中每列(字段)的原子性。
如果數(shù)據(jù)表中每個(gè)字段都是不可再分的最小數(shù)據(jù)單元,則滿足第一范式。
例如:user 用戶表,包含字段 id,username,password
2. 第二范式
在第一范式的基礎(chǔ)上更進(jìn)一步,目標(biāo)是確保表中的每列都和主鍵相關(guān)。
如果一個(gè)關(guān)系滿足第一范式,并且除了主鍵之外的其他列,都依賴于該主鍵,則滿足第二范式。
例如:一個(gè)用戶只有一種角色,而一個(gè)角色對應(yīng)多個(gè)用戶。則可以按如下方式建立數(shù)據(jù)表關(guān)系,使其滿足第二范式。
user 用戶表,字段 id,username,password,role_id
role 角色表,字段 id,name
用戶表通過角色 id(role_id)來關(guān)聯(lián)角色表
3. 第三范式
在第二范式的基礎(chǔ)上更進(jìn)一步,目標(biāo)是確保表中的列都和主鍵直接相關(guān),而不是間接相關(guān)。
例如:一個(gè)用戶可以對應(yīng)多個(gè)角色,一個(gè)角色也可以對應(yīng)多個(gè)用戶。則可以按如下方式建立數(shù)據(jù)表關(guān)系,使其滿足第三范式。
user 用戶表,字段 id,username,password
role 角色表,字段 id,name
user_role 用戶 - 角色中間表,id,user_id,role_id
像這樣,通過第三張表(中間表)來建立用戶表和角色表之間的關(guān)系,同時(shí)又符合范式化的原則,就可以稱為第三范式。
4. 反范式化
反范式化指的是通過增加冗余或重復(fù)的數(shù)據(jù)來提高數(shù)據(jù)庫的讀性能。
例如:在上例中的 user_role 用戶 - 角色中間表增加字段 role_name。
反范式化可以減少關(guān)聯(lián)查詢時(shí),join 表的次數(shù)。
感謝你能夠認(rèn)真閱讀完這篇文章,希望丸趣 TV 小編分享的“數(shù)據(jù)庫三范式和反范式是什么”這篇文章對大家有幫助,同時(shí)也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
向 AI 問一下細(xì)節(jié)