![實用數(shù)據(jù)庫技術(shù)_第1頁](http://file4.renrendoc.com/view/7fca99a200118912218fe7a567d4f39e/7fca99a200118912218fe7a567d4f39e1.gif)
![實用數(shù)據(jù)庫技術(shù)_第2頁](http://file4.renrendoc.com/view/7fca99a200118912218fe7a567d4f39e/7fca99a200118912218fe7a567d4f39e2.gif)
![實用數(shù)據(jù)庫技術(shù)_第3頁](http://file4.renrendoc.com/view/7fca99a200118912218fe7a567d4f39e/7fca99a200118912218fe7a567d4f39e3.gif)
![實用數(shù)據(jù)庫技術(shù)_第4頁](http://file4.renrendoc.com/view/7fca99a200118912218fe7a567d4f39e/7fca99a200118912218fe7a567d4f39e4.gif)
![實用數(shù)據(jù)庫技術(shù)_第5頁](http://file4.renrendoc.com/view/7fca99a200118912218fe7a567d4f39e/7fca99a200118912218fe7a567d4f39e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫原理及應(yīng)用
第0章數(shù)據(jù)庫概述OICQ銀行存款和轉(zhuǎn)賬系統(tǒng)購書網(wǎng)站、圖書館系統(tǒng)、書店。超市(例如大福源超市)。財務(wù)管理系統(tǒng)等等0.1數(shù)據(jù)庫廣泛應(yīng)用Oracle公司的OracleIBM公司的DB2(收購了Informix)微軟公司的Access和SQLServer。Sybase公司的Sybase開源數(shù)據(jù)庫MySQL等。中國還沒有真正市場意義上的商業(yè)數(shù)據(jù)庫產(chǎn)品0.2主流數(shù)據(jù)庫產(chǎn)品第0章數(shù)據(jù)庫概述0.3學(xué)習(xí)數(shù)據(jù)庫的好處為開發(fā)打基礎(chǔ)。
有助于深入理解各種應(yīng)用系統(tǒng),以使自己在工作中有更出色的表現(xiàn)。在工作中使用數(shù)據(jù)庫,提高工作效率。
第0章數(shù)據(jù)庫概述0.4課程主要內(nèi)容基本概念:表、記錄、字段、關(guān)系模型、鍵、聯(lián)系、約束等。SQL語言:數(shù)據(jù)檢索、數(shù)據(jù)庫對象操縱等。*數(shù)據(jù)庫設(shè)計:聯(lián)系圖、范式、設(shè)計過程。*存儲過程、觸發(fā)器、并發(fā)控制、事務(wù)等。SQLServer2000的基本操作。第0章數(shù)據(jù)庫概述0.5考查/考試模式建議開卷考試。建議學(xué)生完成書中練習(xí),尤其是完成練習(xí)中的進銷存系統(tǒng)的完整數(shù)據(jù)庫設(shè)計。第0章數(shù)據(jù)庫概述1.1關(guān)系學(xué)號姓名性別出生年月日宿舍電話Email030101001李勇男1981-9-1028885692liyong@21030101002歐陽晨女1981-8-628885567liuchen@126.com030101003王敏女1981-5-3028885567wangming@21040102001歐小立男1982-1-228885692zhangli@126.com040102002歐小立男1979-7-1628885692chenhui@21第1章數(shù)據(jù)庫基礎(chǔ)1.2實體和屬性我們把需要研究的某類事物稱作實體,實體具有一些我們需要研究的特性,稱為屬性,具體的實體稱為實例。做書本練習(xí)1-2第1章數(shù)據(jù)庫基礎(chǔ)1.3表、行、列表記錄了實體的實例數(shù)據(jù)。我們?nèi)粘K褂玫亩S表,在數(shù)據(jù)庫的世界中,也稱作關(guān)系。嚴(yán)格意義上的關(guān)系具備以下特征:
(1)每一行記載了一個實例的數(shù)據(jù),稱為這個表的一條記錄,或者就叫一行。(2)每一列數(shù)據(jù)統(tǒng)稱為表的一個字段,或者就叫一列。(3)表中單元格存儲單個值。第1章數(shù)據(jù)庫基礎(chǔ)(4)每列的所有數(shù)據(jù)項類型一致,語義一致。(5)列的名稱不能重復(fù)。(6)列不能重名,否則不能區(qū)分一個表中的列。(7)列的順序無關(guān)緊要。1.3表、行、列第1章數(shù)據(jù)庫基礎(chǔ)比如,下表1-2雖然列的順序變了,但和表1-1是等價的。第1章數(shù)據(jù)庫基礎(chǔ)(7)行的順序無關(guān)緊要。(8)任意兩行互不重復(fù)。做書本練習(xí)1-31.3表、行、列第1章數(shù)據(jù)庫基礎(chǔ)1.4等價的幾套術(shù)語表(Table)行(Row)列(Column)文件(File)數(shù)據(jù)文件(DataFile)(注意,現(xiàn)在較少使用)記錄(Record)字段(Field)關(guān)系(Relation)元組(Tuple)屬性(Attribute)第1章數(shù)據(jù)庫基礎(chǔ)1.5鍵唯一鍵與非唯一鍵。鍵(key)是關(guān)系中用來標(biāo)識行的一列或多列。鍵可以是唯一的(uniqe)的,也可以是不唯一(nonunique)的。復(fù)合鍵:包含兩個或更多屬性的鍵被稱為復(fù)合鍵,(姓名,宿舍電話)就是一個復(fù)合鍵。第1章數(shù)據(jù)庫基礎(chǔ)主鍵與候選鍵在設(shè)計數(shù)據(jù)庫的時候,我們需要從這些唯一標(biāo)識符中選出一個作為主鍵(primarykey)。而因為其他唯一鍵都是主鍵的候選,所以它們就被稱為候選鍵。做書本練習(xí)1-5和練習(xí)1-6
1.5鍵第1章數(shù)據(jù)庫基礎(chǔ)為了表示關(guān)聯(lián),可以將一個關(guān)系的主鍵作為屬性放入另外一個關(guān)系中。此時,第二個關(guān)系中的那些屬性就被稱為外鍵(foreign)。
外鍵的數(shù)據(jù)必須在主鍵中存在對應(yīng)項的的關(guān)聯(lián)規(guī)則,稱之為參照完整性。這種規(guī)則在一定程度上保證了選修表中的每一條記錄的正確性。
做書本練習(xí)1-81.6外鍵與參照完整性約束第1章數(shù)據(jù)庫基礎(chǔ)1.7表間聯(lián)系一對多聯(lián)系(表示為1:N,1:M等)第1章數(shù)據(jù)庫基礎(chǔ)多對多聯(lián)系(表示為:M:N)學(xué)號姓名性別出生年月日選修課程號030101001李勇男1981-9-10001,002030101002歐陽晨女1981-8-6001,002,003030101003王敏女1981-5-30課程號課程名學(xué)時學(xué)分001數(shù)據(jù)庫724002數(shù)學(xué)724003英語644004操作系統(tǒng)543學(xué)生表
課程表
多對多聯(lián)系的不方便性:當(dāng)某一門課不開設(shè)時,要修改學(xué)生表中多條記錄1.7表間聯(lián)系第1章數(shù)據(jù)庫基礎(chǔ)修改成一對多的關(guān)系1.7表間聯(lián)系做書本練習(xí)1-10第1章數(shù)據(jù)庫基礎(chǔ)1.8關(guān)系數(shù)據(jù)庫系統(tǒng)以表來記錄數(shù)據(jù),通過字段實現(xiàn)表間聯(lián)系,這種組織數(shù)據(jù)的方式稱作關(guān)系模型。以關(guān)系模型組織數(shù)據(jù)的數(shù)據(jù)庫稱之為關(guān)系數(shù)據(jù)庫。用來創(chuàng)建、維護、修改和操縱關(guān)系數(shù)據(jù)庫的軟件系統(tǒng)稱之為關(guān)系數(shù)據(jù)庫系統(tǒng)(RDBMS)。第1章數(shù)據(jù)庫基礎(chǔ)數(shù)據(jù)庫系統(tǒng)流程圖:用戶操作應(yīng)用程序數(shù)據(jù)庫應(yīng)用程序數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫創(chuàng)建庫表等并維護之創(chuàng)建并處理查詢執(zhí)行應(yīng)用邏輯控制應(yīng)用程序
創(chuàng)建庫表等并維護之讀寫數(shù)據(jù)并維護之強制規(guī)則并發(fā)性控制安全性支持備份與恢復(fù)
組織存儲數(shù)據(jù)
1.8關(guān)系數(shù)據(jù)庫系統(tǒng)第1章數(shù)據(jù)庫基礎(chǔ)1.9字段的類型和大小表由字段構(gòu)成,字段有名稱、大小、類型。1.整數(shù)bigintintsmallintTinyint2.bitbit第1章數(shù)據(jù)庫基礎(chǔ)3.decimal和numeric4.money和smallmoney5.浮點數(shù)floatReal6.datetime
和smalldatetime1.9字段的類型和大小第1章數(shù)據(jù)庫基礎(chǔ)7.字符串char。Varchar。Text8.Unicode字符串。ncharnvarcharntext1.9字段的類型和大小第1章數(shù)據(jù)庫基礎(chǔ)9.二進制字符串binaryvarbinaryImage10.其它數(shù)據(jù)類型cursorsql_varianttabletimestampuniqueidentifier1.9字段的類型和大小第1章數(shù)據(jù)庫基礎(chǔ)字段的大小指字段的取值范圍。如果要算術(shù)運算,則以數(shù)值型為宜,可根據(jù)實際情況選用整型、定點數(shù)或浮點數(shù),如身高、長度、個數(shù)、重量等。如果是日期或時間,則以日期時間型為宜,如出生年月日。如果只有兩種可能,則可用bit型,一種用0代表,一種用1代表,如婚否。如果可做模式匹配,則以字符型為宜,如地址、名稱、電話、郵編等。如果是大量的文本,可用text類型。如果是圖像,可用image。1.9字段的類型和大小第1章數(shù)據(jù)庫基礎(chǔ)空值學(xué)號課程號成績選修日期030101001001952004-2-10301010010042004-9-11.9字段的類型和大小第1章數(shù)據(jù)庫基礎(chǔ)空格及其他空白字符課程號課程名學(xué)時學(xué)分001數(shù)據(jù)庫724002數(shù)學(xué)7241.9字段的類型和大小英文大小寫、全角半角第1章數(shù)據(jù)庫基礎(chǔ)1.10排序與索引1.排序在數(shù)據(jù)庫中,常規(guī)的排序規(guī)則如下:數(shù)值:按值的大小進行排序。英文字符:按英文碼表內(nèi)的編碼進行,如ASCII。ASCII從小到大的順序:空格…0123456789…ABC…XYZ…abc…xyz中文字符:按中文碼表內(nèi)的編碼進行。一般是按拼音的字典順序進行。英文符號比中文小,中文符號比中文字小,而空值是最小的。可能在數(shù)據(jù)庫系統(tǒng)中,可指定別的排序規(guī)則。符串確定大小:逐個比較相應(yīng)位置的字符,先出現(xiàn)大字符的較大。不同類型的數(shù)據(jù)無法正確比較大小。做書本練習(xí)1-13~1-17
第1章數(shù)據(jù)庫基礎(chǔ)索引本質(zhì)上來說,是一種排序。在已排序中的表中查找,通常速度會更快。索引的目的,主要是為了加快數(shù)據(jù)的檢索定位。有時,有索引和沒有索引,性能相差極遠,足以影響用戶的體驗。但并不是在表中做越多索引越好,通常情況下,只有當(dāng)經(jīng)常查詢索引列中的數(shù)據(jù)時,才需要在表上創(chuàng)建索引。1.10排序與索引第1章數(shù)據(jù)庫基礎(chǔ)1.10排序與索引第1章數(shù)據(jù)庫基礎(chǔ)1.11數(shù)據(jù)完整性與約束數(shù)據(jù)完整性數(shù)據(jù)完整性是指存儲在數(shù)據(jù)庫中的所有數(shù)據(jù)值均處于正確的狀態(tài)。所謂正確,是指符合設(shè)計的原意,符合指定的規(guī)則等。第1章數(shù)據(jù)庫基礎(chǔ)實體完整性保證主鍵字段的值唯一且不能為空域完整性要求每個字段的值都在該字段定義的取值范圍內(nèi)參照完整性保證外鍵字段的值預(yù)先存在于主鍵字段。1.11數(shù)據(jù)完整性與約束第1章數(shù)據(jù)庫基礎(chǔ)用戶自定義完整性。
滿足用戶自己定義的條件或規(guī)則,這常常和實際的業(yè)務(wù)邏輯息息相關(guān)。所謂約束,就是條件、規(guī)則之意。對于數(shù)據(jù)庫管理系統(tǒng)來說,約束就是保證數(shù)據(jù)完整性的機制。1.11數(shù)據(jù)完整性與約束第1章數(shù)據(jù)庫基礎(chǔ)1.11數(shù)據(jù)完整性與約束第1章數(shù)據(jù)庫基礎(chǔ)第2章結(jié)構(gòu)化查詢語言SQL本章重點定義、刪除與修改基本表;建立和刪除索引;定義、刪除與修改視圖;各種數(shù)據(jù)查詢方法;數(shù)據(jù)更新;數(shù)據(jù)控制。本章難點查詢條件的形式化表示;多表聯(lián)結(jié);嵌套查詢;數(shù)據(jù)控制。自學(xué)建議按順序閱讀并做練習(xí)。教學(xué)建議建議根據(jù)本章的結(jié)構(gòu),采用案例教學(xué),按照:舉例→語法→實例→練習(xí)的順序進行講解;強調(diào)學(xué)生的實操能力,對于每個知識點,讓學(xué)生在相關(guān)平臺上練習(xí)后直接把答案寫在教本上。2.1SQL概述SQL(StructuredQueryLanguage)稱為結(jié)構(gòu)化查詢語言,它專應(yīng)用于數(shù)據(jù)庫中對數(shù)據(jù)的各種操作,其功能包括查詢、操縱、定義和控制四個方面,是一個通用的功能極強的數(shù)據(jù)庫標(biāo)準(zhǔn)語言。第2章結(jié)構(gòu)化查詢語言SQL2.1SQL概述第2章結(jié)構(gòu)化查詢語言SQL2.2數(shù)據(jù)定義我們在建立數(shù)據(jù)庫之前必須先對數(shù)據(jù)表中各字段類型、大小、索引等有所定義,SQL的數(shù)據(jù)定義部分包括對基本表(即我們在第一章所講到的關(guān)系,Table)、索引(Index)、視圖(View,我們會在這一章里詳細講解)的創(chuàng)建和撤消操作。SQL對數(shù)據(jù)定義的語句十分簡易,第2章結(jié)構(gòu)化查詢語言SQL2.2數(shù)據(jù)定義第2章結(jié)構(gòu)化查詢語言SQL[例2-1]定義一個數(shù)據(jù)庫叫:學(xué)生選課與成績管理,該數(shù)據(jù)庫由數(shù)據(jù)文件和日志文件兩個文件組成,它們都存放在D盤上,數(shù)據(jù)文件大小為10MB,日志文件大小為5MB。CREATEDATABASE學(xué)生選課與成績管理ON(NAME=學(xué)生選課與成績管理_dat,FILENAME='d:\學(xué)生選課與成績管理.mdf',SIZE=10)LOGON(NAME='學(xué)生選課與成績管理_log',FILENAME='d:\學(xué)生選課與成績管理.ldf',SIZE=5)2.3定義數(shù)據(jù)庫第2章結(jié)構(gòu)化查詢語言SQL[例2-2]建立一個“學(xué)生”表,它由學(xué)號、姓名、班級、性別、出生年月日、電話、email、備注八個屬性組成。其中學(xué)號為主鍵。CREATETABLE學(xué)生(
學(xué)號CHAR(9)PRIMARYKEY,姓名NCHAR(5),班級CHAR(20),性別NCHAR(1),出生年月日SMALLDATETIME,
電話CHAR(11),EmailVARCHAR(30),
備注VARCHAR(100))2.4定義、刪除與修改基本表第2章結(jié)構(gòu)化查詢語言SQL[例2-5]將一個新學(xué)生記錄(學(xué)號:050103001;姓名:陳冬偉;班級:計算機軟件;性別:男;出生年月日:1983-4-18;電話:22894152;Email:cdwei@163.com;備注:轉(zhuǎn)校生)插入到學(xué)生表中。
INSERTINTO學(xué)生
VALUES(‘050103001’,‘陳冬偉’,‘計算機軟件’,‘男’,‘1983-4-18’,‘22894152’,‘cdwei@163.com’,‘轉(zhuǎn)校生’)2.4.1初始化基本表第2章結(jié)構(gòu)化查詢語言SQL[例2-6]
向“學(xué)生”表增加“入學(xué)時間”列,其數(shù)據(jù)類型為日期型。
ALTERTABLE學(xué)生ADD入學(xué)時間DATETIME2.4.2修改基本表第2章結(jié)構(gòu)化查詢語言SQL[例2-7]將例1中增加的“入學(xué)時間”列刪除。ALTERTABLE學(xué)生DROPCOLUMN入學(xué)時間做書本練習(xí)2-8~練習(xí)2-92.4.2修改基本表第2章結(jié)構(gòu)化查詢語言SQL2.4.3刪除基本表
有時,由于某種業(yè)務(wù)的需要,我們不要某些表(這樣往往可以減輕系統(tǒng)的開支),就可以把這些表刪除。例如:刪除“學(xué)生”表。
DROPTABLE學(xué)生做書本練習(xí)2-10第2章結(jié)構(gòu)化查詢語言SQL為學(xué)生選課與成績管理數(shù)據(jù)庫中的課程表按課程名降序建立唯一索引。CREATEUNIQUEINDEXCcourseON課程(課程名DESC)做書本練習(xí)2-11~練習(xí)2-132.4.4建立與刪除索引第2章結(jié)構(gòu)化查詢語言SQL[例2-13]刪除學(xué)生表的stusname索引。
DROPINDEX學(xué)生.Stusname做書本練習(xí)2-142.4.4建立與刪除索引第2章結(jié)構(gòu)化查詢語言SQL2.5.1數(shù)據(jù)查詢2.5數(shù)據(jù)操縱[例2-15]查詢?nèi)w學(xué)生的學(xué)號與姓名。SELECT學(xué)號,姓名FROM學(xué)生第2章結(jié)構(gòu)化查詢語言SQL[例2-16]查詢?nèi)w學(xué)生的姓名,出生年月日,學(xué)號。
SELECT姓名,出生年月日,學(xué)號
FROM學(xué)生做書本練習(xí)2-15~練習(xí)2-172.5.1數(shù)據(jù)查詢第2章結(jié)構(gòu)化查詢語言SQL[例2-17]查詢?nèi)w學(xué)生的詳細記錄。SELECT*FROM學(xué)生做書本練習(xí)2-18~練習(xí)2-19
2.5.1數(shù)據(jù)查詢(1)查詢?nèi)苛衃例2-18]查詢?nèi)w學(xué)生的姓名及年齡。SELECT姓名,YEAR(GETDATE())-YEAR(出生年月日)as年齡FROM學(xué)生做書本練習(xí)2-20~練習(xí)2-22(2)查詢含有表達式的記錄第2章結(jié)構(gòu)化查詢語言SQL[例2-19]查詢選修表中選修了課程的學(xué)生學(xué)號,要求去除重復(fù)的值。
SELECTDISTINCT學(xué)號
FROM選修做書本練習(xí)2-23~練習(xí)2-24(3)選擇表中的若干記錄
第2章結(jié)構(gòu)化查詢語言SQL[例2-20]查詢班級為計算機應(yīng)用學(xué)生的記錄。
SELECT*FROM學(xué)生
WHERE班級=‘計算機應(yīng)用’(3)選擇表中的若干記錄
第2章結(jié)構(gòu)化查詢語言SQL[例2-21]查詢選修表中選修成績不及格的學(xué)生的學(xué)號和成績。
SELECTDISTINCT學(xué)號
FROM選修
WHERE成績<60做書本練習(xí)2-25~練習(xí)2-27(3)選擇表中的若干記錄
第2章結(jié)構(gòu)化查詢語言SQL[例2-22]查詢學(xué)生表中在1981出生的學(xué)生的學(xué)號,姓名和出生年月日。
SELECT學(xué)號,姓名,出生年月日
FROM學(xué)生
WHERE出生年月日BETWEEN‘1981-1-1’AND‘1981-12-31’做書本練習(xí)2-28~練習(xí)2-29(4)確定范圍第2章結(jié)構(gòu)化查詢語言SQL[例2-24]查詢學(xué)生表中所在班級為“計算機應(yīng)用”或“計算機網(wǎng)絡(luò)”班的學(xué)生記錄。SELECT*FROM學(xué)生WHERE班級IN(‘計算機應(yīng)用’,‘計算機網(wǎng)絡(luò)’)練習(xí)2-30~練習(xí)2-31(5)確定集合第2章結(jié)構(gòu)化查詢語言SQL[例2-26]查詢所有電話號碼以“22”開頭的學(xué)生的姓名,學(xué)號和電話。
SELECT姓名,學(xué)號,電話
FROM學(xué)生
WHERE電話LIKE‘22%’(6)字符匹配第2章結(jié)構(gòu)化查詢語言SQL[例2-28]查詢姓“歐陽”且全名為四個漢字的學(xué)生的名字。
SELECT姓名
FROM學(xué)生
WHERE姓名LIKE‘歐陽__’(6)字符匹配第2章結(jié)構(gòu)化查詢語言SQL[例2-29]查詢名字中第2個字為“陽”字的學(xué)生的姓名和學(xué)號。
SELECT姓名,學(xué)號
FROM學(xué)生
WHERE姓名LIKE‘_陽%’(6)字符匹配第2章結(jié)構(gòu)化查詢語言SQL[例2-30]查詢所有不姓劉的學(xué)生姓名。
SELECT姓名
FROM學(xué)生
WHERE姓名NOTLIKE‘劉%’做書本練習(xí)2-32~練習(xí)2-35(6)字符匹配第2章結(jié)構(gòu)化查詢語言SQL[例2-31]
某些學(xué)生由于特殊原因分配到某個班上課,一般都在學(xué)生表的備注信息欄里寫明,沒有特殊原因的學(xué)生備注欄為空,今查詢備注為空的學(xué)生學(xué)號,姓名,備注。
SELECT學(xué)號,姓名,備注
FROM學(xué)生
WHERE備注ISNULL做書本練習(xí)2-36~練習(xí)2-37(7)涉及空值的查詢第2章結(jié)構(gòu)化查詢語言SQL[例2-33]查詢課程表中學(xué)時大于60且學(xué)分大于3分的記錄。
SELECT*FROM課程
WHERE學(xué)時>60AND學(xué)分>3(8)多重條件查詢第2章結(jié)構(gòu)化查詢語言SQL[例2-35]查詢選修了001號課程的學(xué)生的學(xué)號及其成績,查詢結(jié)果按成績分?jǐn)?shù)的升序排列。
SELECT學(xué)號,成績
FROM選修
WHERE課程號=‘001’ORDERBY成績2.5.2對查詢結(jié)果排序第2章結(jié)構(gòu)化查詢語言SQL[例2-36]查詢?nèi)w學(xué)生情況,查詢結(jié)果先按所在班級升序排列,同一班級中的學(xué)生按姓名降序排列。
SELECT*FROM學(xué)生
ORDERBY班級,姓名DESC2.5.2對查詢結(jié)果排序第2章結(jié)構(gòu)化查詢語言SQL2.5.2使用聚集函數(shù)第2章結(jié)構(gòu)化查詢語言SQL[例2-37]查詢學(xué)生總?cè)藬?shù)。
SELECTCOUNT(*)AS總?cè)藬?shù)
FROM學(xué)生2.5.2使用聚集函數(shù)第2章結(jié)構(gòu)化查詢語言SQL[例2-38]查詢選修了課程的學(xué)生人數(shù)。SELECTCOUNT(DISTINCT學(xué)號)as總?cè)藬?shù)FROM選修2.5.2使用聚集函數(shù)第2章結(jié)構(gòu)化查詢語言SQL[例2-39]計算001號課程的學(xué)生平均成績。
SELECTAVG(成績)as平均成績
FROM選修
WHERE課程號=‘001’2.5.2使用聚集函數(shù)第2章結(jié)構(gòu)化查詢語言SQL[例2-40]查詢選修001號課程的學(xué)生的最高分?jǐn)?shù)。
SELECTMAX(成績)AS最高分
FROM選修
WHERE課程號=‘001’2.5.2使用聚集函數(shù)第2章結(jié)構(gòu)化查詢語言SQL[例2-41]對選修表中的課程號分組求相應(yīng)的選課人數(shù)。
SELECT課程號,COUNT(學(xué)號)AS選課人數(shù)FROM選修GROUPBY課程號2.5.3對查詢結(jié)果分組第2章結(jié)構(gòu)化查詢語言SQL[例2-42]查詢選修了2門以上(包括2門)課程的學(xué)生學(xué)號和課程數(shù)。
SELECT學(xué)號,COUNT(課程號)as課程數(shù)
FROM選修
GROUPBY學(xué)號
HAVINGCOUNT(*)>=22.5.3對查詢結(jié)果分組第2章結(jié)構(gòu)化查詢語言SQL2.5.4連接查詢第2章結(jié)構(gòu)化查詢語言SQL(1)內(nèi)聯(lián)接第2章結(jié)構(gòu)化查詢語言SQL查詢選修了課程的學(xué)生SELECT學(xué)生.*,選修.*FROM學(xué)生INNERJOIN選修ON學(xué)生.學(xué)號=選修.學(xué)號(1)內(nèi)聯(lián)接第2章結(jié)構(gòu)化查詢語言SQL(1)內(nèi)聯(lián)接第2章結(jié)構(gòu)化查詢語言SQL[例2-44]
對例4-43用自然連接完成。
SELECT學(xué)生.學(xué)號,姓名,班級,性別,出生年月日,電話,Email,備注,課程號,成績,選修日期
FROM學(xué)生INNERJOIN選修ON學(xué)生.學(xué)號=選修.學(xué)號(2)自然連接第2章結(jié)構(gòu)化查詢語言SQL1)使用左向外聯(lián)接[例2-46]查詢查詢各個學(xué)生的選修情況。SELECT學(xué)生.*,課程號,成績,選修日期FROM學(xué)生LEFTJOIN選修ON學(xué)生.學(xué)號=選修.學(xué)號(3)外聯(lián)接2)使用右向外聯(lián)接右向外聯(lián)接和左向外聯(lián)接原理一樣,只是使用RIGHTJOIN,不管第一個表中是否有匹配的數(shù)據(jù),結(jié)果將包含第二個表中的所有行。這里就不多講了,讀者可以通過查看聯(lián)機叢書進一步了解。第2章結(jié)構(gòu)化查詢語言SQL3)使用完整外部聯(lián)接[例2-47]查詢查詢各個學(xué)生及課程的選修的情況。SELECT學(xué)生.*,課程.*,成績,選修日期FROM(學(xué)生LEFTJOIN選修ON學(xué)生.學(xué)號=選修.學(xué)號)FULLJOIN課程ON選修.課程號=課程.課程號第2章結(jié)構(gòu)化查詢語言SQL[例2-48]查詢選修001號課程且成績及格的所有學(xué)生。
SELECT學(xué)生.學(xué)號,姓名
FROM學(xué)生INNERJOIN選修ON學(xué)生.學(xué)號=選修.學(xué)號
WHERE選修.課程號=‘001’AND選修.成績>60(3)復(fù)合條件連接
第2章結(jié)構(gòu)化查詢語言SQL[例2-49]查詢性別為男的學(xué)生的學(xué)號、姓名、選修的課程名及成績。
SELECT學(xué)生.學(xué)號,姓名,課程名,成績
FROM(學(xué)生INNERJOIN選修ON學(xué)生.學(xué)號=選修.學(xué)號)INNERJOIN課程ON選修.課程號=課程.課程號(3)復(fù)合條件連接
第2章結(jié)構(gòu)化查詢語言SQL(1)帶有IN謂詞的子句查詢2.5.5嵌套查詢[例2-50]
查詢與“劉晨”在同一個班學(xué)習(xí)的學(xué)生。第一步:確定“劉晨”所在班級名:SELECT班級FROM學(xué)生WHERE姓名=‘劉晨’第二步:查找所有在“計算機應(yīng)用”班學(xué)習(xí)的學(xué)生。
SELECT學(xué)號,姓名,班級
FROM學(xué)生
WHERE班級=‘計算機應(yīng)用’(1)帶有IN謂詞的子句查詢第2章結(jié)構(gòu)化查詢語言SQL將第一步查詢嵌入到第二步查詢的條件中,構(gòu)造嵌套查詢,SQL語句如下:
SELECT學(xué)號,姓名,班級
FROM學(xué)生
WHERE班級IN(SELECT班級
FROM學(xué)生
WHERE姓名=‘劉晨’)(1)帶有IN謂詞的子句查詢第2章結(jié)構(gòu)化查詢語言SQL[例2-51]查詢選修了課程名為“數(shù)據(jù)庫”的學(xué)生學(xué)號、姓名和課程名。SELECT學(xué)號,姓名FROM學(xué)生WHERE學(xué)號IN(SELECT學(xué)號
FROM選修
WHERE課程號IN(SELECT課程號
FROM課程
WHERE課程名=‘?dāng)?shù)據(jù)庫’))(1)帶有IN謂詞的子句查詢第2章結(jié)構(gòu)化查詢語言SQL(2)帶有ANY或ALL謂詞的子查詢
第2章結(jié)構(gòu)化查詢語言SQL[例2-52]查詢選修表中其他科目比科目001的任意一個成績高的記錄。
SELECT*FROM選修
WHERE成績>ANY(SELECT成績
FROM選修
WHERE課程號=‘001’)AND課程號<>‘001’(2)帶有ANY或ALL謂詞的子查詢
第2章結(jié)構(gòu)化查詢語言SQL2.6.1插入數(shù)據(jù)[例2-5]將一個新學(xué)生記錄(學(xué)號:050103001;姓名:陳冬偉;班級:計算機軟件;性別:男;出生年月日:1983-4-18;電話:22894152;Email:cdwei@163.com;備注:轉(zhuǎn)校生)插入到學(xué)生表中。
INSERTINTO學(xué)生
VALUES(‘050103001’,‘陳冬偉’,‘計算機軟件’,‘男’,‘1983-4-18’,‘22894152’,‘cdwei@163.com’,‘轉(zhuǎn)校生’)2.6數(shù)據(jù)更新[例2-59]
假設(shè)例2-4中新插入的學(xué)生選了課程但還沒參加考試,所以成績一欄中的記錄為空,插入該選課記錄為(學(xué)號:050103001;課程號:006;選修日期:2005-9-1)。
INSERTINTO選修(學(xué)號,課程號,選修日期)VALUES(‘050103001’,‘006’,‘2005-9-1’)2.6.1插入數(shù)據(jù)第2章結(jié)構(gòu)化查詢語言SQL[例2-61]將學(xué)號為050103001的學(xué)生的出生年月日改為1984-3-1。
UPDATE學(xué)生
SET出生年月日=‘1984-3-1’WHERE學(xué)號=‘050103001’2.6.2修改數(shù)據(jù)(1)修改某個記錄的值[例2-62]將選修表中所有學(xué)生各科的成績增加3分。
UPDATE選修
SET成績=成績+3(2)修改某個記錄的值第2章結(jié)構(gòu)化查詢語言SQL[例2-63]將計算機網(wǎng)絡(luò)班全體學(xué)生的成績置零。UPDATE選修SET成績=0WHERE學(xué)號IN(SELECT學(xué)號
FROM學(xué)生
WHERE班級=‘計算機網(wǎng)絡(luò)’)(3)帶子查詢的修改語句第2章結(jié)構(gòu)化查詢語言SQL(1)刪除某一個記錄的值[例2-64]刪除學(xué)號為050103001的學(xué)生記錄。
DELETEFROM選修
WHERE學(xué)號=‘050103001’2.6.3刪除數(shù)據(jù)(2)刪除多個記錄的值[例2-65]刪除所有的學(xué)生選課記錄。
DELETEFROM選修第2章結(jié)構(gòu)化查詢語言SQL[例2-66]刪除計算機網(wǎng)絡(luò)班所有學(xué)生的選課記錄。DELETEFROM選修WHERE學(xué)號IN(SELECT學(xué)號
FROM學(xué)生
WHERE班級=‘計算機網(wǎng)絡(luò)’)(3)帶子查詢的刪除語句第2章結(jié)構(gòu)化查詢語言SQL[例2-69]建立計算機網(wǎng)絡(luò)班的學(xué)生的視圖,視圖名為計算機網(wǎng)絡(luò),并要求進行修改和插入操作時仍需要保證該視圖只有計算機網(wǎng)絡(luò)班的學(xué)生。
CREATEVIEW計算機網(wǎng)絡(luò)
ASSELECT*FROM學(xué)生
WHERE班級=‘計算機網(wǎng)絡(luò)’
WITHCHECKOPTION2.7定義、刪除與修改視圖[例2-72]定義一個反映學(xué)生出生年齡的視圖,命名為:年齡,視圖的字段包括學(xué)號,姓名,年齡。
CREATEVIEW年齡(學(xué)號,姓名,年齡)ASSELECT學(xué)號,姓名,2005-YEAR(出生年月日)FROM學(xué)生2.7定義、刪除與修改視圖[例2-73]定義為一個視圖,求選修表中按學(xué)號分組求每個學(xué)生的平均成績,視圖名命名為:匯總1,視圖的字段包括學(xué)號,平均成績。
CREATEVIEW匯總1(學(xué)號,平均成績)ASSELECT學(xué)號,AVG(成績)FROM選修
GROUPBY學(xué)號2.7定義、刪除與修改視圖2.7.1查詢視圖例:在計算機應(yīng)用的視圖中找出電話號碼以’22’開頭的學(xué)生,查詢結(jié)果包括學(xué)號,姓名,電話。
select學(xué)號,姓名,電話
from計算機應(yīng)用
where電話like’22%’[例2-77]將信息系學(xué)生視圖“計算機應(yīng)用”中學(xué)號為030101001的學(xué)生姓名改為“歐陽毅”。
UPDATE計算機應(yīng)用
SET姓名=‘歐陽毅’
WHERE學(xué)號=‘030101001’2.7.2更新視圖[例2-80]刪除視圖“選課1“。
DROPVIEW選課12.7.3刪除視圖第3章存儲過程和觸發(fā)器重點存儲過程的使用(包括創(chuàng)建存儲過程、執(zhí)行存儲過程、查看和修改存儲過程、重命名和刪除存儲過程);觸發(fā)器的使用(包括創(chuàng)建觸發(fā)器,使用觸發(fā)器,查看、修改和刪除觸發(fā)器)。難點用SQL語言創(chuàng)建、執(zhí)行、查看、修改、重命名和刪除存儲過程的方法;用SQL語言創(chuàng)建、使用、查看、修改和刪除觸發(fā)器的方法。自學(xué)建議按順序閱讀并做練習(xí)。教學(xué)建議建議根據(jù)本章的結(jié)構(gòu),采用案例教學(xué),按照:舉例→語法→實例→練習(xí)的順序進行講解;強調(diào)學(xué)生的實操能力,對于每個知識點,讓學(xué)生在相關(guān)平臺上練習(xí)后直接把答案寫在教本上。[例3-1]實現(xiàn)在”學(xué)生成績管理”數(shù)據(jù)庫中新建名為:Stuproc的存儲過程,用來查詢學(xué)生表中的學(xué)號、姓名、班級、性別列。CREATEPROCEDUREStuprocASSELECT學(xué)號,姓名,班級,性別FROM學(xué)生3.1存儲過程[例3-2]創(chuàng)建一個用于向課程表中插入記錄的存儲過程:Add_course。
CREATEPROCAdd_course(@課程號CHAR(3),@課程名VARCHAR(30),@學(xué)時SMALLINT,@學(xué)分DECIMAL)ASINSERTINTO課程
(課程號,課程名,學(xué)時,學(xué)分)VALUES(@課程號,@課程名,@學(xué)時,@學(xué)分)3.1.1存儲過程[例3-3]創(chuàng)建一個用于向?qū)W生表中刪除記錄的存儲過程:Delete_stu。
CREATEPROCDelete_stu(@學(xué)號CHAR(9))ASDELETEFROM學(xué)生
WHERE(學(xué)號=@學(xué)號)3.1.1存儲過程[例3-4]創(chuàng)建一個用于向選修表中修改成績記錄的存儲過程:Update_sc。
CREATEPROCUpdate_sc(@學(xué)號CHAR(9),@課程號CHAR(3),@成績INT)ASUPDATE選修SET成績=@成績WHERE(學(xué)號=@學(xué)號
AND課程號=@課程號)3.1.1存儲過程3.1.2執(zhí)行存儲過程[例3-5]執(zhí)行例3-1的存儲過程Stuproc。
EXECStuproc
3.1.3刪除存儲過程[例3-12]要刪除Update_sc存儲過程,可執(zhí)行下面的SQL語句:
DROPPROCEDUREUpdate_sc
我們再創(chuàng)建一個名為:delete_stu的觸發(fā)器,當(dāng)刪除學(xué)生表的某一條記錄時,觸發(fā)器生效,顯示”學(xué)生表中的記錄已被刪除”的信息。Createtriggerdelete_stuOn學(xué)生FordeleteAsPrint‘學(xué)生表中的記錄已被刪除’3.2觸發(fā)器(1)INSERT觸發(fā)器在數(shù)據(jù)庫“學(xué)生成績管理”中創(chuàng)建一觸發(fā)器,名為:stu_course_sc當(dāng)向選修表插入一條記錄時,檢查該記錄的學(xué)號在學(xué)生表中是否存在且課程號在課程表中是否存在,如有一項不成立,則不允許插入,并提示出錯信息:‘學(xué)生表或課程表中沒有相關(guān)的記錄’。
CREATETRIGGERstu_course_scON選修
FORINSERTASIFEXISTS(SELECT*FROMinsertedWHEREinserted.學(xué)號NOTIN(SELECT學(xué)號FROM學(xué)生)ORinserted.課程號NOTIN(SELECT課程號FROM課程))BEGINRAISERROR(‘學(xué)生表或課程表中沒有相關(guān)的記錄’,16,1)ROLLBACKEND(2)DELETE觸發(fā)器[例3-16]在”學(xué)生成績管理”數(shù)據(jù)庫中的三個表,我們可以這樣想,當(dāng)某個學(xué)生退學(xué)不讀書了,那么它在選修表中的信息也應(yīng)該刪除,所以現(xiàn)今創(chuàng)建一個觸發(fā)器,名為:Delete_sc。如果要刪除學(xué)生表中的記錄,則與該記錄學(xué)號對應(yīng)的選修表中的選修記錄也應(yīng)該刪除。程序清單如下:CREATETRIGGERDelete_scON學(xué)生FORDELETEASDELETE選修WHERE選修.學(xué)號IN(SELECT學(xué)號FROMdeleted)3.2.1刪除觸發(fā)器[例3-20]刪除觸發(fā)器Update_課程。
DROPTRIGGERUpdate_課程第4章并發(fā)與事務(wù)4.1事務(wù)(Transaction)所謂的事務(wù)指的是一個元的工作,就好比我們現(xiàn)實生活中要做的每一件事。在數(shù)據(jù)庫的概念中,事務(wù)可以只有一條語句,也可以有多條語句,但有一個很重要的特征:這些語句的所有操作,要么全做,要么全都取消。這是事務(wù)和我們平時所說的事件或程序的區(qū)別。在數(shù)據(jù)庫備份和恢復(fù)過程中,事務(wù)具有重要意義。[例4-1]假設(shè)在選修表中,學(xué)號為030101001的學(xué)生由于某些原因不選004號課程而改選002號課程,并且考試的成績?yōu)?8分,如果我們把這兩個操作當(dāng)作一個事務(wù)的話,則代碼如下:BEGINTRANSACTIONUPDATE選修SET課程號=‘002’WHERE學(xué)號=‘030101001’AND課程名=‘004’GOUPDATE選修SET成績=88WHERE學(xué)號=‘030101001’AND課程名=‘002’COMMIT第4章并發(fā)與事務(wù)但由于編程人員在寫上面的代碼時忽略了成績字段的匹配,找88分誤寫為某個字符串型的‘a(chǎn)bc’(雖然這種情況不多見)而導(dǎo)致事務(wù)內(nèi)部故障:BEGINTRANSACTIONUPDATE選修SET課程號=‘002’WHERE學(xué)號=‘030101001’AND課程名=‘004’GOUPDATE選修SET成績=‘a(chǎn)bc’
WHERE學(xué)號=‘030101001’AND課程名=‘002’ROLLBACK第4章并發(fā)與事務(wù)4.1.1事務(wù)的特征原子性一致性隔離性持續(xù)性4.1.2故障的種類事務(wù)內(nèi)部的故障系統(tǒng)故障介質(zhì)故障此外,還有計算機病毒等對數(shù)據(jù)庫也構(gòu)成危害。數(shù)據(jù)恢復(fù)技術(shù)的基本原理十分簡單??梢允且粋€詞來概括:冗余。數(shù)據(jù)庫中任何一部分被破壞的或不正確的數(shù)據(jù)可以根據(jù)存儲在系統(tǒng)別處的冗余數(shù)據(jù)來重建。建立冗余數(shù)據(jù)最常用的技術(shù)是數(shù)據(jù)轉(zhuǎn)儲和登陸日志文件。通常在一個數(shù)據(jù)庫系統(tǒng)中,這兩種方法是一起使用的。4.1.3事務(wù)恢復(fù)的實現(xiàn)技術(shù)數(shù)據(jù)轉(zhuǎn)儲:是數(shù)據(jù)庫恢復(fù)中采用的基本技術(shù)。所謂轉(zhuǎn)儲即數(shù)據(jù)庫管理員定期地將整個數(shù)據(jù)庫恢復(fù)到磁盤或另一個磁盤上保存起來的過程。這些備用的數(shù)據(jù)文本稱為后備副本或后援副本。轉(zhuǎn)儲可以分為靜態(tài)轉(zhuǎn)儲和動態(tài)轉(zhuǎn)儲。4.1.3事務(wù)恢復(fù)的實現(xiàn)技術(shù)靜態(tài)轉(zhuǎn)儲是在系統(tǒng)中無運行事務(wù)時進行的轉(zhuǎn)儲操作。動態(tài)轉(zhuǎn)儲是指轉(zhuǎn)儲期間允許對數(shù)據(jù)進行存取或修改。4.1.3事務(wù)恢復(fù)的實現(xiàn)技術(shù)轉(zhuǎn)儲還可以分為海量轉(zhuǎn)儲和增量轉(zhuǎn)儲兩種方式。海量轉(zhuǎn)儲是指每次轉(zhuǎn)儲全部數(shù)據(jù)庫。增量轉(zhuǎn)儲則指每次只轉(zhuǎn)儲上一次轉(zhuǎn)儲后更新過的數(shù)據(jù)。4.1.3事務(wù)恢復(fù)的實現(xiàn)技術(shù)數(shù)據(jù)轉(zhuǎn)儲有兩種方式,分別可以在兩種狀態(tài)下進行,因此數(shù)據(jù)轉(zhuǎn)儲方法可以分為四類:動態(tài)海量轉(zhuǎn)儲動態(tài)增量轉(zhuǎn)儲靜態(tài)海量轉(zhuǎn)儲靜態(tài)增量轉(zhuǎn)儲4.1.3事務(wù)恢復(fù)的實現(xiàn)技術(shù)4.2登記日志文件日志文件是用來記錄事務(wù)對數(shù)據(jù)庫的更新操作的文件。不同數(shù)據(jù)庫系統(tǒng)采用的日志文件格式并不完全相同。概括起來日志文件主要有兩種格式:以記錄為單位的日志文件和以數(shù)據(jù)為單位的日志文件。對于以記錄為單位的日志文件,日志文件中需要登記的內(nèi)容包括:各個事務(wù)的開始(BEGINTRANSACTION)標(biāo)記各個事務(wù)的結(jié)束(COMMIT或ROLLBACK)標(biāo)記各個事務(wù)的所有更新操作先把原始數(shù)據(jù)備份到備份服務(wù)器,然后服務(wù)器減少1000元。把各種操作寫入日志文件ATM用戶日志文件備份服務(wù)器服務(wù)器取款1000元傳輸命令:(1)密碼驗證,(2)取1000元4.2登記日志文件ATM的功能簡化圖:4.3并發(fā)控制假設(shè)住在佛山的小強想乘飛機去上海,同時住在廣州的小明也想乘飛機去上海,他們都在同一時間內(nèi)打電話去各自的售票點訂票,訂票系統(tǒng)中的一個活動序列:
佛山售票點(佛山事務(wù))讀出廣州白云機場售票中心某航班的機票余額A,A=20張;
廣州售票點(廣州事務(wù))讀出廣州白云機場售票中心同一航班的機票余額也A,A=20張;
佛山售票點賣出一張機票,修改余額A-1=19,把A寫回數(shù)據(jù)庫;
同時,廣州售票點也賣出一張機票,修改余額A-1,所以A為19,把A寫回數(shù)據(jù)庫。
4.3并發(fā)控制由上圖我們可以看到,結(jié)果明明賣出兩張機票,但數(shù)據(jù)庫中機票余額只減少1。我們把這種情況稱為數(shù)據(jù)庫的不一致性。由于佛山售票點和廣州售票點都同時讀取和修改售票中心的數(shù)據(jù)庫,而這種讀取和修改是隨機調(diào)度的,當(dāng)佛山售票點在讀取數(shù)據(jù)A(A=20)時,廣州售票點又讀取數(shù)據(jù)A(A=20),這時兩個售票點同時修改A(A-1),然后,佛山售票點把A=19寫回數(shù)據(jù)庫,廣州售票點又把A=19寫回數(shù)據(jù)庫,把佛山售票點所修改的數(shù)據(jù)覆蓋了。導(dǎo)致數(shù)據(jù)不一致的問題出現(xiàn)。通常我們把這種情況稱為丟失修改。4.3并發(fā)控制
4.4封鎖(Locking)當(dāng)兩個事務(wù)同時對某個對象發(fā)出請求時,最好的方法就是任何時候只讓一個事務(wù)對該對象進行操作,另外一個事務(wù)只能等待而不能對該對象進行操作,只有當(dāng)正在操作的事務(wù)操作完才讓另外一事務(wù)對該對象進行操作。這樣就不會出現(xiàn)數(shù)據(jù)不一致性問題,這就是封鎖的基本思想。解決這種并發(fā)問題,我們通常用封鎖技術(shù):
4.4封鎖(Locking)4.4.1封鎖實例[例4-3]我們建立兩個事務(wù),一個是把課程表中課程號為:001的學(xué)時改為90;另一個是把課程表中課程號為:001的學(xué)時改為80。我們先分析一下這兩個事務(wù),它們都想修改同一條記錄(課程號為001的記錄),如果把這兩個事務(wù)同時進行,則會產(chǎn)生并發(fā)問題:事務(wù)T1:SETTRANSACTIONISOLATIONLEVELREPEATABLEREADBEGINTRANUPDATE課程SET學(xué)時=90WHERE課程號='001'WAITFORDELAY'00:00:10'COMMIT5.1數(shù)據(jù)依賴有了X,便確定了唯一的Y,稱Y依賴X,記為X→Y。例如:有以下方程:
y=3x當(dāng)x某個值時,y便能確定下來那么,我們就說:y依賴于x,或說:x決定y第五章數(shù)據(jù)庫設(shè)計在這個關(guān)系中,有了職工號,就可以唯一地確定一條記錄。各字段依賴關(guān)系如下:綜上所述:則有(姓名,性別,年齡,職務(wù))依賴于職工號?;蛘f:職工號決定(姓名,性別,年齡,職務(wù))姓名,性別,年齡,職務(wù)職工號第五章數(shù)據(jù)庫設(shè)計5.1.1完全依賴,部分依賴設(shè)一個教師任課關(guān)系為:教師任課,該關(guān)系給出某個學(xué)校每個教師在一個學(xué)期內(nèi)任課安排的情況。假定每個教師可以講授多門課程,每門課程可以由不同教師來講授,不同的教師教同一門課有不同的課時費,同一門課不同的老師教亦有不同的課時費。課程上多門課多個老師上課時費5.1.1完全依賴,部分依賴主鍵可設(shè)為(教工號,課程號),并有如下依賴:(教工號,課程號)(姓名,職稱,課程名,課時數(shù),課時費)教工號(姓名,職稱)課程號(課程名,課時數(shù))(教工號,課程號)(課時費)出現(xiàn)了部分依賴5.1.1完全依賴,部分依賴由于“教工號”和“課程號”皆為主鍵(教工號,課程號)的一部分,故稱(教工號,課程號)(姓名,職稱,課程名,課時數(shù))為部分依賴。顯然,對于課時費,則必須是:(教工號,課程號)課時費,這種需要整個復(fù)合鍵才能決定的依賴稱作完全依賴。5.1.1完全依賴,部分依賴5.1.2直接依賴,傳遞依賴設(shè)一個學(xué)生關(guān)系為(學(xué)號,姓名,性別,系號,系名,系主任名)通常每個學(xué)生只屬于一個系每個系有許多學(xué)生每個系都對應(yīng)唯一的系名和系主任名,其中系名唯一。學(xué)號(姓名,性別,系號,系名,系主任名)學(xué)號(姓名,性別,系號)學(xué)號系號(系名,系主任名)其中,系名、系主任名直接依賴于系號,對學(xué)號則是傳遞依賴。5.1.1完全依賴,部分依賴5.2.1第一范式第一范式:每個字段是最小單位。不滿足第一范式通常有以下三種情況:多成分字段多值字段計算字段5.2范式多成分字段(又稱復(fù)合字段),它的值中包含兩個或多個不同的項。如表5-10所示,地址中包含省份、城市等信息,便是一個多成份字段。5.2范式多值字段,包含相同類型的多個實例如表5-11和5-12所示,學(xué)生表中的字段“參加的社團編號”,便包含了多個社團編號。5.2范式計算字段,包含由其他字段計算的結(jié)果比如,在表5-13進貨明細表中,金額字段是計算字段,金額=數(shù)量*進貨單價5.2范式解決方法多成分字段5.2范式多值字段5.2范式3.計算字段5.2范式5.2.2第二范式第二范式:在滿足第一范式的基礎(chǔ)上;所有非主鍵字段完全依賴于主鍵,而不能部分依賴。記住關(guān)鍵字:完全依賴,不能部分依賴由此我們在設(shè)計數(shù)據(jù)庫表時包括
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽航空職業(yè)技術(shù)學(xué)院《中醫(yī)學(xué)專業(yè)導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 周口理工職業(yè)學(xué)院《PB(2)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西中醫(yī)藥大學(xué)賽恩斯新醫(yī)藥學(xué)院《醫(yī)學(xué)細胞生物學(xué)討論》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西交通職業(yè)技術(shù)學(xué)院《工程結(jié)構(gòu)B》2023-2024學(xué)年第二學(xué)期期末試卷
- 分布式光伏電站項目開發(fā)合作框架協(xié)議書范本
- 2025-2030年中國烤漆臺燈管行業(yè)深度研究分析報告
- 閩南師范大學(xué)《建筑工程概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 聊城大學(xué)《大數(shù)據(jù)應(yīng)用綜合設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 濟南護理職業(yè)學(xué)院《醫(yī)學(xué)細胞及分子生物學(xué)技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江機電職業(yè)技術(shù)學(xué)院《檔案信息傳播》2023-2024學(xué)年第二學(xué)期期末試卷
- 小學(xué)生急救常識(課件)主題教育班會
- Part 7 Formal and Informal Styles課件
- 信息光學(xué)試卷試題及答案
- 文化差異及跨文化交際試題集
- 油畫人體張東方姑娘的極致美
- PC-Ф800×800錘式破碎機結(jié)構(gòu)設(shè)計
- 慢病患者隨訪服務(wù)記錄表
- 雙溪課程評量表完整優(yōu)秀版
- 偽裝常識教案(共6頁)
- 企業(yè)名字的81種數(shù)理含義
- 最新社工服務(wù)部組織架構(gòu)
評論
0/150
提交評論