數(shù)據(jù)庫技術與應用:chap02-1-關系定義_第1頁
數(shù)據(jù)庫技術與應用:chap02-1-關系定義_第2頁
數(shù)據(jù)庫技術與應用:chap02-1-關系定義_第3頁
數(shù)據(jù)庫技術與應用:chap02-1-關系定義_第4頁
數(shù)據(jù)庫技術與應用:chap02-1-關系定義_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數(shù)據(jù)庫技術與應用第二章關系模型(一)2.1

數(shù)據(jù)模型2.2

關系模型2.3

關系模型的數(shù)據(jù)結構

—在SQL中定義關系模式2.4關系模型的數(shù)據(jù)操作

—關系代數(shù)

第二章內容提要實質是用于描述數(shù)據(jù)的一種表示法。它由三個部分組成:1.數(shù)據(jù)結構2.數(shù)據(jù)操作3.數(shù)據(jù)約束

問題1.數(shù)據(jù)模型是什么?2.1數(shù)據(jù)模型概述數(shù)據(jù)模型三要素

目前,兩種最重要的數(shù)據(jù)模型:1.關系模型,基于關系(也稱為表)2.半結構化數(shù)據(jù)模型,典型代表是XML其他數(shù)據(jù)模型:對象—關系模型(發(fā)展趨勢)面向對象數(shù)據(jù)庫模型層次模型、網狀模型(已過時)數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)模型

√關系模型是基于表的,其數(shù)據(jù)結構是表(也稱關系),其數(shù)據(jù)操作是面向表的,其數(shù)據(jù)約束是限制表中數(shù)據(jù)的。關系示例——MoviestitlemYearmLengenreGoneWiththeWind1939231dramaKungFuPanda2201190animationMovies<Movies>

<Movie

title=“Gonewiththewind”>

<mYear>1939</mYear>

<mLen>231</mLen>

<Genre>drama</Genre>

</Movie>

<Movie

title=“KungFuPanda2”>

<mYear>2011</mYear>

<mLen>90</mLen>

<Genre>animation</Genre>

</Movie></Movies>XML文件示例——Movies2.2關系模型基礎關系模型的數(shù)據(jù)結構:二維表,稱為關系。例2.1Movies關系titlemYearmLengenreGoneWiththeWind1939231dramaStarWars1977124sciFiKungFuPanda2201190animationMovies1.屬性(Attributes):一個關系中的列稱為屬性。

如例2.1中title,mYear,mLen,genre。

屬性名在各列頭,描述其值的含義。2.關系模式(Schemas):一個關系的名稱及其所有屬性集成為該關系的模式。表示為,

關系名(屬性1,屬性2,…)

其中,屬性的次序任意。

如Movies關系模式為,Movies(title,mYear,mLen,genre)關系的相關術語(一)3.關系數(shù)據(jù)庫模式(relationaldatabaseschema)

在關系數(shù)據(jù)庫中,一個數(shù)據(jù)庫是由一個或多個關系組成的。組成一個數(shù)據(jù)庫的關系模式的集合,就稱為關系數(shù)據(jù)庫模式,簡稱數(shù)據(jù)庫模式。4.元組(Tuples)一個關系中的行(除屬性名所在的頭行外)稱為元組。每一元組在每列上只有一個元素。元組的次序任意。

如(StarWars,1977,124,sciFi),是例2.1Movies的第二個元組。關系的相關術語(二)5.域(Domains):或屬性的數(shù)據(jù)類型

關系模型要求元組在每一屬性上的取值不可再分,且屬性取值應在一個域(Domains)內。

這就要求,屬性的數(shù)據(jù)類型只能是基本數(shù)據(jù)類型,

如整型,字符串等。不能是包含多項元素的復合類型,如結構、數(shù)組等。

如在例2.1Movies關系中,各屬性域如下:title:字符串,mYear:日期,mLen:整型,genre:字符串

關系的相關術語(三)titlemYearmLengenreGoneWiththeWind1939231dramaStarWars1977124sciFiKungFuPanda2201190animation相同的關系,不同的展示titlemYearmLengenreStarWars1977124sciFiGoneWiththeWind1939231dramaKungFuPanda2201190animationmYeartitlemLengenre1939GoneWiththeWind231drama1977StarWars124sciFi2011KungFuPanda290animation例2.2一個有n個元組、m個屬性的關系實例,有多少種不同的展示?6.關系的鍵(Keys)關系模型提供的一種數(shù)據(jù)約束

關系模型要求,一個關系中每一個元組都是唯一的,不允許存在完全相同的元組。鍵(或稱超鍵)是一個關系的屬性集,它能保證該關系的所有元組在這個屬性集上取值各不相同。換句話說,鍵是能唯一標識一個元組的屬性集。候選鍵是鍵的一個最小屬性子集,它既保持了鍵的唯一性,又不可縮減。一個關系可以有多個候選鍵,選擇其一作為主鍵(PrimaryKey)。

在關系模式中主鍵用下線標記。

如Movies(title,mYear,mLen,genre)

關系的相關術語(四)Movies(title,mYear,mLen,genre,studioName,producerNo)MovieStar(name,address,gender,birthday)StarsIn(movieTitle,movieYear,starName)MovieExec(name,address,execNo,netWorth)Studio(name,address,presNo)例2.3下列關系中的主鍵問題:每個關系的候選鍵有哪些?從中選擇主鍵。電影關系數(shù)據(jù)庫模式思考:根據(jù)上述6個基本概念,請同學們分析關系具有哪些基本性質?SQL(StructuredQueryLanguage)是用于描述和操作關系數(shù)據(jù)庫的標準語言。

主要包括兩個方面內容:1)

數(shù)據(jù)定義子語言(Data-Definitionsublanguage)

用于定義數(shù)據(jù)庫模式2)數(shù)據(jù)操作子語言(Data-Manipulationsublanguage)

用于查詢或更新數(shù)據(jù)庫2.3在SQL中定義關系模式SQL中有三種不同的關系:表(tables),存儲式的關系,是最常用的一種。它存于數(shù)據(jù)庫中,可被更新和查詢。視圖(views),非存儲的,計算時根據(jù)需要可全部或部分構建的關系。臨時表,由SQL語言處理器在執(zhí)行查詢或更新操作時臨時構建,處理器結束工作后即釋放。SQL中的關系用CreateTable定義這種關系模式用CreateView定義視圖模式字符串類型:char(n)長度為n的定長字符串,存n個字符,n/2個漢字varchar(n)變長字符串,長度不超過n注意:SQL中字符串常量用單引號括起。如‘王文’整型數(shù):int,

4字節(jié)(T-SQL)-2^31~2^31-1smallint,2個字節(jié)(T-SQL)

-2^15~2^15-1

近似數(shù)字real4字節(jié)(T-SQL)float存儲數(shù)據(jù)范圍較real大

SQL基本數(shù)據(jù)類型(一)精確數(shù)字:decimal(n,d)和numeric(n,d)固定精度的數(shù)據(jù),n是數(shù)字位數(shù),d是小數(shù)位數(shù)。

money

和smallmoney

存儲8字節(jié)存儲4字節(jié)日期和時間類型

date、

time、datetime

‘yyyy-mm-dd’

‘hh:mm:ss.d’http:///zh-cn/library/ms187752.aspxSQL基礎數(shù)據(jù)類型(二)語法格式:

CREATETABLE表名(

屬性1類型

基于屬性的約束,

屬性2類型

基于屬性的約束,

屬性n類型

基于屬性的約束,

基于元組的約束,┇)表定義(或稱關系模式定義)例2.4最簡單的表定義

要求:

給出MovieStar的表定義,暫不考慮約束。CREATETABLE

MovieStar(namevarchar(30),addressvarchar(200),genderchar(1)

,birthdaydate

)例2.5請給出Movies關系的最簡關系模式定義,

暫不考慮約束。課堂練習CREATETABLEMovies(titlevarchar(50),mYearint,mLenint,genrevarchar(10),studioNamevarchar(100), producerNochar(6))ALTERTABLE表名ADD

屬性

類型

ALTERTABLE表名DROP

屬性1.完全刪除已存在的表(包括表模式和元組)

DROPTABLE表名2.修改已存在的表較常用

刪除/修改關系模式增加屬性,要指明類型刪除屬性要求:在MovieStar關系模式中添加phone屬性,電話號碼可取長為11的定長字符串。例2.6修改MovieStar模式ALTERTABLEMovieStar

ADD

phone

char(11)說明:新加屬性phone后,系統(tǒng)默認其值為NULL。

NULL是“無值”或“空”的意思。默認為Null,意味著該屬性值在沒有獲得實際值時,可以為空。作用:當向表中添加或修改一個元組時,若其中某屬性實際值未知,則或者取NULL,或者指定一個常用值。這個常用值就稱為默認值,用關鍵字DEFAULT來聲明。定義表時,設置default約束的方法:例如,設置MovieStar中gender的默認值為‘M’,

genderchar(1)

DEFAULT

‘M’

默認值約束CREATETABLE

表名(……

屬性類型

DEFAULT

默認值,……)

作用:保證一個關系中任意兩個元組在主鍵上的取值不同,稱為實體完整性約束。任何違反此約束的插入或更新操作都將被拒絕。聲明主鍵:

在表定義時(CREATETABLE語句),有兩種方法當主鍵是單一屬性時,在聲明屬性的同時指定主鍵。——基于屬性的約束聲明法當主鍵是多屬性的集合時,則在所有屬性聲明之后,單獨添加主鍵聲明子句?!谠M的約束聲明法主鍵(PrimaryKey)約束聲明主鍵的關鍵字:PRIMARYKEY

其構成屬性的取值均不許NULL。聲明主鍵例2.7給出MovieStar表定義,name屬性有唯一性,可做主鍵。用PRIMARYKEY聲明主鍵。

CREATETABLEMovieStar(namevarchar(30)PRIMARYKEY,addressvarchar(200),genderchar(1),birthdaydate)CREATETABLEMovieStar(namevarchar(30),addressvarchar(200),genderchar(1),birthdaydate

,

PRIMARYKEY(name))或由多屬性構成的主鍵,被稱為復合鍵。例2.8請給出Movies關系的關系模式定義,

設{title,mYear}為主鍵。例2.8聲明復合鍵

CREATETABLEMovies(

titlevarchar(50),mYearint,mLenint,genrevarchar(10),studioNamevarchar(100), producerNochar(6)

,

PRIMARYKEY(title,mYear))表間的聯(lián)系在任意兩個有聯(lián)系的表中,雙方起聯(lián)系作用的屬性取值具有參照和被參照的關系。這是另一種約束,即參照完整性約束,也稱外鍵約束。Movies(title,mYear,mLen,genre,studioName,producerNo)MovieStar(name,address,gender,birthday)StarsIn(movieTitle,movieYear,starName)MovieExec(name,address,execNo,netWorth)Studio(name,address,presNo)觀察電影關系數(shù)據(jù)庫模式,可發(fā)現(xiàn)表間的如下聯(lián)系:請同學們畫出實驗三的數(shù)據(jù)庫關系圖在關系數(shù)據(jù)庫中,兩個表間可能存在如下關系:一個表中某屬性或屬性組取值須引自另一個表中已有屬性值。這里,第一個表是引用表,第二個表是被參照表。

如學生選課表sc中學號snum必須來自表student中已有snum。

在SQL中,通過將引用表中這個屬性組設為外鍵,以實現(xiàn)兩表之間的引用與被引用關系。規(guī)定:在被參照表(又稱主鍵表)中,被參照的屬性或屬性組必須已聲明為主鍵;在引用表(又稱外鍵表)中,聲明外鍵約束,指明其屬性取值引自被參照表中的主鍵。外鍵(Foreignkey)約束在定義表時,有兩種方法可聲明外鍵:如果外鍵是單個屬性,則在CREATETABLE語句中,外鍵屬性名及數(shù)據(jù)類型后以references為關鍵字,參照主鍵表的主鍵屬性。形式如下:若外鍵是屬性集時,在CREATETABLE語句中,所有屬性聲明子句之后,添加外鍵聲明子句。形式如下:聲明外鍵FOREIGNKEY(屬性組)REFERENCES主鍵表名(主鍵屬性組)屬性類型REFERENCES主鍵表名(主鍵屬性)1.MovieExec表定義CREATETABLEMovieExec(namevarchar(30),addressvarchar(200),execNochar(6)PRIMARYKEY,netWorthmoney)例2.9電影數(shù)據(jù)庫2.Studio表定義CREATETABLEStudio(namevarchar(100)PRIMARYKEY,addressvarchar(200),presNochar(6)REFERENCESMovieExec(execNo))例2.9電影數(shù)據(jù)庫3.Movies表定義CREATETABLEMovies(titlevarchar(50),mYearint,mLenint,genrevarchar(10),studioNamevarchar(100)REFERENCESStudio(name),producerNochar(6)REFERENCESMovieExec(execNo),

PRIMARYKEY(title,mYear))5.StarsIn表定義CREATETABLEStarsIn(movieTitlevarchar(50),movieYearint,starNamevarchar(30)referencesMovieStar(name),foreignkey(movieTitle,movieYear)REFERENCESMovies(title,mYear),primarykey(movieTitle,movieYear,starName))例2.9電影數(shù)據(jù)庫4.MovieStar表定義CREATETABLEMovieStar(namevarchar(30)PRIMARYKEY,addressvarchar(200),genderchar(1),birthdaydate)作用:

是基于屬性的約束,它約束指定屬性的取值不為空。表定義時,設置NOTNULL約束的方法:

若約束某屬性取值不空,則在該屬性名及其數(shù)據(jù)類型后,用關鍵字NOTNULL聲明即可。NOTNULL約束CREATETABLE

表名(……

屬性類型

NOTNULL,……)

例2.10設置NOTNULL約束要求:在MovieStar表定義時,設gender不允許空。CREATETABLEMovieStar(

name

varchar(30)

PRIMARYKEY,

addressvarchar(200),

genderchar(1)

NOTNULL,

birthday

date

)作用:約束屬性取值必須滿足某一條件。當執(zhí)行該屬性相關的更新操作時,檢查check約束條件是否滿足,若不滿足,則拒絕執(zhí)行更新操作。表定義時,設置CHECK約束的方法:

基于屬性的CHECK約束CREATETABLE

表名(……屬性類型

CHECK(屬性值應滿足的條件表達式),

……)

例2.11設置基于屬性的CHECK約束

要求:

在MovieStar表定義時,設gender只取‘F’或‘M’。CREATETABLEMovieStar(

namevarchar(30)

PRIMARYKEY,

addressvarchar(200),

gender

char(1)NOTNULLCHECK(genderin('F','M')),

birthdaydate

)作用:約束元組必須滿足條件。當有新元組插入或有更新元組的操作時,CHECK約束就進行檢查,若新元組或更新的元組不滿足CHECK條件,則拒絕執(zhí)行插入或更新操作。主要用于,涉及多屬性的條件約束。聲明位置:在CREATETABLE所有屬性聲明、主鍵聲明、外鍵聲明后,單獨添加CHECK約束子句。形如,

CHECK(元組應滿足的條件表達式)

基于元組的CHECK約束例2.12設置基于元組的CHECK約束要求:在MovieStar表定義時,加如下約束:如果一個影星性別為男性,則其姓名不能以Ms.開始。CREATETABLEMovieStar(

namevarchar(30)

PRIMARYKEY,

addressvarchar(200),

gender

char(1)CHECK(genderin('M','F')),

birthdaydate

,

CHECK(gender='F'ORnameNOTLIKE'Ms.%')

)

類型

運算符用法示例算術比較

>、<、<>、=、<=、>=、!<、!>、!=實驗三SC表CHECK(score>=0andscore<=100)確定范圍

BETWEEN…AND、NOTBETWEEN…AND實驗三course表CHECK(creditsBETWEEN0AND8)集合屬于

IN、NOTIN實驗三Student表CHECK(sexIN('男',

'女'))字符匹配

LIKE、NOTLIKE實驗三Student表CHECK(snumLIKE's%')邏輯運算

AND、OR、NOT實驗三SC表CHECK(score>=0andscore<=100)補充:CHECK約束常用運算符補充:LIKE運算的中通配符通配符含義用法示例%包含零個或多個字符的任意字符串。MovieStar表CHECK(name

LIKE'Ms.%')約束name屬性值以Ms.開始。_(下劃線)任何單個字符。實驗三Course表CHECK(cnum

LIKE'c___')約束cnum屬性值以c為首的4個字符。[]在指定范圍([a-f])或集合([abcdef])中的任何單個字符。實驗三Sections表CHECK(secnum

LIKE'[0-9][0-9][0-9][0-9][0-9][0-9]')約束secnum必須為6為數(shù)字。[^]不在指定范圍([^a-f])或集合([^abcdef])中的任何單個字符。MovieStar表CHECK(nameLIKE'[^0-9]%')約束name屬性首字母不為數(shù)字。作用:

是基于屬性的約束,它約束指定屬性的非空取值唯一。表定義時,設置Unique約束的方法:

若約束某屬性取值唯一,則在該屬性名及其數(shù)據(jù)類型后,用關鍵字Unique聲明即可。Unique約束CREATETABLE

表名(……

屬性類型

Unique,……)

例2.13設置Unique(唯一值)約束要求:在MovieStar表定義中添加一個屬性phone,設其為長度為12的字符串,并約束其非空取值唯一。CREATETABLEMovieStar(

namevarchar(30)

PRIMARYKEY,

addressvarchar(200),

gender

char(1)CHECK(genderin('M','F')),

birthdaydate

,

phonechar(12)

溫馨提示

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

評論

0/150

提交評論