1. SQL範式舉例
一、範式例子
定義:
=====
第一範式:(1NF)
如果關系模式,它的每一分量是不可分的數據項,則此關系模式為第一範式
第二範式:(2NF)
若關系模式R屬於1NF,且每個非主屬性完全依賴於碼,則R為2NF
第三範式:(3NF)
若關系模式R屬於2NF,不存在非主屬性對碼的傳遞依賴,則稱R為3NF
傳遞依賴:當屬性間存在X->Y,Y-\->X,Y->Z,稱z傳遞依賴與X
舉例:
=====
將有關學生簡歷、選課等數據設計成一關系模式student
表示為:
student(sno,sname,age,sex,class,department,cno,cname,score,grade)
-----------------------------------------------------------------
該關系模式的每一屬性對應的域為簡單域,符合第一範式
該關系模式滿足函數依賴集
F={sno->sname,sno->age,sno->sex,sno->class,sno->department
class->departmet (班級決定系)
cno->cname,cno->score(課程號決定課程名、學分)
sno,cno->grade(學號和課程號決定成績)
}
下面將低級範式的關系模式轉換成若干個高一級範式的關系模式集合
student1(sno,sname,age,sex,class,department)
--------------------------------------------
course(cno,cname,score)
-------------------------
sc(sno,cno,grade)
-----------------
非主屬性對碼完全依賴,均為2NF
分析模式student1,存在sno->class ,class-\->sno,class->department
所以存在department(系)對sno(學號)傳遞依賴,所以關系模式student1不是第三範式
student1分解為:
student2(sno,sname,age,sex,class)
---------------------------------
class(class,department)
-----------------------
所以關系模式student 可分解成 4個3NF的關系模式student2 ,class ,course,sc
2. SQL資料庫三大範式
c
資料庫範式1NF 2NF 3NF BCNF(實例)
設計範式(範式,資料庫設計範式,資料庫的設計範式)是符合某一種級別的關系模式的集合。構造資料庫必須遵循一定的規則。在關系資料庫中,這種規則就是範式。關系資料庫中的關系必須滿足一定的要求,即滿足不同的範式。目前關系資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、第四範式(4NF)、第五範式(5NF)和第六範式(6NF)。滿足最低要求的範式是第一範式(1NF)。在第一範式的基礎上進一步滿足更多要求的稱為第二範式(2NF),其餘範式以次類推。一般說來,資料庫只需滿足第三範式(3NF)就行了。下面我們舉例介紹第一範式(1NF)、第二範式(2NF)和第三範式(3NF)。
在創建一個資料庫的過程中,范化是將其轉化為一些表的過程,這種方法可以使從資料庫得到的結果更加明確。這樣可能使資料庫產生重復數據,從而導致創建多餘的表。范化是在識別資料庫中的數據元素、關系,以及定義所需的表和各表中的項目這些初始工作之後的一個細化的過程。
下面是范化的一個例子 Customer Item purchased Purchase price Thomas Shirt $40 Maria
Tennis shoes $35 Evelyn Shirt $40 Pajaro Trousers $25
如果上面這個表用於保存物品的價格,而你想要刪除其中的一個顧客,這時你就必須同時刪除一個價格。范化就是要解決這個問題,你可以將這個表化為兩個表,一個用於存儲每個顧客和他所買物品的信息,另一個用於存儲每件產品和其價格的信息,這樣對其中一個表做添加或刪除操作就不會影響另一個表。
關系資料庫的幾種設計範式介紹
1 第一範式(1NF)
在任何一個關系資料庫中,第一範式(1NF)是對關系模式的基本要求,不滿足第一範式(1NF)的資料庫就不是關系資料庫。
所謂第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一範式(1NF)中表的每一行只包含一個實例的信息。例如,對於圖3-2
中的員工信息表,不能將員工信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;員工信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現一次。簡而言之,第一範式就是無重復的列。
2 第二範式(2NF)
第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或行必須可以被惟一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。如圖3-2
員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二範式就是非主屬性非部分依賴於主關鍵字。
3 第三範式(3NF)
滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那麼在圖3-2的員工信息表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三範式(3NF)也應該構建它,否則就會有大量的數據冗餘。簡而言之,第三範式就是屬性不依賴於其它非主屬性。
3. SQL資料庫關系模式的題目
1、S最高為第二範式。因為主鍵是學號,所以有學號->(姓名,系名,住處),
又有系名->(住處),所以存在傳遞依賴
2、由於存在傳遞依賴,所以存在數據插入異常。如新設立的系名,還沒有學生時,因為學號為空,所以導致新系名無法插入
3、分解為第三範式:
S1:學號,姓名,系名
S2:系名,住處