數(shù)據(jù)庫設(shè)計當(dāng)中三范式是經(jīng)常遇到的
1.第一范式
第一范式(1NF)所謂第一范式(1NF)是指數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個值筛谚,即實(shí)體中的某個屬性不能有多個值或者不能有重復(fù)的屬性。如果出現(xiàn)重復(fù)的屬性尊沸,就可能需要定義一個新的實(shí)體谤祖,新的實(shí)體由重復(fù)的屬性構(gòu)成兄世,新實(shí)體與原實(shí)體之間為一對多關(guān)系敬拓。在第一范式(1NF)中表的每一行只包含一個實(shí)例的信息邻薯。
在任何一個關(guān)系數(shù)據(jù)庫中,第一范式(1NF)是對關(guān)系模式的基本要求乘凸,不滿足第一范式(1NF)的數(shù)據(jù)庫就不是關(guān)系數(shù)據(jù)庫厕诡。
確保數(shù)據(jù)表中每列(字段)的原子性。列不可分营勤。
如果數(shù)據(jù)表中每個字段都是不可再分的最小數(shù)據(jù)單元木人,則滿足第一范式信柿。
例如:user用戶表冀偶,包含字段id,username,password
2. 第二范式(依賴性)
第二范式(2NF)是在第一范式(1NF)的基礎(chǔ)上建立起來的醒第,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數(shù)據(jù)庫表中的每個實(shí)例或行必須可以被惟一的區(qū)分进鸠。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個列稠曼,以存儲各個實(shí)例的惟一標(biāo)識。要求實(shí)體的屬性完全依賴于主關(guān)鍵字客年。不能部分依賴霞幅。即:一張表存在組合主鍵時,其他非主鍵字段不能部分依賴量瓜。
在第一范式的基礎(chǔ)上更進(jìn)一步司恳,目標(biāo)是確保表中的每列都和主鍵相關(guān)。
如果一個關(guān)系滿足第一范式绍傲,并且除了主鍵之外的其他列扔傅,都依賴于該主鍵,則滿足第二范式烫饼。
例如:一個用戶只有一種角色猎塞,而一個角色對應(yīng)多個用戶。則可以按如下方式建立數(shù)據(jù)表關(guān)系杠纵,使其滿足第二范式荠耽。
user用戶表,字段id,username,password,role_id
role角色表比藻,字段id,name
用戶表通過角色id(role_id)來關(guān)聯(lián)角色表
3. 第三范式(唯一性)
滿足第三范式(3NF)必須先滿足第二范式(2NF)铝量。簡而言之,第三范式(3NF)要求一個數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關(guān)鍵字信息银亲。例如慢叨,存在一個部門信息表,其中每個部門有部門編號(dept_id)群凶、部門名稱插爹、部門簡介等信息。那么在員工信息表中列出部門編號后就不能再將部門名稱请梢、部門簡介等與部門有關(guān)的信息再加入員工信息表中赠尾。如果不存在部門信息表,則根據(jù)第三范式(3NF)也應(yīng)該構(gòu)建它毅弧,否則就會有大量的數(shù)據(jù)冗余气嫁。簡而言之,第三范式就是屬性不依賴于其它非主屬性够坐。
表中的非主屬性必須依賴于主屬性才能被獲取寸宵、減少依賴崖面,①數(shù)據(jù)冗余問題不能有重復(fù)信息;②如有大量的重復(fù)信息梯影,應(yīng)該另建表巫员。
4. 逆范式
逆范式化指的是通過增加冗余或重復(fù)的數(shù)據(jù)來提高數(shù)據(jù)庫的讀性能。
例如:在上例中的user_role用戶-角色中間表增加字段role_name甲棍。
逆范式化可以減少關(guān)聯(lián)查詢時简识,join表的次數(shù)。