数据库技术与应用:chap02-1-关系定义_第1页
数据库技术与应用:chap02-1-关系定义_第2页
数据库技术与应用:chap02-1-关系定义_第3页
数据库技术与应用:chap02-1-关系定义_第4页
数据库技术与应用:chap02-1-关系定义_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库技术与应用第二章关系模型(一)2.1

数据模型2.2

关系模型2.3

关系模型的数据结构

—在SQL中定义关系模式2.4关系模型的数据操作

—关系代数

第二章内容提要实质是用于描述数据的一种表示法。它由三个部分组成:1.数据结构2.数据操作3.数据约束

问题1.数据模型是什么?2.1数据模型概述数据模型三要素

目前,两种最重要的数据模型:1.关系模型,基于关系(也称为表)2.半结构化数据模型,典型代表是XML其他数据模型:对象—关系模型(发展趋势)面向对象数据库模型层次模型、网状模型(已过时)数据库系统中的数据模型

√关系模型是基于表的,其数据结构是表(也称关系),其数据操作是面向表的,其数据约束是限制表中数据的。关系示例——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关系模型基础关系模型的数据结构:二维表,称为关系。例2.1Movies关系titlemYearmLengenreGoneWiththeWind1939231dramaStarWars1977124sciFiKungFuPanda2201190animationMovies1.属性(Attributes):一个关系中的列称为属性。

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

属性名在各列头,描述其值的含义。2.关系模式(Schemas):一个关系的名称及其所有属性集成为该关系的模式。表示为,

关系名(属性1,属性2,…)

其中,属性的次序任意。

如Movies关系模式为,Movies(title,mYear,mLen,genre)关系的相关术语(一)3.关系数据库模式(relationaldatabaseschema)

在关系数据库中,一个数据库是由一个或多个关系组成的。组成一个数据库的关系模式的集合,就称为关系数据库模式,简称数据库模式。4.元组(Tuples)一个关系中的行(除属性名所在的头行外)称为元组。每一元组在每列上只有一个元素。元组的次序任意。

如(StarWars,1977,124,sciFi),是例2.1Movies的第二个元组。关系的相关术语(二)5.域(Domains):或属性的数据类型

关系模型要求元组在每一属性上的取值不可再分,且属性取值应在一个域(Domains)内。

这就要求,属性的数据类型只能是基本数据类型,

如整型,字符串等。不能是包含多项元素的复合类型,如结构、数组等。

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

关系的相关术语(三)titlemYearmLengenreGoneWiththeWind1939231dramaStarWars1977124sciFiKungFuPanda2201190animation相同的关系,不同的展示titlemYearmLengenreStarWars1977124sciFiGoneWiththeWind1939231dramaKungFuPanda2201190animationmYeartitlemLengenre1939GoneWiththeWind231drama1977StarWars124sciFi2011KungFuPanda290animation例2.2一个有n个元组、m个属性的关系实例,有多少种不同的展示?6.关系的键(Keys)关系模型提供的一种数据约束

关系模型要求,一个关系中每一个元组都是唯一的,不允许存在完全相同的元组。键(或称超键)是一个关系的属性集,它能保证该关系的所有元组在这个属性集上取值各不相同。换句话说,键是能唯一标识一个元组的属性集。候选键是键的一个最小属性子集,它既保持了键的唯一性,又不可缩减。一个关系可以有多个候选键,选择其一作为主键(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下列关系中的主键问题:每个关系的候选键有哪些?从中选择主键。电影关系数据库模式思考:根据上述6个基本概念,请同学们分析关系具有哪些基本性质?SQL(StructuredQueryLanguage)是用于描述和操作关系数据库的标准语言。

主要包括两个方面内容:1)

数据定义子语言(Data-Definitionsublanguage)

用于定义数据库模式2)数据操作子语言(Data-Manipulationsublanguage)

用于查询或更新数据库2.3在SQL中定义关系模式SQL中有三种不同的关系:表(tables),存储式的关系,是最常用的一种。它存于数据库中,可被更新和查询。视图(views),非存储的,计算时根据需要可全部或部分构建的关系。临时表,由SQL语言处理器在执行查询或更新操作时临时构建,处理器结束工作后即释放。SQL中的关系用CreateTable定义这种关系模式用CreateView定义视图模式字符串类型:char(n)长度为n的定长字符串,存n个字符,n/2个汉字varchar(n)变长字符串,长度不超过n注意:SQL中字符串常量用单引号括起。如‘王文’整型数:int,

4字节(T-SQL)-2^31~2^31-1smallint,2个字节(T-SQL)

-2^15~2^15-1

近似数字real4字节(T-SQL)float存储数据范围较real大

SQL基本数据类型(一)精确数字:decimal(n,d)和numeric(n,d)固定精度的数据,n是数字位数,d是小数位数。

money

和smallmoney

存储8字节存储4字节日期和时间类型

date、

time、datetime

‘yyyy-mm-dd’

‘hh:mm:ss.d’http:///zh-cn/library/ms187752.aspxSQL基础数据类型(二)语法格式:

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后,系统默认其值为NULL。

NULL是“无值”或“空”的意思。默认为Null,意味着该属性值在没有获得实际值时,可以为空。作用:当向表中添加或修改一个元组时,若其中某属性实际值未知,则或者取NULL,或者指定一个常用值。这个常用值就称为默认值,用关键字DEFAULT来声明。定义表时,设置default约束的方法:例如,设置MovieStar中gender的默认值为‘M’,

genderchar(1)

DEFAULT

‘M’

默认值约束CREATETABLE

表名(……

属性类型

DEFAULT

默认值,……)

作用:保证一个关系中任意两个元组在主键上的取值不同,称为实体完整性约束。任何违反此约束的插入或更新操作都将被拒绝。声明主键:

在表定义时(CREATETABLE语句),有两种方法当主键是单一属性时,在声明属性的同时指定主键。——基于属性的约束声明法当主键是多属性的集合时,则在所有属性声明之后,单独添加主键声明子句。——基于元组的约束声明法主键(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))表间的联系在任意两个有联系的表中,双方起联系作用的属性取值具有参照和被参照的关系。这是另一种约束,即参照完整性约束,也称外键约束。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)观察电影关系数据库模式,可发现表间的如下联系:请同学们画出实验三的数据库关系图在关系数据库中,两个表间可能存在如下关系:一个表中某属性或属性组取值须引自另一个表中已有属性值。这里,第一个表是引用表,第二个表是被参照表。

如学生选课表sc中学号snum必须来自表student中已有snum。

在SQL中,通过将引用表中这个属性组设为外键,以实现两表之间的引用与被引用关系。规定:在被参照表(又称主键表)中,被参照的属性或属性组必须已声明为主键;在引用表(又称外键表)中,声明外键约束,指明其属性取值引自被参照表中的主键。外键(Foreignkey)约束在定义表时,有两种方法可声明外键:如果外键是单个属性,则在CREATETABLE语句中,外键属性名及数据类型后以references为关键字,参照主键表的主键属性。形式如下:若外键是属性集时,在CREATETABLE语句中,所有属性声明子句之后,添加外键声明子句。形式如下:声明外键FOREIGNKEY(属性组)REFERENCES主键表名(主键属性组)属性类型REFERENCES主键表名(主键属性)1.MovieExec表定义CREATETABLEMovieExec(namevarchar(30),addressvarchar(200),execNochar(6)PRIMARYKEY,netWorthmoney)例2.9电影数据库2.Studio表定义CREATETABLEStudio(namevarchar(100)PRIMARYKEY,addressvarchar(200),presNochar(6)REFERENCESMovieExec(execNo))例2.9电影数据库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电影数据库4.MovieStar表定义CREATETABLEMovieStar(namevarchar(30)PRIMARYKEY,addressvarchar(200),genderchar(1),birthdaydate)作用:

是基于属性的约束,它约束指定属性的取值不为空。表定义时,设置NOTNULL约束的方法:

若约束某属性取值不空,则在该属性名及其数据类型后,用关键字NOTNULL声明即可。NOTNULL约束CREATETABLE

表名(……

属性类型

NOTNULL,……)

例2.10设置NOTNULL约束要求:在MovieStar表定义时,设gender不允许空。CREATETABLEMovieStar(

name

varchar(30)

PRIMARYKEY,

addressvarchar(200),

genderchar(1)

NOTNULL,

birthday

date

)作用:约束属性取值必须满足某一条件。当执行该属性相关的更新操作时,检查check约束条件是否满足,若不满足,则拒绝执行更新操作。表定义时,设置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条件,则拒绝执行插入或更新操作。主要用于,涉及多属性的条件约束。声明位置:在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为数字。[^]不在指定范围([^a-f])或集合([^abcdef])中的任何单个字符。MovieStar表CHECK(nameLIKE'[^0-9]%')约束name属性首字母不为数字。作用:

是基于属性的约束,它约束指定属性的非空取值唯一。表定义时,设置Unique约束的方法:

若约束某属性取值唯一,则在该属性名及其数据类型后,用关键字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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论