日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库的关系运算和完整性约束

發(fā)布時間:2025/3/15 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库的关系运算和完整性约束 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

對關(guān)系數(shù)據(jù)庫進(jìn)行查詢統(tǒng)計時,需要查詢到用戶感興趣的數(shù)據(jù),這就需要對關(guān)系及關(guān)系間進(jìn)行一定的運(yùn)算。本篇主要講述關(guān)系運(yùn)算和關(guān)系的完整性約束,理解關(guān)系操作的含義,了解傳統(tǒng)的集合運(yùn)算,掌握關(guān)系代數(shù)中基本關(guān)系運(yùn)算。通過本篇的學(xué)習(xí),讀者應(yīng)該能掌握以下內(nèi)容:

● 集合的合并、交集、求差、乘積操作

● 關(guān)系運(yùn)算的選擇、投影、連接操作

● 關(guān)系的完整性約束

● 關(guān)系的范式

?

關(guān)系運(yùn)算

關(guān)系模型是目前用的最多的數(shù)據(jù)模型,具有嚴(yán)格的數(shù)學(xué)理論基礎(chǔ),其主要數(shù)學(xué)理論基礎(chǔ)就是集合運(yùn)算。關(guān)系模型提供了一系列操作的定義,這些操作稱為關(guān)系代數(shù)操作。它可分為兩類,一類是集合操作;另一類是關(guān)系專用的操作

?

1、集合操作

集合操作是把關(guān)系看作元組的集合來進(jìn)行傳統(tǒng)的集合運(yùn)算,其運(yùn)算結(jié)果仍是關(guān)系,前提是參與運(yùn)算的兩個元組具有相同的結(jié)構(gòu),即含有相同的屬性,且對應(yīng)屬性的值域相同。下面對傳統(tǒng)的集合運(yùn)算合并、交集、求差、乘積運(yùn)算進(jìn)行逐一說明。

?

集合運(yùn)算——合并

假設(shè)有A、B兩個集合

A = {1,3,5,9}, B = {2,3,5,7}

由所有屬于集合A或?qū)儆诩螧的元素組成的集合,叫做集合A與集合B的合并,也稱為集合A與集合B的并集,記作:

A U B = {1,2,3,5,7,9}

由此可以推出,設(shè)R和S是兩個關(guān)系,則R U S是合并R和S,合并后的結(jié)果仍是關(guān)系,結(jié)果表中的元組或?qū)儆赗,或?qū)儆赟,如圖2-10所示:

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2-10 集合的合并運(yùn)算

?

集合運(yùn)算——交集

假設(shè)有A、B兩個集合

A = {1,3,5,9}, B = {2,3,5,7}

由所有屬于集合A且屬于集合B的元素組成的集合,叫做集合A與集合B的交集,記作:

A n B = {3,5}

由此可以推出,設(shè)R和S是兩個關(guān)系,則R n S是R和S的交集,求交后的結(jié)果仍是關(guān)系,結(jié)果表中的元組屬于R且屬于S,如圖2-11所示:

?

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2-11 集合的交集運(yùn)算

?

集合運(yùn)算——求差

假設(shè)有A、B兩個集合

A = {1,3,5,9}, B = {2,3,5,7}

由所有屬于集合A且不屬于集合B的元素組成的集合,叫做集合A與集合B的差,記作:

A - B = {1,9}

由此可以推出,設(shè)R和S是兩個關(guān)系,則R - S是求R和S的差,求差后的結(jié)果仍是關(guān)系,結(jié)果表中的元組屬于R且不屬于S,如圖2-12所示:

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2-12 集合的求差運(yùn)算

?

集合運(yùn)算——乘積

假設(shè)有A、B兩個集合

A = {1,3,5}, B = {2,3}

用A中元素為第一元素,B中元素為第二元素構(gòu)成有序?qū)?#xff0c;所有這樣的有序?qū)M成的集合叫做A與B的乘積(笛卡爾乘積),記作:

A X B = {(1,2),(1,3),(3,2),(3,3),(5,2),(5,3)}

由此可以推出,設(shè)R和S是兩個關(guān)系,則R X S是求R和S的笛卡爾乘積,結(jié)果表是R和S的結(jié)構(gòu)之連接,即前n個屬性來自R,后m個屬性來自S,屬性個數(shù)等于n+m。結(jié)果表的值是由R中的每個元組連接S中的每個元組構(gòu)成元組的集合。如圖2-13所示:

?

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2-13 集合的乘積運(yùn)算

?

2、專門的關(guān)系運(yùn)算

專門的關(guān)系運(yùn)算包括選擇、投影、連接和除四種運(yùn)算。下面介紹常用的三種運(yùn)算選擇、投影和連接。

選擇運(yùn)算

選擇運(yùn)算是單目運(yùn)算,它從一個關(guān)系R中選擇出滿足給定條件的所有元組,并同R具有相同的結(jié)構(gòu)。圖2-14所示為由關(guān)系R選出編號為02的老師。

?

? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2-14 專門關(guān)系運(yùn)算—選擇運(yùn)算

?

投影運(yùn)算

投影運(yùn)算也是單目運(yùn)算,它從一個關(guān)系R所有屬性中選擇某些指定屬性,組成一個新的關(guān)系。選擇運(yùn)算選取關(guān)系的某些行,而投影運(yùn)算選取關(guān)系的某些列,是從一個關(guān)系出發(fā)構(gòu)造其垂直子集的運(yùn)算。圖2-15所示為由關(guān)系R中選出所有老師的姓名和簡介。

?

圖 2-15 專門關(guān)系運(yùn)算—投影運(yùn)算

?

連接運(yùn)算

連接運(yùn)算屬于二目運(yùn)算,是從兩個關(guān)系元組的所有組合中選取滿足一定條件的元組,由這些元組形成連接運(yùn)算的結(jié)果關(guān)系,其中條件表達(dá)式涉及到兩個關(guān)系中屬性的比較,該表達(dá)式的取值為真或假。圖2-16所示為對課程表和老師表在老師編號相等的條件下進(jìn)行了連接,在新的關(guān)系中僅選出名稱、姓名兩個屬性,即在新關(guān)系中再進(jìn)行一次投影運(yùn)算,這樣得到了所有老師編號為01的課程名稱和老師姓名。

?

? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2-16 專門關(guān)系運(yùn)算—連接運(yùn)算

?

關(guān)系的完整性

關(guān)系模型的完整性主要分為以下四類。

(1)域完整性。關(guān)系模型中,每列屬性的取值應(yīng)是域所確定的值。即屬性的取值范圍應(yīng)在其值集或值域內(nèi)。例如在課程表中,名稱屬性值是漢字或英文字符串,所以不能取出數(shù)值來,同時,名稱是課程的主要特征,要求必須有課程名稱,即名稱屬性不能為空。

(2)實(shí)體完整性關(guān)系模型中每一個表就是一個實(shí)體,在現(xiàn)實(shí)世界中,實(shí)體是可區(qū)分的,即它們具有唯一標(biāo)識。實(shí)體映射到關(guān)系模型后,每個表也應(yīng)該具有唯一的標(biāo)識,這個標(biāo)識稱為主鍵,用于標(biāo)識表中唯一的元組。主鍵不能為空,如果主鍵為空,則說明存在某個不可標(biāo)識的實(shí)體,而這和唯一標(biāo)識相矛盾,即不存在這樣的實(shí)體。

(3)參照完整性。實(shí)體完整性是一個表內(nèi)的約束,參照完整性是在不同表之間或同一表的不同元組之間的約束。例如課程表中的老師編號屬性給出了老師的編號,但在課程表中并沒有老師的信息,要想得到老師的信息,就必須通過表中的老師編號到老師表中去查找。由于編號在老師表中是主鍵,這樣能夠找到唯一的一行與該老師編號相對應(yīng)。對于老師表中的編號屬性來說,通常定義是該表的外關(guān)鍵字,簡稱外鍵,同時,編號屬性也是老師表的主鍵。如圖2-17所示:

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2-17 老師表與課程表的參照約束

從上圖可以看出,課程表中老師編號屬性的每一個值都能在老師表中找到唯一的一行元組,即能找到唯一的老師與其對應(yīng),則稱為參照是完整的,否則,則稱為參照不完整的。

(4)用戶定義的完整性。用戶定義的完整性用于滿足用戶對數(shù)據(jù)的語義要求,是由用戶對數(shù)據(jù)庫施加的約束條件。例如,課程視頻長度不能超過30分鐘、老師必須具備專業(yè)知識等約束條件。

?

關(guān)系模型的規(guī)范化

關(guān)系模型的規(guī)范化是指面對一個現(xiàn)實(shí)問題,如何選擇一個比較好的關(guān)系模式集合。

當(dāng)一個關(guān)系模式設(shè)計的不夠規(guī)范時,就會出現(xiàn)插入異常、刪除異常、冗余過多等問題。例如圖2-18學(xué)生選課表中,其中編號、姓名屬性是表的主鍵,在實(shí)際應(yīng)用中,該表會存在插入、刪除、冗余過多等異常。

?

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖 2-18 學(xué)生選課表

(1)插入異常。比如一個剛剛成立的系,但尚未招收學(xué)生,則因?qū)傩跃幪枴⑿彰麨榭?#xff0c;導(dǎo)致系名、系主任等信息無法存入數(shù)據(jù)庫;同樣,沒被學(xué)生選修的課程也無法存入數(shù)據(jù)庫。

(2)刪除異常。如一個系的學(xué)生畢業(yè)了,刪除學(xué)生記錄時會將系主任、系名等信息一起刪除。

(3)冗余過多。如一個系的系名、系主任姓名都有與該系學(xué)生每門課的成績出現(xiàn)的次數(shù)一樣多。既浪費(fèi)存儲空間又要付出很大的代價來維護(hù)數(shù)據(jù)庫的完整性。當(dāng)系主任更換后,必須逐一修改該系學(xué)生選修課程的每一個元組。

從上面的例子可以看出,一個好的關(guān)系模式不應(yīng)當(dāng)發(fā)生插入異常和刪除異常,且數(shù)據(jù)冗余盡可能地少。引起數(shù)據(jù)冗余及其操作異常的原因在于關(guān)系的結(jié)構(gòu)。現(xiàn)實(shí)世界中的許多事物都可以獨(dú)立存在、獨(dú)立地被標(biāo)識、相互間又密切關(guān)聯(lián)。如果將多個本該是獨(dú)立存在地、具有不同標(biāo)識的事物用一個關(guān)系描述,那么不可能找到這樣一個屬性集,它既是這個關(guān)系的標(biāo)識,又是包含在其中的各個不同事物的標(biāo)識,正是由于關(guān)系模式的屬性之間存在過多的數(shù)據(jù)依賴,從而出現(xiàn)了數(shù)據(jù)冗余和更新的異常。

數(shù)據(jù)依賴是指關(guān)系中屬性值之間的相互聯(lián)系,它是現(xiàn)實(shí)世界屬性間相互聯(lián)系的體現(xiàn),是數(shù)據(jù)之間的內(nèi)在聯(lián)系,是語義的體現(xiàn)。現(xiàn)在人們已經(jīng)提出了許多種類型的數(shù)據(jù)依賴,其中最重要的是函數(shù)依賴

函數(shù)依賴比較容易理解,且普遍地存在于現(xiàn)實(shí)生活中。在學(xué)生選課表中,因一個編號僅對應(yīng)一個學(xué)生,一個學(xué)生只在一個系注冊學(xué)習(xí)。因而,當(dāng)編號的值確定后,姓名和所在系的值也就唯一確定了。當(dāng)關(guān)系模式屬性間存在這個關(guān)系時,我們就說姓名和所在系的值依賴于學(xué)號,即編號決定姓名和系名

在學(xué)生選課表中除了姓名和系名依賴編號外,還存在其它數(shù)據(jù)依賴,如一個系只有一個系主任,因此系名依賴于系主任;再如,每個學(xué)生學(xué)習(xí)一門課都有一個成績,因此成績依賴于學(xué)號和課程名稱。因?yàn)閷W(xué)生選課表中數(shù)據(jù)依賴過多,導(dǎo)致發(fā)生更新異常和數(shù)據(jù)冗余問題。

解決辦法是將關(guān)系模式分解成若干只有單一數(shù)據(jù)依賴的關(guān)系模式,因?yàn)?strong>關(guān)系模式學(xué)生選課表出現(xiàn)異常問題是由于屬性之間存在過多的數(shù)據(jù)依賴造成的,分解的目的就是減少屬性間過多的數(shù)據(jù)依賴,已期消除關(guān)系模式中出現(xiàn)的異常。學(xué)生選課表關(guān)系模式分解成如圖2-19所示的三個表。

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖 2-19 規(guī)范化后的三個關(guān)系表

學(xué)生選課表規(guī)范化后,分解為學(xué)生表、成績表、系表三個表,解決了關(guān)系模式多數(shù)據(jù)依賴的問題,每個表都是單一的數(shù)據(jù)依賴。規(guī)范化后雖然解決了數(shù)據(jù)冗余、更新異常的問題,但檢索效率明顯降低了,需要多表查詢因此,一個關(guān)系是否要進(jìn)行規(guī)范化,應(yīng)當(dāng)本著具體問題具體分析的原則進(jìn)行處理事實(shí)上,如果在一個關(guān)系上主要執(zhí)行的是查詢操作,未必一定要規(guī)范化通過適當(dāng)?shù)卦黾右恍╆P(guān)系或者在應(yīng)用程序中注意到更新一致性的維護(hù),非規(guī)范化的弊端是可以避免的。但是,如果在關(guān)系上要進(jìn)行頻繁的更新操作,還是要采用規(guī)范化的方式比較好。

?

關(guān)系的范式

前面討論了關(guān)系模式?jīng)]有規(guī)范化所引起的異常問題,因此規(guī)范化對數(shù)據(jù)庫設(shè)計有著重要的意義。所以建立科學(xué)的,規(guī)范的數(shù)據(jù)庫是需要滿足一些約束條件的,在關(guān)系型數(shù)據(jù)庫中這些約束條件被稱為范式根據(jù)一個關(guān)系滿足數(shù)據(jù)依賴程度的不同,人們提出了第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。當(dāng)然從理論上研究還有其他范式,但實(shí)際意義不大,這里不作討論。

(1)第一范式(1NF)。表中所有的屬性都是不可再分的。如學(xué)生選課表中系名和系主任就不能合并為一個屬性,因?yàn)檫`反了第一范式。當(dāng)前所有的關(guān)系數(shù)據(jù)庫都支持第一范式,即要求表屬性都是原子屬性,即屬性的不可分性。

(2)第二范式(2NF)。要求在滿足第一范式的前提下,除去所有不完全依賴于主鍵的屬性(部分依賴)。如學(xué)生選課表中,就存在不滿足第二范式的問題,系名和系主任屬性部分依賴于編號屬性(主鍵),因此存在更新異常、數(shù)據(jù)冗余的問題。第二范式要求所有非主屬性(不屬于主鍵的屬性)都完全依賴于主鍵

(3)第三范式(3NF)。要求關(guān)系在滿足第二范式的前提下,除去所有傳遞依賴于主鍵的屬性,即關(guān)系中不含有對主鍵的傳遞依賴。傳遞依賴就是間接依賴。例如在關(guān)系R(學(xué)號,宿舍,費(fèi)用)中,費(fèi)用就間接依賴于學(xué)號。

總結(jié)

以上是生活随笔為你收集整理的数据库的关系运算和完整性约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。