第一範式(1NF)無重復的列
第二範式(2NF)屬性
完全依賴於主鍵[消除非主屬性對主碼的部分函數依賴]
第三範式(3NF)屬性
不依賴於其它非主屬性[消除傳遞依賴]
兩個屬性組成的關系必為2NF,因為兩個屬性組成 的關系的碼只有三種情況:全碼;兩個分別為碼; 的關系的碼只有三種情況:全碼;兩個分別為碼; 其中一個是碼 關系模式R<U,F> 關系模式R<U,F> 其中:U={A,B,C,D},分別討論關系模式R 其中:U={A,B,C,D},分別討論關系模式R是否滿足 2NF。 2NF。
1)F={A→B,B→C,C→D,D→A} 2NF,因為沒有非主屬性 因為沒有非主屬性;
R是2NF,因為沒有非主屬性;
2)F=Φ 2)F=Φ 2NF,因為沒有非主屬性 因為沒有非主屬性;
R是2NF,因為沒有非主屬性;
5.2.4 2NF 3)F={A→B,B→A,A→C} 候選碼為(A,D),(B,D) 因為存在非主屬性C (A,D),(B,D)。 候選碼為(A,D),(B,D)。
因為存在非主屬性C對碼 A,D)的部分函數依賴 所以R不是2NF 的部分函數依賴, 2NF。
(A,D)的部分函數依賴,所以R不是2NF。
規范化:由於A→C造成R不是2NF 所以分解為: A→C造成 2NF, 規范化:由於A→C造成R不是2NF,所以分解為: R1(A,C)和R2(A,B,D)均為 均為2NF. R1(A,C)和R2(A,B,D)均為2NF.
4)F={(A,B)→C,D→A} 候選碼為(B,D), 因為存在非主屬性A對碼( 候選碼為(B,D), 因為存在非主屬性A對碼(B,D) 的部分函數依賴,所以R不是2NF
2NF的部分函數依賴,所以R不是2NF;
規范化:由於D→A造成R不是2NF 所以分解為: D→A造成 2NF, 規范化:由於D→A造成R不是2NF,所以分解為: R1(A,D)和R2(B,C,D)均為 均為2NF. R1(A,D)和R2(B,C,D)均為2NF.
另解: (A,B,C),R (A,B,D)進一步 分解為 (A,B,C),R』』(A,B,D)進一步R 另解:R』(A,B,C),R (A,B,D)進一步R』』分解為 R1」(A,D),R2 (A,D),R2」(B,D) R1 (A,D),R2 (B,D) 5.2.4 2NF 5)F={(A,B)→C,C→A} 候選碼為(A,B,D) (B,C,D),因為沒有非主 (A,B,D)和 候選碼為(A,B,D)和(B,C,D),因為沒有非主 屬性, 所以, 2NF。
屬性, 所以,R是2NF。 結論: 結論: 單個屬性組成候選碼的關系一定是2NF; 單個屬性組成候選碼的關系一定是2NF; 兩個屬性組成的關系一定是2NF;
沒有非主屬性的關系一定是2NF; 沒有非主屬性的關系一定是2NF; All-Key的關系一定是 的關系一定是2NF. All-Key的關系一定是2NF. 5.2.5 3NF 定義5.7 關系模式R U,F〉中若不存在這樣的碼X, 定義5.7 關系模式R〈U,F〉中若不存在這樣的碼X, 屬性組Y及非主屬性Z(Z Y)使得X→Y,(Y→X) Z(Z? 使得X→Y, 屬性組Y及非主屬性Z(Z?Y)使得X→Y,(Y→X) Y→Z,成立 則稱R 成立, ∈3NF。
Y→Z,成立,則稱R〈U,F〉∈3NF。 由定義5.7可以證明, R∈3NF, 5.7可以證明 由定義5.7可以證明,若R∈3NF,則每一個非主屬 性既不部分依賴函數於碼也不傳遞函數依賴於碼。
性既不部分依賴函數於碼也不傳遞函數依賴於碼 等價定義:關系模式R U,F〉∈2NF, 等價定義:關系模式R〈U,F〉∈2NF,且每一個非 主屬性都不傳遞函數依賴於碼,則稱R 主屬性都不傳遞函數依賴於碼,則稱R〈U,F〉 ∈3NF。 ∈3NF。
判斷3NF的方法是先判斷2NF,然後檢查有無非主屬 3NF的方法是先判斷2NF, 判斷3NF的方法是先判斷2NF,然後檢查有無非主屬 性對碼的傳遞函數依賴 5.2.5 3NF 關系模式SC(SNO,CNO,G) (SNO,CNO)→G沒 關系模式SC(SNO,CNO,G) (SNO,CNO)→G沒 有非主屬性對碼的傳遞依賴, SC∈3NF; 有非主屬性對碼的傳遞依賴,故SC∈3NF;
⑵ 有沒有用同一個表來介紹SQL的三大範式的例子
首先就得知道什麼是sql的三大範式
1.什麼是資料庫三範式?分別是哪三範式?各有什麼優缺點?
所謂第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一範式(1NF)中表的每一行只包含一個實例的信息。簡而言之,第一範式就是無重復的列。說明:在任何一個關系資料庫中,第一範式(1NF)是對關系模式的基本要求,不滿足第一範式(1NF)的資料庫就不是關系資料庫。
第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或行必須可以被惟一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。例如員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。簡而言之,第二範式就是屬性完全依賴於主鍵。
滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那麼在的員工信息表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三範式(3NF)也應該構建它,否則就會有大量的數據冗餘。簡而言之,第三範式就是屬性不依賴於其它非主屬性。
問題分析
因此不滿足第二範式的要求,會產生如下問題
數據冗餘: 同一門課程由n個學生選修,"學分"就重復n-1次;同一個學生選修了m門課程,姓名和年齡就重復了m-1次。
更新異常:
1)若調整了某門課程的學分,數據表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。
2)假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。
刪除異常 : 假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分信息也被刪除了。很顯然,這也會導致插入異常。2.1.2 解決方案
把選課關系表SelectCourse改為如下三個表:學生:Student(學號,姓名, 年齡,性別,系別,系辦地址、系辦電話);課程:Course(課程名稱, 學分);選課關系:SelectCourse(學號, 課程名稱, 成績)。2.2 第三範式(3NF)實例分析
接著看上面的學生表Student(學號,姓名, 年齡,性別,系別,系辦地址、系辦電話),關鍵字為單一關鍵字"學號",因為存在如下決定關系:
(學號)→ (姓名, 年齡,性別,系別,系辦地址、系辦電話)
但是還存在下面的決定關系
(學號) → (所在學院)→(學院地點, 學院電話)
即存在非關鍵欄位"學院地點"、"學院電話"對關鍵欄位"學號"的傳遞函數依賴。
它也會存在數據冗餘、更新異常、插入異常和刪除異常的情況。 (數據的更新,刪除異常這里就不分析了,可以參照2.1.1進行分析)
根據第三範式把學生關系表分為如下兩個表就可以滿足第三範式了:
學生:(學號, 姓名, 年齡, 性別,系別);
系別:(系別, 系辦地址、系辦電話)。
總結
上面的資料庫表就是符合I,II,III範式的,消除了數據冗餘、更新異常、插入異常和刪除異常。
希望對你有幫助哈
⑶ SQL server第一、第二、第三範式
一範式(1NF):在關系模式R中的每一個具體關系r中,如果每個屬性值 都是不可再分的最小數據單位,則稱R是第一範式的關系。例:如職工號,姓名,電話號碼組成一個表(一個人可能有一個辦公室電話 和一個家裡電話號碼) 規范成為1NF有三種方法:
一是重復存儲職工號和姓名。這樣,關鍵字只能是電話號碼。
二是職工號為關鍵字,電話號碼分為單位電話和住宅電話兩個屬性
三是職工號為關鍵字,但強制每條記錄只能有一個電話號碼。
以上三個方法,第一種方法最不可取,按實際情況選取後兩種情況。
第二範式(2NF):如果關系模式R(U,F)中的所有非主屬性都完全依賴於任意一個候選關鍵字,則稱關系R 是屬於第二範式的。
例:選課關系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO為學號, CNO為課程號,GRADEGE 為成績,CREDIT 為學分。 由以上條件,關鍵字為組合關鍵字(SNO,CNO)
在應用中使用以上關系模式有以下問題:
a.數據冗餘,假設同一門課由40個學生選修,學分就 重復40次。
b.更新異常,若調整了某課程的學分,相應的元組CREDIT值都要更新,有可能會出現同一門課學分不同。
c.插入異常,如計劃開新課,由於沒人選修,沒有學號關鍵字,只能等有人選修才能把課程和學分存入。
d.刪除異常,若學生已經結業,從當前資料庫刪除選修記錄。某些門課程新生尚未選修,則此門課程及學分記錄無法保存。
原因:非關鍵字屬性CREDIT僅函數依賴於CNO,也就是CREDIT部分依賴組合關鍵字(SNO,CNO)而不是完全依賴。
解決方法:分成兩個關系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新關系包括兩個關系模式,它們之間通過SC1中的外關鍵字CNO相聯系,需要時再進行自然聯接,恢復了原來的關系
⑷ sql中的范數是什麼回事
3.4.1 第一範式(1NF)
在任何一個關系資料庫中,第一範式(1NF)是對關系模式的基本要求,不滿足第一范
式(1NF)的資料庫就不是關系資料庫。
所謂第一範式(1NF)是指資料庫表的每一列都是不可分割的基本數據項,同一列中
不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現重復的
屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為
一對多關系。在第一範式(1NF)中表的每一行只包含一個實例的信息。例如,對於圖3-2 中
的員工信息表,不能將員工信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯
示;員工信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現一次。簡而
言之,第一範式就是無重復的列。
3.4.2 第二範式(2NF)
第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)
必須先滿足第一範式(1NF)。第二範式(2NF)要求資料庫表中的每個實例或行必須可以
被惟一地區分。為實現區分通常需要為表加上一個列,以存儲各個實例的惟一標識。如
圖3-2 員工信息表中加上了員工編號(emp_id)列,因為每個員工的員工編號是惟一的,
因此每個員工可以被惟一區分。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。
第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在
僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出
來形成一個新的實體,新實體與原實體之間是一對多的關系。為實現區分通常需要為表加上
一個列,以存儲各個實例的惟一標識。簡而言之,第二範式就是非主屬性非部分依賴於主關
鍵字。
3.4.3 第三範式(3NF)
滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求
一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,
其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那麼在圖3-2
的員工信息表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的信息再加入
員工信息表中。如果不存在部門信息表,則根據第三範式(3NF)也應該構建它,否則就會
有大量的數據冗餘。簡而言之,第三範式就是屬性不依賴於其它非主屬性。
所謂範式就是符合某一種級別的關系模式的集合。通過分解把屬於低級範式的關系模式轉換
為幾個屬於高級範式的關系模式的集合。這一過程稱為規范化。
1、第一範式(1NF):一個關系模式R 的所有屬性都是不可分的基本數據項。
2、第二範式(2NF):關系模式R 屬於第一範式,且每個非主屬性都完全函數依賴於
鍵碼。
3、第三範式(3NF):關系模式R 屬於第一範式,且每個非主屬性都不偉遞領帶於鍵
碼。
4、BC 範式(BCNF):關系模式R 屬於第一範式,且每個屬性都不傳遞依賴於鍵碼
⑸ 資料庫SQL,第二範式是不是完全函數依賴並且傳遞函數依賴
資料庫SQL,第二範式是不是完全函數依賴並且傳遞函數依賴?
⑹ sql 新人 何謂依賴
對於初學者最好還是從欄位之間的配比關系來理解依賴,凡是x n:1 y的則可看成y=f(x)也就是說y和x之間存在一個函數關系,進一步的說則可有兩種說法:一種是x能推出y,一種是y函數依賴x。對於上題
學號n:1系名
系名n:1系大樓
結果是系大樓函數依賴系名,系名函數依賴學號,所以系大樓函數依賴學號,在關系代數中將復合函數又稱為傳遞函數或傳遞依賴,所以系大樓傳遞依賴學號
在資料庫中如果你真的這樣建了表的話,一個系搬到另一棟系大樓的話,就要修改所有該系學生的信息了,這是很不科學的。
⑺ sql server 如何創建依賴關系,依賴關系是什麼
依賴關系是兩個表之間的約束,從表依賴主表,那從表有的數據主表必須有,就比如員工從表裡有一個用戶 他有姓名,有年齡....當中還有職位,這個職位里是數字和主表關聯 如果他是1的話,主表裡對應的員工就可以做到連表查詢,如果主表裡沒有的話,那用戶里的員工輸入的1就會報錯,主要是以約束他們的關系存在的
⑻ 什麼是完全依賴
完全依賴,即完全函數依賴,設R為任一給定關系,X、Y為其屬性集,若X → Y,且對X中的任何真子集X』 ,那麼X』 ↛ Y 都成立,則稱Y完全函數依賴於X。
Y函數依賴於X(X→Y),任何一個X的子集都能確定Y(完全函數依賴)f。
例:成績完全依賴於(學號,課程號),X的部分子集確定Y(部分函數依賴)p。
例:課程名部分依賴於(學號,課程號),推論:如果X→Y,X是單個屬性,則是完全函數依賴。
(8)sql什麼是完全依賴擴展閱讀:
完全函數依賴在資料庫的運用:
根據Gartner的預計,全球非關系型資料庫(NoSQL)在2020~2022預計保持在30%左右高速增長,遠高於資料庫整體市場。伴隨著NoSQL和大數據技術的興起和發展,在阿里雲上直接開放提供服務也有1年多時間,並在去年的12月份全新發布X-Pack,將單一的HBase演進到一個完整的數據處理平台的能力。
HBase X-Pack的定位:HBase X-Pack是基於HBase及HBase生態構建的 低成本一站式數據處理平台;HBase X-Pack支持:HBase API(包括RestServerThriftServer)、關系Phoenix SQL、時序OpenTSDB、全文Solr、時空GeoMesa、圖HGraph、分析Spark on HBase,是阿里雲首個支持多模式的分布式資料庫,且協議100%兼容開源協議;HBase X-Pack實現數據從處理、存儲到分析全流程閉環,讓客戶用最低成本實現一站式數據處理。
⑼ 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)也應該構建它,否則就會有大量的數據冗餘。簡而言之,第三範式就是屬性不依賴於其它非主屬性。
⑽ SQL 請問SQL高手,系統中的這幾個資料庫都是做什麼用的
數據:計算機中用來描述事物的記錄
數據模型:是一種對客觀事物抽象化的表現形式。數據模型應該真實、易於理解、便於實現
建模:對客觀事物加以抽象,提取主要特徵,歸納成一個簡單清晰的輪廓,使復雜問題變得易於處理
數據模型三要素:數據結構、數據操作、完整性約束
數據結構描述靜態特徵,按數據結構可以把數據模型分為層次模型、網狀模型、關系模型
數據操作描述動態特徵,數據操作主要分為更新(插入、刪除、修改)、檢索兩大類,統稱增、刪、改、查
完整性約束確保數據的正確性、有效性、相容性
資料庫:簡稱DB(database),是由資料庫管理系統管理的數據的聚集
資料庫管理系統:簡稱DBMS(DataBase Management System)是專門用於建立和管理資料庫的一套軟體,介於應用程序和操作系統之間。屬於系統軟體
資料庫系統:簡稱DBS(DataBase System)。資料庫、DBMS、應用程序和軟體系統統稱資料庫系統
關系:關系就是一張二維表
關系模型:數據以關系的形式表示,就是以二維表的形式表示數據模型
屬性:關系的標題欄中各列的名字
模式:關系的名稱和關系的屬性集
元組:二維表的所有行統稱為元組,元組的各個分量對應於關系的各個屬性。一個元組表示一個對象
域:關系的每個屬性的取值范圍
關系的實例:給定關系中元組的集合稱為該關系的「實例」。一個給定的關系模式,可以有許多關系實例。
關系型資料庫管理系統:簡稱RDBMS(Relationg DataBase Management System),採用關系數據模型的資料庫管理系統。
資料庫系統的體系結構的三層結構和兩層映象:從資料庫管理的角度出發,資料庫系統的體系可分三層,外模式、模式、內模式。兩層映象是,外模式/模式映象、模式/內模式映象
外模式:又稱用戶模式,相當於SQL中的視圖(VIEW)模式,是資料庫用戶可以看見和使用的局部數據的邏輯結構和特徵描述,是與某應用有關的數據的邏輯表示
模式:分為概念模式、邏輯模式,是所有資料庫用戶的公共數據視圖,是資料庫中全部數據的邏輯結構和特徵的描述,一個資料庫只有一個模式
外模式/模式映象:把局部邏輯結構描述與全局邏輯結構描述聯系起來。一個模式可以與多個外模式對應聯系。例如,SQL SERVER中一個關系模式上可以建立多個滿足不同用戶要求的視圖VIEW。這種映象可以保證數據與應用程序之間的邏輯獨立性,即改變模式,不影響外模式,則與外模式相關的應用程序無序修改
內模式:由稱為存儲模式,是資料庫物理結構和存儲方式的描述,是數據在資料庫內部的表示方式。一個資料庫只有一個內模式。內模式描述記錄的存儲方式、索引的組織方式、數據是否壓縮、是否加密等,不涉及硬體設備。
模式/內模式映象:把全局邏輯結構描述與物理結構描述聯系起來。一個模式只有一個內模式。這種映象保證了數據與程序之間的物理獨立性,當內模式修改時,由於模式未變,所以無需修改程序。
DBMS的體系結構(組成):查詢處理程序、存儲管理程序、事務管理程序、客戶/伺服器程序體系結構
查詢處理程序:負責查詢處理,它的一個重要任務是「優化」查詢。
事務管理程序:保證多個事務並發執行
存儲管理程序:既管理磁碟上的數據文件又管理存放數據文件部分內容的內存數據緩沖區
客戶/伺服器程序體系結構:大多數DBMS程序採用這種程序體系結構,把整個DBMS程序系統劃分為兩部分,DBMS核心部分屬於伺服器程序,客戶程序主要用於與用戶相互配合並將查詢或其他命令傳送給伺服器程序的查詢介面。
資料庫設計
資料庫設計的步驟:需求分析、概念設計、邏輯設計、物理設計
需求分析和概念設計階段的工作與具體資料庫管理系統無關,這一階段的工作獨立於資料庫管理系統
邏輯設計和物理設計階段的共組與具體採用何種資料庫管理系統相關。
需求分析階段:應用領域的調查、定義信息與應用、定義操作任務、定義數據項、預測未來改變,結果產生相關文檔
概念設計階段:也稱為建模
任務:資料庫概念模式(模式)設計、事務設計
概念模式設計的工具:E/R圖。對於面向對象的資料庫則可採用面向對象定義語言ODL
E/R圖:稱為實體-聯系模型
E/R圖的組成:實體集(矩形)、屬性(橢圓)、聯系(菱形)
聯系的類型:一對一、一對多、多對多。用線條和箭頭表示不同的聯系。箭頭指向的一方代表「一」
鍵碼屬性的表示:下劃線
聯系中的角色:即一個實體集內部實體之間的聯系
多向聯系:多個實體集之間發生的一個聯系
多向聯系轉化為雙向聯系的方法:將多向聯系轉換成實體集,然後在原來與之聯系的實體集和新的實體集之間建立新的雙向聯系
E/R圖中的子類的表示方法和繼承:如果實體集B是實體集A的子類,則它們之間用一個標有isa的三角形和兩根線條建立特殊的聯系。三角形的尖端指向超類(父類),子類實體集上只需標出子類特有的屬性,繼承父類的所有屬性。
ODL對象定義語言:是用面向對象的術語來說明資料庫結構的一種推薦的標准語言,主要用途是書寫面向對象資料庫的設計
對象:是某種可研究,可觀察的實體,例如:一個人、一門課程、一本書等等
類:具有相似特性的對象可以歸為一類
ODL描述的三種特性:屬性(Attribute)、聯系(Relationship)、方法(Method)
ODL書寫規則:
interface 類名1{
attribute 數據類型1 屬性名1;
attribute 數據類型2 屬性名2;
.
.
.
relationship [Set]<類名2> 聯系名1
inverse 類名2::聯系名2;
.
.
}
說明:
關鍵字interface、attribute、relationship、<set>、inverse
常用數據類型有string(字元串)、integer(整型)、float(浮點型)、enum(枚舉型)
[]中的set為任選項,當類1與類2的聯系是一對一時,不需要使用set,當類1與類2的聯系是一對多時必須使用set
inverse表示在類2中聯系名2所表示的聯系與類1中聯系名1所表示的聯系是多對一的對應聯系
ODL例一:用ODL描述製片公司與電影,假如製片公司部名稱不重復。因為,一個製片公司可以製作多部影片,而一部影片只能由一個公司製作發行,所以製片公司與影片的關系是一對多的關系。
interface studio{
attribute string studioname;
attribute string address;
attribute string phone;
relationship set<movie> make
inverse movie::madeby;
}
interface movie{
attribute string movietitle;
attribute integer length;
attribute enum incolor ;
attribute integer year;
relationship set studio madeby
inverse studio::make;
}
ODL例二:用ODL描述學生與課程,一名學生可以選擇多門課程來學習,一門課程可以被多名學生選修。
interface student{
attribute string sname;
attribute string address;
attribute enum gender ;
attribute integer age;
relationship set<course> choice
inverse course::choisedby;
}
interface course{
attribute string ctitle;
attribute integer credit;
relationship set<student> choisedby
inverse student::choice;
}
ODL例三:用ODL描述校長與學校的關系,一名校長只能管理一所學校,一所學校只能設一名校長。
interface chairman{
attribute string chname;
attribute enum gender ;
attribute integer age;
attribute string phone;
relationship set university manage
inverse university::leadby;
}
interface university{
attribute string unnmae;
attribute string addr;
relationship set chairman leadby
inverse chairman::manage;
}
ODL子類描述方法:自類繼承父類的所有屬性和聯系。子類可以有自己的特殊屬性和聯系。子類中屬性和聯系的描述方法與上述例子相同。
interface 子類名:基類名
ODL子類描述例:碩士研究生類是學生的一個子類。每名碩士研究生有若干名導師,一名導師可以帶多名碩士研究生。
interface student{
attribute string sname;
attribute string address;
attribute enum gender ;
attribute integer age;
}
interface master:student{
attribute string special;
relationship set<advisor> direct
inverse advisor::directedby;
}
interface advisor{
attribute string name;
attribute string address;
}
邏輯設計階段:把概念設計階段產生的資料庫概念模式變換為資料庫邏輯模式。資料庫邏輯模式依賴於邏輯數據模型和資料庫管理系統。目前做流行的資料庫管理系統都是關系型邏輯數據模型。所以,本教程知討論如何把概念模式轉變為關系模型
邏輯設計階段的步驟:
1.概念模式轉變為關系模型
2.對關系模型進行規范化和優化
3.適應DBMS限制條件的修改
4.對性能、存儲空間等的優化
1.概念模式轉變為關系模型
E/R圖轉變為關系模型的方法:
1.一個實體集轉變為一個關系模式,這個關系模式包含實體集所有的簡單屬性和復合屬性的簡單子屬性。實體集的名稱可以用作為關系模式的名稱,用下劃線來表示關系的鍵碼
2.一個聯系轉變為一個關系模式,一般情況下用聯系名作為關系名,用聯系的實體集的鍵碼和聯系本身的屬性作為此關系模式的屬性集。
E/R圖轉變為關系模型實例:
實例一:一個班級只能有一個班長,而且必須有一個班長,E/R圖如下:
學生與班級的聯系是一對一的聯系(1:1)。學生實體集的鍵碼是學號。班級實體集的鍵碼是班號。這個E/R圖可以轉變為如下的關系模型
學生(學號,姓名,性別,出生日期)
班級(班號,名稱,地點)
班長(學號,班號,注冊)
聯系反映的是具有某學號的學生擔任具有某班號班級的班長。這種轉變方法是常用的方法。
如果想減少查詢時使用連接操作的次數,提高查詢效率,以上E/R圖也可以轉變為如下關系模型
學生(學號,姓名,性別,出生日期,班號)
班級(班號,名稱,地點)
學生關系模式中的「班號」是外鍵碼。這種關系模式中,由於學生關系中記錄了所有學生的學號,但不是每個學生都擔任班長(按教科書上的術語叫做不是全參與),因此不是每個元組的班號屬性都有數據,即應該允許班號為空。否則,學生實體集必須是全參與,即每個學生都是班長。
實例二:一個影片公司可以製作多部影片,但是一部影片只能歸一個製片公司所有。假如公司不重名,影片也不重名,則公司名稱是製片公司實體集的鍵碼,影片名是影片實體集的鍵碼。
影片公司與影片的聯系是1對多的聯系(1:N)。這個E/R圖可以轉變為以下關系模型
影片公司(公司名稱,地點)
影片(影片名,片長)
製作(公司名稱,影片名)
同樣,假如影片公司是全參與,即每個影片公司至少製作了一部電影,則可以轉變為以下關系模型
影片公司(公司名稱,地點,影片名)
影片(影片名,片長)
其中,影片公司關系中的影片名是外鍵碼
實例三:學生與課程之間的聯系是「選修」。一個學生可以選多門課程,一門課程可以被多名學生選修,所以它們之間的「選修」聯系是多對多(N:M)
上述E/R圖可以轉變為以下關系模型
學生(學號,姓名)
課程(課程號,課程名)
選修(學號,課程號,成績)
選修關系中的學號和課程號是外鍵碼
2.對關系模型進行規范化和優化
為什麽要把關系模型規范化:為了有效地消除關系中存在的數據冗餘和更新異常等現象
基本概念
函數依賴:如果關系R的兩個元組在屬性A1,A2,...An上一致,則它們的另一個屬性B上也一致,那末,我們就說在關系R中屬性B函數地依賴於屬性A1,A2,...An或者說屬性A1,A2,...An函數決定屬性B。
關系的鍵碼:
如果一個或多個屬性的集合滿足如下條件,則稱該集合為關系R的鍵碼(key):
1.這些屬性函數決定該關系的所有其它屬性。
2.的任何真子集都不能函數決定R的所有其它屬性。
關系的超鍵碼:包含鍵碼的屬性集稱為超鍵碼,是「鍵碼的超集」的簡稱
函數依賴規則:分解/合並規則、傳遞規則、平凡依賴規則
平凡依賴:對於函數依賴A1,A2,...An->B,如果B是A中的某一個,我們稱這種依賴是平凡依賴
非平凡依賴:對於函數依賴A1,A2,...An->B,如後B中至少有一個不在A中,我們稱這種依賴是非平凡依賴
完全非平凡依賴:對於函數依賴A1,A2,...An->B,B中沒有一個在A中,我們稱這種依賴是完全非平凡依賴
主屬性:鍵碼所在的屬性
非主屬性:鍵碼以外的屬性
封閉集(閉包)對於給定的函數依賴集S,屬性集A函數決定的屬性集合就是屬性集A在依賴集S下的封閉集
範式就是符合某一種級別的關系模式的集合。
規范化通過分解把屬於低級範式的關系模式轉換為幾個屬於高級範式的關系模式的集合,這一過程稱為規范化
1範式(1NF),如果一個關系模式R的所有屬性都是不可分割的基本數據項,則這個關系屬於1NF
2範式(2NF),若關系模式R屬於1NF,且每個非主屬性都完全依賴於鍵碼,則R屬於2NF
3範式(3NF),若關系模式R屬於1NF,且每個非主屬性都不傳遞依賴於鍵碼,則R屬於3NF
BC範式(BCNF),若關系模式屬於1NF,且R的每個非平凡依賴的決定因素都包含鍵碼,則R屬於BCNF
規范化分解原則:無損連接、保持依賴
無損連接:當對關系模式R進行分解時,R的元組將分別在相應屬性集進行投影而產生新的關系,如果對新的關系進行自然連接得到的元組的集合與原關系完全一致,則稱為無損連接
保持依賴:如果分解後的總的函數依賴集與原函數依賴集保持一致,則稱為保持依賴。
模式分解的兩個規則:公共屬性共享、相關屬性合一
公共屬性共享:保留公共屬性,進行自然連接是分解後的模式實現無損連接的必要條件
相關屬性合一:把以函數依賴的形式聯系在一起的相關屬性放在一個模式中,從而使原有的函數依賴得以保持,這是分解後的模式實現保持依賴的充分條件
模式分解的三種方法
一、部分依賴歸子集;完全依賴隨鍵碼——用於建立2NF
例:關系R(A,B,C,D,E,F,G)上存在函數依賴,A->BCD,E->F,AE->G,AE->BCD,AE->F
分析以上依賴可以看出,AE是鍵碼(AE->BCD)。因為AE是鍵碼,A是主屬性,A->BCD,所以BCD是部分依賴於AE
根據部分依賴歸子集的方法,因為A是AE的真子集,所以A與BCD歸在一起構成一個關系模式。R1(A,B,C,D)
同理對於AE->F,有E->F所以AE->F是部分依賴,非主屬性F所依賴的真子集是E,所以E和F可以歸在一個關系模式中R2(E,F)
AE->G是完全函數依賴,完全依賴隨鍵碼,所以AEG歸在一個關系模式中R3(A,E,G)
因此R(A,B,C,D,E,F,G)可以分解為符合2NF的關系模式如下:
R1(A,B,C,D)
R2(E,F)
R3(A,E,G)
二、基本依賴為基礎,中間屬性做橋梁——用於建立3NF
例:關系R(A,B,C,D,E)上存在函數依賴,AB->C,C->D,D->E
顯然中間橋梁是C->D,他構成了傳遞依賴鏈,因此,R可以分解為R1(A,B,C),R2(C,D)。分解後在R1,R2中都不存在傳遞依賴。
三、找違例自成一體,舍其右全集歸一;若發現仍有違例,再回首如法炮製——用於建立BCNF
BCNF違例:違背BC範式的函數依賴稱為BC範式違例
例:關系R(A,B,C,D,E)的鍵碼是AB,有函數依賴AB->CDE,ABC->E,C->D
分析上述三個函數依賴可以看出,C->D是BCNF違例。因為它的決定因素不包含鍵碼。我們作如下分解
違例自成一體,即CD構成一個關系模式R1(C,D)
舍其右全集歸一,即從R的屬性中取掉C->D的右邊的屬性D,其左邊的屬性C與其他所有屬性構成一個新的關系R2(A,B,C,E)
新的關系模式如下:
R1(C,D)
R2(A,B,C,E)
注意:以BCNF違例為基礎進行模式分解,最終得到的屬於BCNF的關系模式都能實現無損連接,但未必能保持函數依賴
邏輯設計例一:假如有關系模式R(A,B,C,D)和函數依賴集S=。
(1)找出所有BCNF違例。
(2)如果該關系模式不是BCNF,則將它分解為BCNF
(3)找出所有的違背3NF的依賴
(4)如果該關系不是3NF,則將它分解為3NF
步驟一:找出R在S上的所有非平凡依賴,首先計算封閉集
單屬性封閉集:A+=A,B+=BCD,C+=C,D+=D
雙屬性封閉集:AB+=ABCD,AC+=AC,AD+=AD,BC+=BCD,BD+=BCD,CD+=CD
三屬性封閉集:ABC+=ABCD,ABD+=ABCD,BCD+=BCD,ACD+=ACD
四屬性封閉集:ABCD+=ABCD
步驟二:根據計算所得的封閉集,找出鍵碼和超鍵碼
鍵碼:AB
超鍵碼:ABC,ABD,ABCD
步驟三:找出所有的非平凡函數依賴
B->C,B->D,AB->C,AB->D,BC->D,BD->C,ABC->D,ABD->C
其中,AB->C,AB->D,ABC->D,ABD->C不是BCNF違例,因為前兩個依賴的決定因素本身就是鍵碼,而後兩個依賴的決定因素包含鍵碼。所以,B->C,B->D,BC->D,BD->C是BCNF違例,因為它們的決定因素都不包含鍵碼。實際上可以看出R不是2NF,因為存在部分函數依賴:ABC->D,ABD->C,AB->C,AB->D,B->C,B->D
步驟四:進行BCNF規范。BCNF違例自成一體。從以上BCNF違例中選擇B->C自成一體
R1(B,C)
舍其右全集歸一,即捨去B->C的右邊屬性C,所以得到
R2(A,B,D)
但是在R2中還存在BCNF違例B->D,因此B->D自成一體,得到R21(B,D),舍其右全集歸一得到R22(A,B)
最後得到的關系模式是:R1(B,C),R21(B,D),R22(A,B)
通過關系模式分解,把一個非2NF的關系模式歸范成一個BCNF。代價是,在實際操作中增加了連接操作。
(3)B->C,B->D,B不是鍵碼也不是超鍵碼,而C,D都是鍵碼以外的屬性,即是非主屬性。所以R不是3NF。
邏輯設計例二:有關系R(A,B,C,D)和函數依賴集S=
(1)找出所有BCNF違例。
(2)如果該關系模式不是BCNF,則將它分解為BCNF
(3)找出所有的違背3NF的依賴
(4)如果該關系不是3NF,則將它分解為3NF
步驟一:找出R在S上的所有非平凡依賴,首先計算封閉集
單屬性封閉集:A+=ABCD,B+=ABCD,C+=ABCD,D+=ABCD
雙屬性封閉集:AB+=ABCD,AC+=ABCD,AD+=ABCD,BC+=ABCD,BD+=ABCD,CD+=ABCD
三屬性封閉集:ABC+=ABCD,ABD+=ABCD,BCD+=ABCD,ACD+=ABCD
四屬性封閉集:ABCD+=ABCD
步驟二:找出所有非平凡函數依賴
A->B,A->C,A->D,B->A,B->C,B->D,C->A,C->B,C->D,D->A,D->B,D->C
AB->C,AB->D,AC->B,AC->D,AD->B,AD->C,BC->A,BC->D,BD->A,BD->C,CD->A,CD->B
ABC->D,ABD->C,BCD->A,ACD->B
步驟三:找出鍵碼和超鍵碼
鍵碼:A,B,C,D
超鍵碼:AB,AC,AD,BC,BD,CD,ABC,ABD,BCD,ACD,ABCD
根據以上結果分析,R是3NF也是BCNF
3NF要求不存在每個非主屬性對於鍵碼的部分依賴或傳遞依賴
練習:對於
1.R(A,B,C,D)和函數依賴集S=
2.R(A,B,C,D,E)和函數依賴集S=
3.R(A,B,C,D,E)和函數依賴集S=
(1)找出所有BCNF違例。
(2)如果該關系模式不是BCNF,則將它分解為BCNF
物理設計階段:任務是在資料庫邏輯設計的基礎上,為每個關系模式選擇合適的存儲結構和存取路徑
物理設計階段步驟:
(1)分析影響資料庫物理設計的因素;
(2)為關系模?
請參考