數(shù)據(jù)庫(kù)原理與設(shè)計(jì)陶宏才_(tái)第1頁(yè)
數(shù)據(jù)庫(kù)原理與設(shè)計(jì)陶宏才_(tái)第2頁(yè)
數(shù)據(jù)庫(kù)原理與設(shè)計(jì)陶宏才_(tái)第3頁(yè)
數(shù)據(jù)庫(kù)原理與設(shè)計(jì)陶宏才_(tái)第4頁(yè)
數(shù)據(jù)庫(kù)原理與設(shè)計(jì)陶宏才_(tái)第5頁(yè)
已閱讀5頁(yè),還剩117頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)庫(kù)原理及設(shè)計(jì)Principle and Design of Database 主講: 朱 焱 博 士 SIST, SWJTU2009.101學(xué)習(xí)目的和要求從概念化數(shù)據(jù)庫(kù)設(shè)計(jì) 進(jìn)入邏輯數(shù)據(jù)庫(kù)設(shè)計(jì)關(guān)系數(shù)據(jù)模型的基本概念和術(shù)語(yǔ)關(guān)系數(shù)據(jù)模型上的完整性約束關(guān)系代數(shù)關(guān)系運(yùn)算第三章 關(guān)系數(shù)據(jù)模型 DBMS無(wú)關(guān) DBMS有關(guān) 數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程概念模式內(nèi)模式外模式1外模式n邏輯設(shè)計(jì)模式優(yōu)化數(shù)據(jù)庫(kù)外模式2數(shù)據(jù)庫(kù)需求概念設(shè)計(jì)用戶(hù)組1用戶(hù)組n需求收集和分析使用高級(jí)數(shù)據(jù)模型ERM使用特定的DBMS的數(shù)據(jù)模型集成物理DB設(shè)計(jì)關(guān)系數(shù)據(jù)模型數(shù)據(jù)模型的三要素,是本章學(xué)習(xí)的路標(biāo)靜態(tài)數(shù)據(jù)結(jié)構(gòu);動(dòng)態(tài)數(shù)據(jù)操作;完整性約束這三要素體現(xiàn)

2、在如下問(wèn)題中:如何表達(dá)數(shù)據(jù)本身?如何表達(dá)數(shù)據(jù)間的聯(lián)系?有哪些動(dòng)態(tài)數(shù)據(jù)操作?能表達(dá)哪些完整性約束?完整性約束如何設(shè)定?完整性約束的效果?如何進(jìn)行關(guān)系模型的DB設(shè)計(jì)?ER模式向關(guān)系數(shù)據(jù)模式邏輯映射概念模式與邏輯模式的對(duì)應(yīng)ER SchemaRDB Schema數(shù)據(jù)結(jié)構(gòu)實(shí)體集+屬性聯(lián)系集+屬性主鍵(候選鍵)?數(shù)據(jù)操作/?約束一般性約束(聯(lián)系類(lèi)型約束)鍵約束參與約束? ER 關(guān)系 - 表描述實(shí)體關(guān)系模式(relational schema)的關(guān)鍵:基本表(base table),也簡(jiǎn)稱(chēng)關(guān)系表。表由“列”(Column)和“行”(Row)組成。行又叫元組(tuple),列又叫字段(field)。數(shù)據(jù)對(duì)象(

3、實(shí)體集)用關(guān)系(表)來(lái)定義。ER中實(shí)體集的屬性表中的列(字段、屬性);ER中實(shí)體集中的每個(gè)實(shí)體實(shí)例表中的行(元組、記錄)。姓名學(xué)號(hào)D.O.BPeter Bach20001015-10-1982Lisa Baumann200010212-7-1982列行學(xué)生表ER關(guān)系 - 表描述聯(lián)系ER模式中聯(lián)系是單獨(dú)描述的。而在關(guān)系模式中,聯(lián)系也可以用表來(lái)描述。例如,選課聯(lián)系選課表。表中有來(lái)自學(xué)生和課程兩個(gè)實(shí)體的屬性,而成績(jī)是選課關(guān)聯(lián)自身的描述屬性。列的取值范圍稱(chēng)為域(Domain)。例如,成績(jī)的范圍一般是:0-100。學(xué)生選課表姓名學(xué)號(hào)課程號(hào)課程名成績(jī)Peter Bach2000101A1033數(shù)據(jù)庫(kù)85L

4、isaBaumann2000102A1030數(shù)據(jù)倉(cāng)儲(chǔ)化91關(guān)系模式、關(guān)系、主鍵、外鍵關(guān)系模式(Schema)由關(guān)系名、和各個(gè)列表示。 數(shù)學(xué)上表示為:R(A1,A2,An)。關(guān)系實(shí)例:由表中的各行構(gòu)成。常簡(jiǎn)稱(chēng)關(guān)系;行序不重要,而列序重要。每個(gè)元組的字段必須對(duì)應(yīng)關(guān)系模式中的字段。(物理存儲(chǔ)要求的) 關(guān)系實(shí)例表示:,ai為屬性Ai的值。ER模型中的候選鍵關(guān)系中的候選鍵ER模型中的主鍵關(guān)系中的主鍵 (Primary Key, PK)關(guān)系中的新概念-外鍵,描述表與表之間的關(guān)聯(lián)。表與表的聯(lián)系姓名學(xué)號(hào)D.O.B班號(hào)Peter Bach2000-1015-10-1986計(jì)算機(jī)200001主鍵班號(hào)班名人數(shù) 計(jì)算

5、機(jī)200001計(jì)1班50外鍵學(xué)生表班級(jí)表主鍵/候選鍵外鍵(Foreign Key,FK): A表中的某個(gè)屬性(組)是B表中的候選鍵或主鍵,則稱(chēng)該屬性(組)為A表的外鍵。要使B表中的某個(gè)屬性成為A表的外鍵,必須確定該屬性為B表的主鍵或候選鍵。如何指定?完整性約束的任務(wù)。關(guān)系模型術(shù)語(yǔ)關(guān)系模式術(shù)語(yǔ)一般術(shù)語(yǔ)關(guān)系模式記錄類(lèi)型屬性字段屬性值字段值元組1記錄1計(jì)算機(jī)2000015-10-19862000101Peter Bach班號(hào)D.O.B學(xué)號(hào)姓名R關(guān)系的性質(zhì)關(guān)系是一個(gè)集合。集合中的元素是元組,每個(gè)元組的屬性數(shù)目應(yīng)該相同。關(guān)系是一種規(guī)范化了的二維表格,不是一般的二維表。它的性質(zhì)是:關(guān)系中每一個(gè)屬性值都是不

6、可分解的;關(guān)系中不允許出現(xiàn)重復(fù)元組;關(guān)系是元組的集合,因此無(wú)行序;關(guān)系的列是有序的。邏輯映射之?dāng)?shù)據(jù)結(jié)構(gòu)映射概念模式與邏輯模式的對(duì)應(yīng)ER模型關(guān)系數(shù)據(jù)模型數(shù)據(jù)結(jié)構(gòu)實(shí)體集實(shí)體集屬性聯(lián)系集與屬性實(shí)體的實(shí)例主鍵/候選鍵??數(shù)據(jù)操作/?約束聯(lián)系類(lèi)型約束鍵約束完全參與約束? 關(guān)系表表的主鍵/候選鍵表的列表和列表中的各行?SQL語(yǔ)言 SQL發(fā)音為Sequel,現(xiàn)在趨向于發(fā)音為S-Q-L。 最早在IBM System-R RDBMS 上使用的查詢(xún)語(yǔ)言; 第一個(gè)標(biāo)準(zhǔn)由ANSI于1986年制訂,稱(chēng)為SQL-86; 1992年推出了SQL-92,是大多數(shù)RDBMS支持的版本; 1999年提出SQL:1999(SQL3

7、),是SQL-92的擴(kuò)展。 SQL在數(shù)據(jù)庫(kù)界之外也受到重視。在軟件工程、AI、萬(wàn)維網(wǎng)數(shù)據(jù)管理、等領(lǐng)域顯示了潛力。 SQL成為國(guó)際標(biāo)準(zhǔn)后,由于各種類(lèi)型的計(jì)算機(jī)和DBS都采用SQL作為其存取語(yǔ)言和標(biāo)準(zhǔn)接口,從而使數(shù)據(jù)庫(kù)世界有可能鏈接為一個(gè)整體。前景非常好。幾個(gè)重要的SQL語(yǔ)言命令SQL DDL針對(duì)表結(jié)構(gòu)的操作Create(創(chuàng)建) Drop(刪除)Alter(修改)SQL DML針對(duì)表中數(shù)據(jù)的操作Insert(插入) Delete(刪除)Update(修改)Select(查詢(xún))關(guān)系模型中的數(shù)據(jù)操作 動(dòng)態(tài)的數(shù)據(jù)操作:增加、刪除、修改和查詢(xún),簡(jiǎn)稱(chēng):增刪改查詢(xún)。增加:INSERT R VALUES (林海

8、,男)修改:UPDATE R SET name=張湖邏輯映射之?dāng)?shù)據(jù)操作概念模型與邏輯模型的對(duì)應(yīng)ER模型關(guān)系數(shù)據(jù)模型數(shù)據(jù)結(jié)構(gòu)實(shí)體集實(shí)體集屬性聯(lián)系集與屬性實(shí)體的實(shí)例主鍵/候選鍵??數(shù)據(jù)操作/?約束聯(lián)系類(lèi)型約束鍵約束完全參與約束? 關(guān)系表表的主鍵/候選鍵表的列表和列表中的各行使用SQL語(yǔ)句對(duì)表進(jìn)行操作?關(guān)系模型上完整性約束完整性約束(Integrity Constraints,ICs)可以幫助阻止非法數(shù)據(jù)的輸入。它要求存入DB的數(shù)據(jù)應(yīng)滿(mǎn)足一些條件。在定義一個(gè)關(guān)系模式的同時(shí),或之后定義完整性約束。當(dāng)表中數(shù)據(jù)發(fā)生變化(如Insert、Delete、Update)時(shí),DBMS即檢查更新的數(shù)據(jù)是否滿(mǎn)足完整性

9、約束指定的條件。幾種完整性約束:域約束、主鍵約束、唯一約束、外鍵約束等。幾種完整性約束(1)域限制(Domain Constraint)每個(gè)屬性A的值必須是來(lái)自域 dom(A)的原子值。例如,表中某列的數(shù)據(jù)類(lèi)型為“整數(shù)型”,那么該列的各記錄值就不能是“字符串”。不必顯示指定。主鍵約束(Primary Key Constraint)概念:針對(duì)主鍵而言,保證主鍵的完整性。要求:主鍵值必須唯一,且不能為空值。例如:作者不能作主鍵。需要顯示指定。(如何指定,以后介紹) 幾種完整性約束(2)唯一約束(Unique Constraint)主鍵可以用主鍵約束來(lái)保證其值的完整性。因?yàn)楹蜻x鍵也能唯一標(biāo)識(shí)關(guān)系實(shí)例

10、元組,因此,保證候選鍵的完整性,需要唯一約束。要求值唯一,允許有一個(gè)且僅有一個(gè)空值。以上是“表本身”的完整性約束。外鍵限制(Foreign Key Constraint)也被稱(chēng)為“參照完整性約束”。目的:用來(lái)維護(hù)表與表之間的數(shù)據(jù)一致性,即其中一張表的改動(dòng),可能要求另一張表要作出某些改動(dòng),以保持?jǐn)?shù)據(jù)一致。為使DBMS能做這樣的檢查,則應(yīng)指定這種涉及兩個(gè)表的ICs,此即外鍵限制。主表與從表主表:指外鍵在另一張表中作主/候選鍵的表。(例中的班級(jí)表)從表:指含有外鍵的表。(例中的學(xué)生表)姓名學(xué)號(hào)D.O.B班號(hào)Peter Bach2000-1015-10-1986計(jì)算機(jī)200001班號(hào)班名人數(shù) 計(jì)算機(jī)2

11、00001計(jì)1班50 計(jì)算機(jī)200010計(jì)10班45班級(jí)表(主表)學(xué)生表 (從表)外鍵約束的例子(主表從表)姓名學(xué)號(hào)D.O.B班號(hào)Peter Bach2000-1015-10-1986計(jì)算機(jī)200001班號(hào)班名人數(shù) 計(jì)算機(jī)200001計(jì)1班50 計(jì)算機(jī)200010計(jì)10班45學(xué)生表 (從表)班級(jí)表(主表)外鍵主鍵插入刪除修改分析外鍵約束(主表從表)對(duì)主表進(jìn)行三種操作,觀察對(duì)表間完整性的影響: 對(duì)主表中的主鍵進(jìn)行操作插入:要求插入值滿(mǎn)足主鍵限制即可,不影響其它表。修改:可能會(huì)影響與該主鍵相關(guān)的從表的外鍵值。當(dāng)相應(yīng)的外鍵值存在時(shí),有兩個(gè)策略可用:一是改變對(duì)應(yīng)從表的所有外鍵值,使之與主鍵一致;其二是

12、不允許修改主表中的主鍵值。刪除:可能會(huì)影響與該主鍵相關(guān)的從表的外鍵值。若相應(yīng)的外鍵值存在時(shí),策略有二:一是不允許刪除主表的主鍵值;二是級(jí)聯(lián)刪除從表中相應(yīng)外鍵值所在的行。外鍵約束的例子(從表主表)姓名學(xué)號(hào)D.O.B班號(hào)Peter Bach2000-1015-10-1986計(jì)算機(jī)200001主鍵班號(hào)班名人數(shù) 計(jì)算機(jī)200001計(jì)1班50學(xué)生表(從表)班級(jí)表(主表)外鍵主鍵/候選鍵插入刪除修改分析外鍵約束(從表主表)對(duì)從表中的外鍵操作插入:要求插入的外鍵值應(yīng)“參照”(Reference)主表中的主鍵值。 修改:要求修改的外鍵值“參照”主表中的主鍵值 。刪除:不需要參照主表中的主鍵值。外鍵約束小結(jié)維護(hù)

13、表間數(shù)據(jù)完整性從兩個(gè)方向上完成,即:主表從表:“主表”中的主鍵值在修改和刪除時(shí),“從表”中與該主鍵值相同的外鍵值可“級(jí)聯(lián)”(CASCADE)修改和刪除,或“禁止”(NO ACTION)“主表”主鍵值的修改和刪除。從表主表:表示“從表”中的外鍵值在插入和修改時(shí),其值應(yīng)“參照”(Reference)“主表”中的主鍵值。表間數(shù)據(jù)完整性維護(hù)的實(shí)現(xiàn)利用外鍵約束定義對(duì)從表定義外鍵限制(或稱(chēng)參照完整性)完成主表和從表間兩個(gè)方向的數(shù)據(jù)完整性;利用觸發(fā)器主表的觸發(fā)器維護(hù)主表到從表方向的數(shù)據(jù)完整性,而從表的觸發(fā)器維護(hù)從表到主表方向的參照完整性。 SQL-92標(biāo)準(zhǔn)只支持外鍵約束方式。如果使用觸發(fā)器,必須檢查所用的R

14、DBMS是否支持。 其他的約束 檢查限制域限制、主鍵限制、唯一限制和外鍵限制是關(guān)系數(shù)據(jù)模型中最基本的限制,大多數(shù)商用系統(tǒng)都支持他們。其他還有更一般的限制,如:檢查限制(Check Constraint,亦稱(chēng)“表限制”)檢查某一列值是否在某一取值范圍之內(nèi);表中某幾列是否滿(mǎn)足指定的條件。與單個(gè)表有關(guān)。例如:中學(xué)生的年齡定義為兩位整數(shù),范圍很大,用戶(hù)可以寫(xiě)如下規(guī)則,將年齡限制在10-20歲之間CHECK(AGE BETWEEN 10 AND 20)其他的約束性 斷言限制 斷言限制(Assertion)檢查表中個(gè)別列、整個(gè)表或表與表之間是否滿(mǎn)足指定的條件。與多個(gè)表有關(guān),是關(guān)系之間的約束。例如:希望限定

15、計(jì)算機(jī)圖書(shū)的作者一定是女性。這時(shí),僅靠鍵約束、唯一約束和外鍵限制不能實(shí)現(xiàn),因?yàn)檫@個(gè)要求涉及到兩張表(關(guān)系):Book,Author。可以寫(xiě)為:Create Assertion NoManComputerAuthorCheck (Book.計(jì)算機(jī)類(lèi).作者 Author.性別為男性 = 空集) 與主鍵約束和唯一限制的定義不同,定義表約束和斷言約束時(shí)要顯式定義。完整性約束的實(shí)施關(guān)系創(chuàng)建并指定了ICs后,當(dāng)關(guān)系“更新”時(shí)(指插入、刪除和修改)應(yīng)實(shí)施檢查。對(duì)域限制、主鍵限制和唯一限制的實(shí)施由于影響直接,故只要插入/刪除/修改命令違背了限制,即被拒絕。而其它ICs(如一般性限制)的違背檢查通常是在每個(gè)SQ

16、L語(yǔ)句之后。對(duì)參照完整性(外鍵)限制的實(shí)施外鍵限制的影響較復(fù)雜,要從兩個(gè)方向分別進(jìn)行,但不是同時(shí)進(jìn)行。完整性約束小結(jié)SQL中把完整性約束分成三大類(lèi):域約束基本表約束:主鍵約束;候選鍵約束(唯一約束);外鍵約束; 檢查約束表間約束: 斷言邏輯映射之約束概念模式與邏輯模式的對(duì)應(yīng)ER模型關(guān)系數(shù)據(jù)模型數(shù)據(jù)結(jié)構(gòu)實(shí)體集實(shí)體集屬性聯(lián)系集與屬性實(shí)體的實(shí)例主鍵/候選鍵??數(shù)據(jù)操作/?約束聯(lián)系類(lèi)型約束鍵約束完全參與約束? 關(guān)系表表的主鍵/候選鍵表的列表和列表中的各行使用SQL語(yǔ)句對(duì)表進(jìn)行操作域約束、主鍵約束、唯一約束、外鍵約束、檢查約束、斷言SQL Server對(duì)數(shù)據(jù)完整性約束的支持不同的數(shù)據(jù)庫(kù)管理系統(tǒng)廠商開(kāi)發(fā)不

17、同類(lèi)型的SQL,被稱(chēng)為數(shù)據(jù)庫(kù)方言。例如:Microsoft SQL Server 產(chǎn)品中的SQL方言叫Transact-SQL。 T-SQL,即事務(wù)SQL,是對(duì)標(biāo)準(zhǔn)SQL的擴(kuò)展。T-SQL由SQL語(yǔ)句、函數(shù)和存儲(chǔ)過(guò)程三部分組成。T-SQL除了具有標(biāo)準(zhǔn)的子語(yǔ)言:DDL,DML,DCL之外,還具有過(guò)程控制能力和事務(wù)控制能力。 T-SQL有兩類(lèi)變量:局部變量:如 name, price全局變量(系統(tǒng)定義,用戶(hù)只能引用,不能修改、定義):如 error, rowcountSQL Server系統(tǒng)數(shù)據(jù)類(lèi)型 (一)pp179(pp139) 表4-2Tinyint, 1 byte,數(shù)值范圍是028-1精確小

18、數(shù)是numeric(p,s)、decimal(p,s).近似小數(shù)是float和real。Datetime表示日期和時(shí)間。例如:0329/ 2006 10:05:00:00:00 PM SQL Server系統(tǒng)數(shù)據(jù)類(lèi)型 (二)Char(n)和varchar(n)Char(10)可表示最多10個(gè)字符長(zhǎng)的字符串,物理存儲(chǔ)空間是10個(gè)字符,不能改變.如果輸入字符少于10,實(shí)際存儲(chǔ)仍然占滿(mǎn)10個(gè)字符長(zhǎng),不足部分用前空格補(bǔ)足.varchar(10)則不同,10為最大字符串長(zhǎng)度。實(shí)際輸入是幾個(gè)字符,存儲(chǔ)時(shí)只占滿(mǎn)幾個(gè)字符,是可變的。1234567890,1,650都是合法數(shù)據(jù)。但它們?cè)谏鲜鰞煞N數(shù)據(jù)類(lèi)型中所用空

19、間不同。Nchar,Nvarchar,ntext是Unicode 數(shù)據(jù)類(lèi)型SQL Server對(duì)完整性限制的支持SQL Server中的數(shù)據(jù)完整性可粗分為兩大類(lèi),如下表。完整性分類(lèi)現(xiàn)有實(shí)現(xiàn)方式備 注表本身的完整性Default(缺省)指定列的缺省值Rule(規(guī)則)指定列的取值范圍Check Constraint(檢查限制)SQL語(yǔ)句中有列級(jí)(即只涉及一列)和表級(jí)(涉及表中多列)兩種定義方法。Primary Key(主鍵限制)Unique(唯一限制)表間的完整性Foreign Key(外鍵限制)參照完整性限制的體現(xiàn),亦分列級(jí)與表級(jí)定義Trigger(觸發(fā)器)可利用觸發(fā)器來(lái)維護(hù)表間數(shù)據(jù)完整性 默認(rèn)

20、值(1)默認(rèn)值(default):用于為列或用戶(hù)自定義數(shù)據(jù)類(lèi)型指定缺省值,每一列或自定義類(lèi)型只能有一個(gè)缺省值。當(dāng)用戶(hù)沒(méi)有給指定有默認(rèn)值的列輸入數(shù)據(jù)時(shí),RDBMS自動(dòng)用該默認(rèn)值代替。兩種方式:表定義時(shí)設(shè)定CREATE TABLE publishers(pub_id char(4)NOT NULL, pub_name varchar(40) NULL, city varchar(20)DEFAULT Pasadena, state char(2)DEFAULT CA)默認(rèn)值驗(yàn)證屬性Pub_idPub_namecitystate元組1 0001NULLPasadenaCACREATE table 是

21、創(chuàng)建表命令。 在SQL Server中,對(duì)字符型數(shù)據(jù)須用單引號(hào)括起來(lái)。利用兩條SQL語(yǔ)句來(lái)驗(yàn)證默認(rèn)的作用與效果。INSERT publishers (pub_id) VALUES (0001)SELECT * FROM publisherspublishers默認(rèn)值(2)2. 用單獨(dú)的命令來(lái)創(chuàng)建Default當(dāng)多個(gè)表中的列,它們的缺省值相同時(shí),這種方式很有用。 步驟:1)CREATE DEFAULT 缺省名 AS 缺省值 讓某個(gè)默認(rèn)名的值為默認(rèn)值。 2)sp_bindefault 默認(rèn)名,表名.列名 將該默認(rèn)名綁定到表中某個(gè)列上。例子:設(shè)定一個(gè)“全局”缺省值,可多次賦值(綁定)CREATE D

22、EFAULT dft_state AS CAsp_bindefault dft_state, publishers.state要求列名的類(lèi)型與缺省值相同。綁定了缺省值后,并不會(huì)對(duì)綁定缺省值之前表中已存在的值產(chǎn)生影響,而只對(duì)綁定之后的值產(chǎn)生影響。取消缺省取消某列的缺省時(shí),按下列步驟:sp_unbindefault 表名.列名-取消綁定DROP DEFAULT 缺省名 -刪除缺省注意:應(yīng)首先將默認(rèn)值從綁定的列上都摘除之后,再刪除缺省,否則刪除不會(huì)成功。域約束規(guī)則(1)概念:針對(duì)表中的某一列,指明某列的取值范圍。在更新該列值時(shí),RDBMS首先要檢查是否在該規(guī)則規(guī)定的范圍內(nèi)。 設(shè)定步驟 :1)CREA

23、TE RULE 規(guī)則名 AS 規(guī)則2)sp_bindrule 規(guī)則名,表名.列名 例如: CREATE RULE state_rule AS state IN (CA,CO,WA) sp_bindrule state_rule, publishers.state規(guī)則可用IN(),BETWEEN , AND ,關(guān)系式、=、= 和 LIKE 操作符描述 。創(chuàng)建規(guī)則時(shí),應(yīng)注意AS后有一個(gè)以開(kāi)頭的臨時(shí)變量。域約束規(guī)則(2)解除規(guī)則綁定:sp_unbindrule 表名.列名 刪除規(guī)則:DROP RULE 規(guī)則名例子:CREATE TABLE publishers (pub_id char(4)NOT

24、NULL, pub_name varchar(40) NULL, cityvarchar(20) DEFAULT Pasadena, statechar(2)CREATE RULE state_rule AS state IN(CA,CO,WA) sp_bindrule state_rule, publishers.state規(guī)則作用的驗(yàn)證 INSERT publishers VALUES (0002,MIT Press,San Francisco,IL) 由于插入的state列的值“IL”不在該列所綁定規(guī)則規(guī)定的范圍之內(nèi), 因此,SQL Server會(huì)返回錯(cuò)誤信息,拒絕本信息的插入。如果將I

25、L改為CA,則該語(yǔ)句可成功執(zhí)行。擴(kuò)展用法先創(chuàng)建好用戶(hù)定義類(lèi)型,然后將創(chuàng)建好的缺省和規(guī)則綁定到用戶(hù)定義類(lèi)型上 綁定: sp_bindrule 規(guī)則名,用戶(hù)定義類(lèi)型 sp_bindefault 缺省名,用戶(hù)定義類(lèi)型摘除: sp_unbindefault 用戶(hù)定義類(lèi)型 sp_unbinderule 用戶(hù)定義類(lèi)型查看創(chuàng)建規(guī)則和缺省的過(guò)程:sp_helptext 規(guī)則名或缺省名規(guī)則檢查屬性的取值范圍。默認(rèn)值提供屬性在沒(méi)有設(shè)定值時(shí)的缺省。默認(rèn)值從屬于規(guī)則,當(dāng)默認(rèn)與規(guī)則都有時(shí),必須同時(shí)滿(mǎn)足。一般,綁定一個(gè)新規(guī)則或默認(rèn)時(shí),應(yīng)先摘除舊規(guī)則或舊默認(rèn)。如果沒(méi)有摘除,則自動(dòng)用新規(guī)則或新默認(rèn)替換舊的。SQL Serve

26、r 檢查約束(1)概念:類(lèi)似于規(guī)則,要求用戶(hù)插入到列或表中的數(shù)據(jù)滿(mǎn)足限制條件。分為列級(jí)檢查(針對(duì)表中一列)和表級(jí)檢查(針對(duì)同一表中多列)。列級(jí)檢查限制用IN、BETWEEN、AND或LIKE表達(dá),例如:CREATE TABLE publishers (pub_id char(4) NOT NULL, CONSTRAINT pub_id_constraint CHECK (pub_id IN(234,3344,564) OR pub_id LIKE 430-90-9 ), city varchar(20) NULL, state char(2)NULL)檢查約束名檢查約束命令關(guān)鍵字檢查約束(2)

27、表級(jí)檢查限制,例如:CREATE TABLE discounts( discounttype varchar(40) NOT NULL, store_id char(4) NULL, lowqtysmallint NULL, highqtysmallint NULL, discount float NOT NULL, CONSTRAINT low_high_check CHECK (lowqty highqty)列級(jí)檢查限制可用表級(jí)方式寫(xiě),表級(jí)限制也能用列級(jí)方式寫(xiě),但要求在第一個(gè)列定義后。缺省值須滿(mǎn)足檢查限制要求;檢查約束與規(guī)則的比較(1)檢查約束和規(guī)則都可以對(duì)一個(gè)表中的列的值進(jìn)行約束。例如:

28、創(chuàng)建一個(gè)雇員關(guān)系。要求部門(mén)編號(hào)的值必須在10-100之內(nèi),雇員的職務(wù)只能為下列之一:“Sales”、“Mgr”、“Clerk”檢查約束:CREATE TABLE emp( id smallint NOT NULL, name varchar(9), deptNo smallint, CONSTRAINT dept_constraint CHECK (deptNo BETWEEN 10 AND 100), job char(5), CONSTRAINT job_constraint CHECK ( job IN(Sales,Mgr,Clerk)檢查約束與規(guī)則比較(2)規(guī)則:CREATE TABL

29、E emp( id smallint NOT NULL, name varchar(9), dept smallint, job char(5))CREATE RULE dept_rule AS dept BETWEEN 10 AND 100Sp_bindrule dept_rule, emp.deptCREATE RULE job_rule AS job IN(Sales,Mgr,Clerk) Sp_bindrule job_rule, emp.job完成同一個(gè)功能可以使用“檢查約束和”規(guī)則“兩種方法。注意兩者不同的語(yǔ)法形式。主鍵約束(1)主鍵不能出現(xiàn)空值,且所有的值都是唯一的。在定義了主鍵

30、限制后,系統(tǒng)自動(dòng)為該表生成一個(gè)聚簇(Clustered)索引。 定義方式分為列級(jí)檢查和表級(jí)檢查。列級(jí)針對(duì)表中一列。列級(jí)主鍵約束:CREATE TABLE publishers ( pub_idchar(4) PRIMARY KEY,pub_namechar(30), cityvarchar(20) NULL,statechar(2) NULL)主鍵約束(2)表級(jí)主鍵約束:CREATE TABLE sales (stor_idchar(4) NOT NULL, datedatetimeNOT NULL, ord_numvarchar(20)NOT NULL, CONSTRAINT pk_sale

31、s_constr PRIMARY KEY (NONCLUSTERED) (stor_id,ord_num) pk_sales_constr為該主鍵約束的名稱(chēng),NONCLUSTERED表示非聚集索引。因?yàn)橄到y(tǒng)會(huì)自動(dòng)生成聚集索引,但用戶(hù)可以利用命令來(lái)更改。該例子中主鍵是復(fù)合鍵,是stor_id和 ord_num的組合。唯一約束(1)主要是針對(duì)候選鍵的限制。在定義了惟一限制后,系統(tǒng)自動(dòng)為該表生成一個(gè)非聚簇索引。用戶(hù)在定義時(shí)也可改成聚簇索引 。與主鍵約束的區(qū)別:所有值唯一,最多只能有一個(gè)空值。默認(rèn)索引為非聚簇(NonClustered)索引。 分為列級(jí)檢查和表級(jí)檢查。列級(jí)唯一限制:CREATE TAB

32、LE publishers ( pub_idchar(4) UNIQUE,pub_namechar(30)UNIQUE是定義唯一約束的命令關(guān)鍵字。唯一約束()表級(jí)唯一限制:CREATE TABLE sales ( stor_id char(4) NOT NULL, ord_num varchar(20) NOT NULL, date datetimeNOT NULL, CONSTRAINT uq_sales_constr UNIQUE CLUSTERED (stor_id,ord_num)其中,uq_sales_constr是該唯一約束的名稱(chēng), (stor_id,ord_num)構(gòu)成一個(gè)候選鍵

33、。上述命令的最后一句除了申明唯一約束,還定義了聚簇索引。 外鍵約束()維護(hù)表間完整性實(shí)際上是從兩個(gè)方向上完成的。外鍵約束定義的條件:在含外鍵的表上定義;即是在從表上定義。定義外鍵限制的列必須是另一個(gè)表中的主鍵或候選鍵外鍵限制分類(lèi):列級(jí)和表級(jí)。列級(jí)針對(duì)表中一列,表級(jí)則針對(duì)同一表中多列。外鍵約束()列級(jí)外鍵約束定義:(例3-14) CREATE TABLE titles ( title_id tid NOT NULL, title varchar(4) NULL, pub_id char(4)NULL CONSTRAINT pub_id_const REFERENCES publishers (p

34、ub_id) ON DELETE CASCADE ON UPDATE NO ACTION, notes varchar(23) NULL)定義了三個(gè)子約束:1。約束“從表主表”方向的參照完整性;2。約束“主表(刪除主鍵)從表”的數(shù)據(jù)完整性。3。約束“主表(修改主鍵)從表”的數(shù)據(jù)完整性。外鍵約束的名稱(chēng)從表參照主表 主表如果有如下操作時(shí),從表級(jí)聯(lián)操作或主表不做操作 外鍵外鍵約束()表級(jí)外鍵限制:參看p107例。外鍵約束定義中的行動(dòng),表示當(dāng)對(duì)主表的主鍵值做某種操作(刪除或修改時(shí)),可采取的處理策略有二種:CASCADE(針對(duì)從表的策略)No Action(針對(duì)主表的策略)SQL-92定義有四種策略,

35、分別是:Cascade, No Action, Set Null 和 Set Default。但SQL SERVER 和SYBASE只支持以上兩種。如果不定義行動(dòng),則缺省的處理為NO ACTION。觸發(fā)器(1)利用主表和從表的觸發(fā)器,也可以保持主/從表間的數(shù)據(jù)完整一致性。 publishers表的主鍵是pub_id,它也出現(xiàn)在titles表中,即titles表中的pub_id是外鍵,也就是說(shuō),publishers為主表,而titles則為從表。要維護(hù)兩表間的完整性,可對(duì)titles用外鍵限制或參照限制來(lái)維護(hù)它們間的完整性,或?qū)ublishers和titles用觸發(fā)器來(lái)維護(hù)它們間的完整性。觸發(fā)

36、器的創(chuàng)建: CREATE TRIGGER 觸發(fā)器名 ON 表名 FOR INSERT|UPDATE|DELETE,INSERT|UPDATE|DELETE AS SQL語(yǔ)句組 RETURN要建立觸發(fā)器的表FOR Update,Insert最多只能列三個(gè)用戶(hù)編寫(xiě)的一段SQL語(yǔ)句,要求該觸發(fā)器被觸發(fā)后應(yīng)做的事情觸發(fā)器(2)觸發(fā)器不帶參數(shù),不被用戶(hù)和程序調(diào)用,只能由用戶(hù)對(duì)DB中的表進(jìn)行操作時(shí)觸發(fā)(即:由操作激發(fā))。一個(gè)表中最多有三個(gè)觸發(fā)器,即:插入、修改和刪除,分別對(duì)應(yīng)各自的操作,例如:插入操作觸發(fā)“插入”觸發(fā)器。 主表和從表應(yīng)分別建立各自的觸發(fā)器,主表的觸發(fā)器維護(hù)主表到從表方向的數(shù)據(jù)完整性,而從表

37、的觸發(fā)器維護(hù)從表到主表方向的參照完整性。這里,主表和從表不需要定義外鍵,但必須有共同的列。沿用“外鍵約束”中的“主表和從表”,“主鍵和外鍵”的說(shuō)法。觸發(fā)器(3)系統(tǒng)為觸發(fā)器提供兩張表,即:inserted和deleted。當(dāng)操作為插入時(shí),則新數(shù)據(jù)也會(huì)寫(xiě)入inserted表中;當(dāng)操作為刪除時(shí),刪除數(shù)據(jù)會(huì)保存在deleted表中;而當(dāng)操作為修改時(shí),會(huì)同時(shí)用到這兩張表,先刪后寫(xiě)。 由刪除操作激發(fā)的主表觸發(fā)器示例: CREATE TRIGGER pub_del ON publishers FOR DELETE ASIF rowcount=0RETURNDELETE titlesFROM titles

38、t, deleted dWHERE t.pub_id=d.pub_idRETURN 系統(tǒng)變量,表示 publishers表中有幾行記錄被刪除了。級(jí)聯(lián)刪除titles表中對(duì)應(yīng)的行,類(lèi)似于外鍵約束中的CASCADE行動(dòng).觸發(fā)器(4)查看觸發(fā)器的創(chuàng)建過(guò)程: sp_helptext 觸發(fā)器名查看表依賴(lài)的觸發(fā)器或觸發(fā)器涉及的表:sp_depends 表名或觸發(fā)器名 刪除觸發(fā)器:DROP TRIGGER 觸發(fā)器名 注意不能對(duì)視圖和臨時(shí)表創(chuàng)建觸發(fā)器;如果建立觸發(fā)器的表被刪除,那么其上的觸發(fā)器將被自動(dòng)刪除。視圖(1)視圖是一個(gè)從其他表中導(dǎo)出的表,其他表可以是DB中的基表也可以是預(yù)先定義的視圖。在數(shù)據(jù)庫(kù)中并不存

39、儲(chǔ)視圖(on-the-fly),因此又稱(chēng)它為“虛表”。用視圖定義新的查詢(xún)或視圖,也可以通過(guò)視圖來(lái)更新基表。但在更新視圖時(shí),應(yīng)記住視圖與基表的區(qū)別及對(duì)視圖更新的限制。可以通過(guò)視圖維護(hù)基表的安全性,例如:設(shè)定讓用戶(hù)只操作視圖,而不能操作基表,來(lái)提高表中其他數(shù)據(jù)的安全性。視圖(2)視圖創(chuàng)建命令:CREATE VIEW 視圖名 屬性列表 AS SELECT-FROM-WHERE 語(yǔ)句例如:產(chǎn)生一張California州的作家表。CREATE VIEW ca_authors AS SELECT au_id, au_lname, au_fname, phone, state, contract FROM

40、authors WHERE state=CA查看視圖:sp_help 視圖名查看視圖的創(chuàng)建過(guò)程: sp_helptext 視圖名刪除視圖:DROP VIEW 視圖名視圖更新(1)視圖更新(update,insert,delete)是很復(fù)雜的操作,容易造成問(wèn)題,因?yàn)橐晥D上的修改都必須反映到基表中。如果視圖屬性中包含基表的主鍵(或其他候選鍵)僅在單個(gè)基本表上定義沒(méi)有使用任何聚集函數(shù)的視圖 該視圖是可更新的。因?yàn)椋總€(gè)視圖記錄都可以在基表中有對(duì)應(yīng)的記錄。從多個(gè)表組合導(dǎo)出的視圖是不能更新的。利用聚集函數(shù)定義的視圖是不可更新的。視圖更新(2)視圖的數(shù)據(jù)插入:對(duì)視圖插入一行也會(huì)在基表中插入一行。對(duì)基表中沒(méi)

41、有出現(xiàn)在視圖中的列,以NULL代替。由于主鍵不能用NULL值,如果視圖中沒(méi)有主鍵,那么對(duì)視圖的插入將被拒絕。如果插入的數(shù)據(jù)在基表中,而沒(méi)有在視圖中,SQL-92是允許的。例如,p115(89),例3-25。如果要避免這樣的插入,可使用 With Check Option。書(shū)上的例3-26。ER模型映射到關(guān)系模型實(shí)體映射為表:直接映射。實(shí)體名即關(guān)系名。實(shí)體型中的每個(gè)屬性對(duì)應(yīng)表中的屬性,實(shí)體型中的每個(gè)主鍵和候選鍵即是表的主鍵和候選鍵。ER中復(fù)合屬性的簡(jiǎn)單成員屬性直接成為表的屬性。如:姓名(現(xiàn)用名,曾用名)現(xiàn)用名,曾用名如表一,表二。主持任期教師性別教師證號(hào)姓名工作起始日期1mn大學(xué)大學(xué)地址大學(xué)名稱(chēng)

42、課程課程名稱(chēng)課程號(hào)n講授11教師證號(hào)姓名性別19880321T.Neuer女20040201A.Schwack男表一:教師表表二:課程課程號(hào)課程名稱(chēng)3201243數(shù)據(jù)結(jié)構(gòu)3241220數(shù)據(jù)挖掘技術(shù)1:1聯(lián)系映射為單獨(dú)的表教師證號(hào)大學(xué)名稱(chēng)任期19880321 SWJTU419770201XY-Uni. 4主持任期教師性別教師證號(hào)姓名工作起始日期1mn大學(xué)大學(xué)地址大學(xué)名稱(chēng)課程課程名稱(chēng)課程號(hào)n講授11教師證號(hào)大學(xué)名稱(chēng)任期19880321 SWJTU419770201XY-Uni. 4主持大學(xué)表 主持大學(xué)表 教師(教師證號(hào),姓名,性別)大學(xué)(大學(xué)名稱(chēng),大學(xué)地址)1:N聯(lián)系映射為單獨(dú)的表教師證號(hào)大學(xué)名稱(chēng)

43、工作起始日期19880321 SWJTU419770201XY-Univ. 4主持任期教師性別教師證號(hào)姓名工作起始日期1mn大學(xué)大學(xué)地址大學(xué)名稱(chēng)課程課程名稱(chēng)課程號(hào)n講授11教師(教師證號(hào),姓名,性別)大學(xué)(大學(xué)名稱(chēng),大學(xué)地址)工作M:N聯(lián)系映射為單獨(dú)的表教師證號(hào)課程號(hào)19880321 SWJTU19770201XY-Univ. 主持任期教師性別教師證號(hào)姓名工作起始日期1mn大學(xué)大學(xué)地址大學(xué)名稱(chēng)課程課程名稱(chēng)課程號(hào)n講授11教師(教師證號(hào),姓名,性別)課程(課程號(hào),課程名稱(chēng))講授既是復(fù)合主鍵,又分別是外鍵聯(lián)系的轉(zhuǎn)換 減少表數(shù)量方式(1)實(shí)體之間的聯(lián)系有1:1,1:n, m:n 三種,采取的策略是不

44、一樣的。(1)1:1的轉(zhuǎn)換兩個(gè)實(shí)體分別轉(zhuǎn)換成兩個(gè)關(guān)系模式可在任意一個(gè)關(guān)系的屬性中加入另一個(gè)關(guān)系的鍵和聯(lián)系類(lèi)型的屬性。如表三。主持任期教師性別教師證號(hào)姓名工作起始日期1mn大學(xué)大學(xué)地址大學(xué)名稱(chēng)課程課程名稱(chēng)課程號(hào)n講授11大學(xué)名稱(chēng)大學(xué)校長(zhǎng)工作證號(hào)大學(xué)地址任期西南交通大學(xué)19760201四川、成都2005-2007表三:大學(xué)關(guān)系表聯(lián)系的轉(zhuǎn)換 減少表數(shù)量方式(2)(2)1:n的聯(lián)系類(lèi)型轉(zhuǎn)換兩個(gè)實(shí)體轉(zhuǎn)換成兩個(gè)關(guān)系模式將聯(lián)系合并到n端實(shí)體中。即在n端實(shí)體屬性中加入1端的關(guān)系的鍵和聯(lián)系類(lèi)型的屬性。如表四。主持任期教師性別教師證號(hào)姓名工作起始日期1mn大學(xué)大學(xué)地址大學(xué)名稱(chēng)課程課程名稱(chēng)課程號(hào)n講授11教師證號(hào)姓

45、名性別大學(xué)名稱(chēng)工作起始日期19800201A.Schwack男TU Darm1980.3.22表四:教師工作表聯(lián)系的轉(zhuǎn)換 減少表數(shù)量方式(3)(3)M:N聯(lián)系類(lèi)型轉(zhuǎn)換兩個(gè)實(shí)體轉(zhuǎn)換成兩個(gè)關(guān)系。m:n聯(lián)系不能由一個(gè)實(shí)體的主鍵唯一識(shí)別,必須由所關(guān)聯(lián)實(shí)體的主鍵共同識(shí)別。將聯(lián)系轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系。聯(lián)系的屬性、兩個(gè)實(shí)體的主鍵都成為這個(gè)獨(dú)立關(guān)系的屬性。如表五。教師證號(hào)課程號(hào)200402013201243200402013241220198803213241220表五:講授關(guān)系主持任期教師性別教師證號(hào)姓名工作起始日期1mn大學(xué)大學(xué)地址大學(xué)名稱(chēng)課程課程名稱(chēng)課程號(hào)n講授11ER 聯(lián)系類(lèi)型約束關(guān)系模型 表1:1鍵

46、約束參與實(shí)體關(guān)系表聯(lián)系聯(lián)系獨(dú)立的關(guān)系表一端實(shí)體的主鍵和聯(lián)系屬性移到另一端實(shí)體的關(guān)系表中1:n鍵約束參與實(shí)體關(guān)系表聯(lián)系聯(lián)系獨(dú)立的關(guān)系表“1”端實(shí)體的主鍵和聯(lián)系屬性移動(dòng)到“n”端實(shí)體的關(guān)系表中m:n無(wú)鍵約束參與實(shí)體關(guān)系表聯(lián)系獨(dú)立的關(guān)系表,由參與實(shí)體的主鍵、聯(lián)系的屬性共同構(gòu)成。ER模型的轉(zhuǎn)換實(shí)例 旅游線路開(kāi) 設(shè) 旅游班次有 旅游團(tuán)組成 游客 載運(yùn) 食宿 交通 工具賓館 參加 安全 保險(xiǎn)陪同 導(dǎo)游 1nmnmnmn1n111n八個(gè)實(shí)體類(lèi)型七個(gè)聯(lián)系類(lèi)型實(shí)體和聯(lián)系的屬性旅游線路 (路線號(hào),起點(diǎn),終點(diǎn))旅游班次 (班次號(hào),出發(fā)日期,回程日期,報(bào)價(jià))旅游團(tuán) (團(tuán)號(hào),團(tuán)名,人數(shù))游客(游客編號(hào),姓名,年齡,性別

47、)導(dǎo)游(導(dǎo)游編號(hào),姓名,年齡,性別,職稱(chēng))交通工具(交通工具編號(hào))賓館(賓館編號(hào),賓館名,星級(jí),標(biāo)準(zhǔn)房?jī)r(jià))保險(xiǎn)單 (保險(xiǎn)單編號(hào),保險(xiǎn)費(fèi),投保日期)開(kāi)設(shè) (旅游班次季節(jié)時(shí)段)食宿(團(tuán)體訂單折扣)ER模型的轉(zhuǎn)換實(shí)例分析旅游線路開(kāi)設(shè)旅游班次有旅游團(tuán)組成游客載運(yùn)食宿交通工具賓館參加安全保險(xiǎn)陪同導(dǎo)游1nmnmnmn1n111n13451179旅游線路 (路線號(hào),起點(diǎn),終點(diǎn))旅游班次 (班次號(hào),出發(fā)日期,回程日期,報(bào)價(jià))開(kāi)設(shè) (旅游班次季節(jié)時(shí)段)游客(游客編號(hào),姓名,年齡,性別)旅游團(tuán) (團(tuán)號(hào),團(tuán)名,人數(shù))導(dǎo)游(導(dǎo)游編號(hào),姓名,年齡,性別,職稱(chēng))交通工具(交通工具編號(hào))賓館(賓館編號(hào),賓館名,星級(jí),標(biāo)準(zhǔn)房

48、價(jià))保險(xiǎn)單 (保險(xiǎn)單編號(hào),保險(xiǎn)費(fèi),投保日期)286食宿(團(tuán)體訂單折扣) 10轉(zhuǎn)換后的關(guān)系模式旅游線路 (路線號(hào),起點(diǎn),終點(diǎn))旅游班次 (班次號(hào),出發(fā)日期,回程日期,報(bào)價(jià),路線號(hào),旅游班次季節(jié)時(shí)段)交通工具(交通工具編號(hào))旅游團(tuán) (團(tuán)號(hào),團(tuán)名,人數(shù), 旅游班次號(hào))游客(游客編號(hào),姓名,年齡,性別,團(tuán)號(hào))導(dǎo)游(導(dǎo)游編號(hào),姓名,年齡,性別,職稱(chēng))賓館(賓館編號(hào),賓館名,星級(jí),標(biāo)準(zhǔn)房?jī)r(jià))安全保險(xiǎn) (保險(xiǎn)單編號(hào),保險(xiǎn)費(fèi),投保日期,團(tuán)號(hào))食宿(旅游班次號(hào),賓館編號(hào),團(tuán)體訂單折扣)載運(yùn)(旅游班次號(hào),交通工具編號(hào))陪同 (團(tuán)號(hào),導(dǎo)游編號(hào)) 請(qǐng)為一家IT培訓(xùn)的公司建立一個(gè)概念數(shù)據(jù)模型以滿(mǎn)足該公司的數(shù)據(jù)需求。公司

49、有: 教師(教師編號(hào)、姓名、性別、年齡、職稱(chēng)); 學(xué)員(學(xué)員編號(hào)、姓名、年齡、單位); 培訓(xùn)課程(課程編號(hào)、名稱(chēng)、學(xué)時(shí)); 教師應(yīng)分屬各教研組(組號(hào)、組名); 學(xué)員分屬各培訓(xùn)班(班號(hào)、班名、人數(shù)); 實(shí)體間的聯(lián)系及它們的屬性有:教師屬于教研組,一個(gè)組可有多名教師,但一個(gè)教師只屬一個(gè)教研組;學(xué)員屬于培訓(xùn)班,一個(gè)班可有多名學(xué)員,但一個(gè)學(xué)員只屬一個(gè)培訓(xùn)班;學(xué)員學(xué)習(xí)課程,為多對(duì)多聯(lián)系,含成績(jī)屬性;教師為培訓(xùn)班講授課程,為m:n:k聯(lián)系,含講授年度屬性。請(qǐng)畫(huà)出ER圖,要求標(biāo)出實(shí)體的主鍵、聯(lián)系的約束類(lèi)型和鍵約束 將此ER圖轉(zhuǎn)換為關(guān)系模型,要求標(biāo)出各關(guān)系的主鍵,如果存在的話(huà)還應(yīng)指明外鍵。 教研組(組號(hào),組名

50、)。培訓(xùn)班(班號(hào),班名,人數(shù))。教師(教師編號(hào),姓名,性別,年齡,職稱(chēng),組號(hào)),組號(hào)為外鍵。學(xué)員(學(xué)員編號(hào),姓名,年齡,單位,班號(hào)),班號(hào)為外鍵。課程(課程編號(hào),名稱(chēng),學(xué)時(shí))。講授(教師編號(hào),班號(hào),課程編號(hào),年度),教師編號(hào)、班號(hào)和課程編號(hào)均各為外鍵。學(xué)習(xí)(課程編號(hào),學(xué)員編號(hào),成績(jī)),課程編號(hào)和學(xué)員編號(hào)均各為外鍵。關(guān)系數(shù)據(jù)庫(kù)模型關(guān)系(表),字段(列),元組(行),域,主鍵,外鍵關(guān)系模式的性質(zhì)完整性約束域約束、主鍵約束、唯一約束、外鍵約束SQL Server中的數(shù)據(jù)完整性約束視圖ER模型向關(guān)系數(shù)據(jù)庫(kù)模型的轉(zhuǎn)換關(guān)系代數(shù)五個(gè)基本操作(選擇、投影、集合并、幾何差,集合積)自然聯(lián)結(jié)關(guān)系代數(shù)式的構(gòu)成SPJ

51、操作,關(guān)系代數(shù)的優(yōu)化本章已學(xué)內(nèi)容與后續(xù)內(nèi)容一覽關(guān)系代數(shù)及關(guān)系運(yùn)算關(guān)系代數(shù):Relational Algebra關(guān)系運(yùn)算:Relational Calculus關(guān)系代數(shù)和關(guān)系運(yùn)算是數(shù)據(jù)庫(kù)的理論基礎(chǔ)書(shū)中稱(chēng)它們?yōu)椴樵?xún)語(yǔ)言,只關(guān)注查詢(xún)。區(qū)別:關(guān)系代數(shù)中的查詢(xún)著重“過(guò)程”,故由“操作符”集合組成,是“過(guò)程化”的查詢(xún);而關(guān)系運(yùn)算中的查詢(xún)側(cè)重“結(jié)果”,故主要描述結(jié)果應(yīng)滿(mǎn)足的“條件”,是“非過(guò)程化”的查詢(xún)。查詢(xún)的輸入輸出均是“關(guān)系”,即輸入為關(guān)系,結(jié)果輸出仍為關(guān)系。因此,可以組合查詢(xún)。關(guān)系代數(shù)基本的代數(shù)表達(dá)式:由基本的代數(shù)操作符(Operator)對(duì)操作數(shù)(Operand)進(jìn)行一元或二元的操作。基本的操作符:

52、SELECTION(選擇) PROJECTION(投影) UNION(并) INTERSECTION (交) DIFFERENCE(差) CROSS-PRODUCT(積,笛卡爾積)操作數(shù)則是關(guān)系實(shí)例。關(guān)系查詢(xún)時(shí),既可用列(屬性)名,也可用列(屬性)位置來(lái)表示列(屬性)。操作的過(guò)程類(lèi)似于集合運(yùn)算。返回的結(jié)果是一個(gè)關(guān)系實(shí)例。這個(gè)結(jié)果還可以作為關(guān)系代數(shù)的輸入。如果結(jié)果中有重復(fù)的元組,理論上去掉重復(fù)元組。基于基本操作符,可遞歸定義關(guān)系代數(shù)表達(dá)式。選擇和投影學(xué)生表 S118張大衛(wèi)6421陳勝35320李峰11219何大明8gradeagesnamesid課程表 Ccreditcnamecid2數(shù)據(jù)結(jié)構(gòu)1

53、033數(shù)據(jù)庫(kù)101選課表 Escorecidsid801036911018grade=3(S)(11,李峰,20,3), (35,陳勝,21,4)C(R)為一元關(guān)系操作符。從關(guān)系實(shí)例中選擇出滿(mǎn)足條件的行。條件式中使用, ,=,。相應(yīng)的SQL查詢(xún)描述:SELECT * FROM S WHERE grade=3sname,grade(S)(101,數(shù)據(jù)庫(kù))(R)為一元關(guān)系操作符。從關(guān)系實(shí)例中提取出所需的一列或多列。相應(yīng)的SQL查詢(xún)描述:SELECT sname,grade FROM Scid,cname(credit=3(C) )(何大明,2),(李峰,3),(陳勝,4) ,(張大衛(wèi),1) 相應(yīng)的

54、SQL查詢(xún)描述:SELECT cid,cnameFROM CWHERE credit=3集合并和交學(xué)生表 S1118張大衛(wèi)6421陳勝35320李峰11219何大明8gradeagesnamesidS1S2(8,何大明,19,2),(11,李峰,20,3), (35,陳勝,21,4), (6,張大衛(wèi),18,1),(10,孫小惠,20,3),(81,李峰,17,1), (22,董一溪,21,4)學(xué)生表 S2118張大衛(wèi)6421董一溪22117李峰81320孫小惠10gradeagesnamesidS1S2 RS為二元關(guān)系操作符。 結(jié)果包含R和S關(guān)系實(shí)例中的所有元組。 前提條件是R、S關(guān)系模式兼容

55、。即R,S中列的個(gè)數(shù)相同,對(duì)應(yīng)列的類(lèi)型一致,對(duì)應(yīng)列名不要求一致。 SQL語(yǔ)句: Select * FROM S1 UNIONSelect * FROM S2 RS為二元關(guān)系操作符。 結(jié)果包含R和S關(guān)系實(shí)例中的相同的元組。 前提條件是R、S關(guān)系模式兼容。 SQL語(yǔ)句: Select * FROM S1 INTERSECTSelect * FROM S2(6,張大衛(wèi),18,1)集合差學(xué)生表 S1118張大衛(wèi)6421陳勝35320李峰11219何大明8gradeagesnamesidS1-S2(8,何大明,19,2),(11,李峰,20,3), (35,陳勝,21,4)學(xué)生表 S2118張大衛(wèi)642

56、1董一溪22117李峰81320孫小惠10gradeagesnamesid R-S,從R中把與S相同的元組減去。 結(jié)果模式與R一致。 前提條件是R、S關(guān)系模式兼容。即R,S中列的個(gè)數(shù)相同,對(duì)應(yīng)列的類(lèi)型一致,對(duì)應(yīng)列名不要求一致。 SQL語(yǔ)句: Select * FROM S1 EXCEPTSelect * FROM S2由于RS =R-(R-S), 所以一些數(shù)據(jù)庫(kù)書(shū)上省略介紹RS。集合積(笛卡爾乘積)學(xué)生表 S1118張大衛(wèi)6421陳勝35320李峰11219何大明8gradeagesnamesidS1E RS為二元關(guān)系操作符。 結(jié)果包含R和S中所有的列。如R中有M個(gè)屬性p個(gè)元組,S中N個(gè)屬性q

57、個(gè)元組,則RS的結(jié)果關(guān)系有M+N個(gè)屬性(列),p q個(gè)元組。 如果有相同的列名,則在結(jié)果字段中不命名,只用位置表示。 相應(yīng)的SQL語(yǔ)句: Select S1.sid,sname,age,grade,E.sid,cid,scoreFROM S1,E注:S1和E表中都有sid,則需要注上表名,即采用“表名.列名”方式。選課表 Escorecidsid801036911018(sid)snameagegrade(sid)cidscore8何大明1928101918何大明19261038011李峰20381019111李峰20361038035陳勝21481019135陳勝2146103806張大衛(wèi)1

58、818101916張大衛(wèi)181610380SELECT-FROM-WHERE與關(guān)系代數(shù)SELECT S1.sid, sname, E.cid, scoreFROM S1,E WHERE S1.sid=E.sid學(xué)生表 S1118張大衛(wèi)6421陳勝35320李峰11219何大明8gradeagesnamesidS1E選課表 Escorecidsid801036911018(sid)snameagegrade(sid)cidscore8何大明1928101918何大明19261038011李峰20381019111李峰20361038035陳勝21481019135陳勝2146103806張大衛(wèi)1

59、818101916張大衛(wèi)1816103801.讀取FROM子句中表的數(shù)據(jù),做笛卡爾乘積。2.選擇滿(mǎn)足WHERE子句中條件的紀(jì)錄。3.按SELECT子句中指定的屬性輸出結(jié)果表806張大衛(wèi)6918何大明8scorecidsnamesidsid,sname,cid,score ( S1.sid=E.sid (S1E)改名(D(1sid,5 sid2),S1E )(sid)snameagegrade(sid)cidscore8何大明1928101918何大明19261038011李峰20381019111李峰20361038035陳勝21481019135陳勝2146103806張大衛(wèi)18181019

60、16張大衛(wèi)181610380sidsnameagegradesid2cidscore8何大明1928101918何大明19261038011李峰20381019111李峰20361038035陳勝21481019135陳勝2146103806張大衛(wèi)1818101916張大衛(wèi)181610380 為解決RS中產(chǎn)生的名字沖突,引入改名操作:(R(F),S) 對(duì)任意代數(shù)表達(dá)式S,改名操作返回一個(gè)新的關(guān)系實(shí)例R,其元組與S相同,模式與S相同。僅那些在F這個(gè)改名列表中列出的字段名改變了,語(yǔ)義不變。F的形式為: 舊名新名,或位置新名可以利用改名操作,將中間結(jié)果放在一個(gè)新關(guān)系中,此時(shí),S中沒(méi)有屬性名沖突,則F

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論