《关系数据库定义.ppt》由会员分享,可在线阅读,更多相关《关系数据库定义.ppt(69页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第2 2章章 关系数据库定义关系数据库定义目录1.数据模型2.关系数据模型的基本概念3.数据类型(SQL SERVER)4.模式定义数据库的定义表的定义1.数据模型在数据库中用数据模型这个工具来抽象、表示抽象、表示和处理和处理现实世界中的数据和信息。通俗地讲数据模型就是现实世界的模拟数据模型应满足三方面要求能比较真实地模拟现实世界能比较真实地模拟现实世界容易为人所理解容易为人所理解便于在计算机上实现便于在计算机上实现3数据模型数据模型的组成要素数据结构数据结构 数据操作数据操作 数据的约束条件数据的约束条件(1)数据结构什么是数据结构对象类型的集合两类对象与数据类型、内容、性质有关的对象与数
2、据之间联系有关的对象数据结构是对系统静态特性的描述(2)数据操作 数据操作数据库中各种对象(型)的实例(值)允许执行的操作操作及有关的操作规则操作规则数据操作的类型检索更新(包括插入、删除、修改)数据操作(续)数据模型对操作的定义操作的确切含义操作符号操作规则(如优先级)实现操作的语言数据操作是对系统动态特性的描述。(3)数据的约束条件 数据的约束条件数据的约束条件一组完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具数据模型中数据及其联系所具有的制约和储存规则有的制约和储存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。在关系模型中,任何关系必
3、须满足实体完整性实体完整性和参参照完整性照完整性两个条件。2.关系模型的基本概念关系(Relation)一一个个关关系系对对应应通通常常说说的的一一张张表表。把把数数据据库库表表示示为为关关系系的的集集合合,每每一一个个关关系系类类似似于于一一张张二二维维表表。表2-1是一个关系的实例,其 关 系 名 为 Student,包 含 4个 属 性:StudentNo、StudentName、Age和Dept,分别表示学号、姓名、年龄和系别四个性质。表2-1:关系StudentStudentNoStudentNameAgeDept9900011李明19计算机系9900012高亮20数学系990001
4、3张三21外语系关系模型的基本概念属性就是关系中各列,一列即为一个属性,给每一个属性起一个名称即属性名。在表2-1中,关系的属性为StudentNo、StudentName、Age和Dept,属性描述了该列各数据项的含义,例如,属性为Age的列存放着学生的年龄。关系模型的基本概念元组元组(Tuple)在表2-1中,除了关系的标题栏以外,其它各行统称为“元组”。元组的各分量分别对应各个属性在该元组上的取值。表2-1中有三个元组,第一个元组有四个分量:9900011、李明、19和计算机系分别对应于四个属性:StudentNo、StudentName、Age和Dept。单独书写元组的方法:(9900
5、011、李明、19,计算机系)关系是元组的集合,在给定的关系中,一个元组不可能出现一次以上。关系模型的基本概念属性属性(Attribute)表中的一列即为一个属性,给每一个属性起一个名称即属性名。关关系系的的模模式式:关系名和关系的属性集称为关系的“模式”。对关系的描述:关系名(属性1,属性2,属性n)模式的表示:Student(StudentNo,StudentName,Age,Dept)关系模型的基本概念分量元组中的一个属性值。域(Domain)每个属性有一个允许的值的集合,称为该属性的“域”。指定的域通常是一个特定的基本类型。关系的任何元组的每个分量都必须在对应列的域中取值。关关系系模模
6、型型要要求求每每个个元元组组的的每每个个分分量量都都是是原原子子的的,即即必必须须属属于于某某种种基基本本的的类类型型,如integer,string等。不不允允许许一一个个值值为为记记录录结结构构、集集合、列表、数组或者能合理地分解为更小分量的其他任何类型合、列表、数组或者能合理地分解为更小分量的其他任何类型。例如,在表2-1中,关系Student的元组的第一和第三个分量必须是整数,第二和第四个分量必须是字符串。关系模型的基本概念超码:一个或者多个属性的集合,这些属性的组合可以使我们在一个实体集中唯一地标识一个实体。候选码:任意真子集都不能成为超码的最小超码主码(Key)数据库中,设计人员选
7、定的,用于唯一确定一个元组的候选码。关系模型的基本概念-主码表2-2:关系Stu_courseStuentNoCourseNoScore9900011C001969900011C002859900011C003869900012C001789900012C002689900012C003Null一个表中可能存在多个候选码,相应的键称为候选键。在建立数据库的时候,从候选键中选取哪一个作为主键都可以,因此,主键是从候选键中选取出来做主键的属性。比如,对于关系Student,如果能够保证StudentName肯定不重复的话,那么StudentName列也可以作为关系Student的主键。关系数据模型
8、的数据结构(续)例1学生、系、系与学生之间的一对多联系:学生(学号,姓名,年龄,性别,系号,年级)学生(学号,姓名,年龄,性别,系号,年级)系系(系号,系名,办公地点系号,系名,办公地点)例2系、系主任、系与系主任间的一对一联系关系数据模型的数据结构(续)例3学生、课程、学生与课程之间的多对多联系:学生(学号,姓名,年龄,性别,系号,年级)学生(学号,姓名,年龄,性别,系号,年级)课程(课程号,课程名,学分)课程(课程号,课程名,学分)选修(学号,课程号,成绩)选修(学号,课程号,成绩)关系数据模型的数据结构(续)关系必须是规范化的,满足一定的规范条件最基本的规范条件:关系的每一个分量必须是一
9、个不最基本的规范条件:关系的每一个分量必须是一个不可分的数据项。可分的数据项。关系模型的完整性约束实体完整性:参照完整性:用户定义的完整性:实体完整性是指一个表中的每一行必须是唯一的即实体是可以唯一区分的。若属性A是基本关系R的主键,则属性A不能取空值,另外不能存在属性A上分量相同的元组。用户定义的完整性规则是针对某一应用环境的完整性约束条件,他反映了某一具体应用所涉及的数据应满足的要求。在实际系统中,这类完整性规则一般在建立库表的同时进行定义。例如,学生的考试成绩的取值范围为0100,或取优、良、中、及格、不及格。关系模型的完整性约束-参照完整性学生表学号姓名性别专业号专业号年龄801张三女
10、0119802李四男0120803王五男0120804赵六女0220805钱七男0219专业表专业号专业号专业名01信息02数学03计算机这样一个表中某列的取值受限于另一个表的取值范围约束的特点就称为参照完整性。在关系数据库中用外键(foreign key,有时也称为外部关键字或外码)来实现参照完整性。外键实际上是表中的一个(或多个)属性,它引用某个其他表(特殊情况下,也可以是外键所在的表)的主键,当然,也可以是候选键,但多数情况下是主键。参照完整性举例课程号课程名学分01数据库402数据结构403编译404PASCAL2学号课程号成绩80104928010378801028580203868
11、0204728030468 课程表课程表选修表选修表学号姓名性别专业号年龄801张三女0119802李四男0120803王五男0120804赵六女0220805钱七男0219学生表学生表参照完整性规则若属性(或属性组)F是基本关系R的外键(外码),它与基本关系S的主键(主码)Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。例如:学生关系中每个元组的“专业号”属性只取下面两类值:(1)空值,表示尚未给该学生分配专业。(2)非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能
12、分配到一个不存在的专业中。选修(选修(学号学号,课程号课程号,成绩),成绩)“学号”和“课程号”是选修关系中的主属性按照实体完整性和参照完整性规则,它们只能取相应被参照关系中已经存在的主码值。关系模型的数据操纵查询、插入、删除、更新数据操作是集合操作,操操作作对对象象和和操操作作结果都是关系,结果都是关系,即若干元组的集合存取路径对用户隐蔽,用户只要指出“干什么”,不必详细说明不必详细说明“怎么干怎么干”关系数据模型的存储结构表以文件形式存储有的DBMS一个表对应一个操作系统文件有的DBMS自己设计文件结构关系模型的优缺点优点建立在严格的数学概念的基础上建立在严格的数学概念的基础上概念单一。数
13、据结构简单、清晰,用户易懂易用概念单一。数据结构简单、清晰,用户易懂易用实体和各类联系都用关系来表示。实体和各类联系都用关系来表示。对数据的检索结果也是关系。对数据的检索结果也是关系。关系模型的存取路径对用户透明具有更高的数据独立性,更好的安全保密性具有更高的数据独立性,更好的安全保密性简化了程序员的工作和数据库开发建立的工作简化了程序员的工作和数据库开发建立的工作关系模型的优缺点(续)缺点存取路径对用户透明导致查询效率往往不如非存取路径对用户透明导致查询效率往往不如非关系数据模型关系数据模型为提高性能,必须对用户的为提高性能,必须对用户的查询请求进行优化查询请求进行优化增加了开发数据库管理系
14、统的难度增加了开发数据库管理系统的难度3.创建数据库模式以SQL Server 为例,介绍定义数据库模式的基本操作数据类型 整数整数Bit decimal 和和 numeric money money 和和 smallmoney smallmoney近似数字近似数字datetime 和和 smalldatetime 字符串字符串 Unicode Unicode 字符串字符串二进制字符串二进制字符串其它数据类型其它数据类型整数整数bigint:从-263(-9223372036854775808)到 263-1(9223372036854775807)的整型数据(所有数字)。int:从-231(
15、-2,147,483,648)到 231-1(2,147,483,647)的整型数据(所有数字)。smallint:从-215(-32,768)到 215-1(32,767)的整数数据。tinyint:从 0 到 255 的整数数据。Bit bitbit:1 或 0 的整数数据。decimal 和 numeric decimaldecimal:从-1038+1 到 1038 1 的固定精度和小数位的数字数据。numericnumeric:功能上等同于 decimal。money money 和和 smallmoney smallmoneymoneymoney:货币数据值介于-263(-922,
16、337,203,685,477.5808)与 263-1(+922,337,203,685,477.5807)之间,精确到货币单位的千分之十。smallmoneysmallmoney:货币数据值介于-214,748.3648 与+214,748.3647 之间,精确到货币单位的千分之十。近似数字近似数字floatfloat:从-1.79E+308 到 1.79E+308 的浮点精度数字。realreal:从-3.40E+38 到 3.40E+38 的浮点精度数字。datetime 和 smalldatetime datetimedatetime从 1753 年 1 月 1 日到 9999 年
17、12 月 31 日的日期和时间数据,精确到百分之三秒(或 3.33 毫秒)。smalldatetimesmalldatetime从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,精确到分钟。字符串 charchar:固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。varcharvarchar:可变长度的非 Unicode 数据,最长为 8,000 个字符。texttext:可变长度的非 Unicode 数据,最大长度为 231-1(2,147,483,647)个字符。Unicode Unicode 字符串字符串ncharnchar:固定长
18、度的 Unicode 数据,最大长度为 4,000 个字符。nvarcharnvarchar:可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。ntextntext:可变长度 Unicode 数据,其最大长度为 230-1(1,073,741,823)个字符。二进制字符串二进制字符串binarybinary:固定长度的二进制数据,其最大长度为 8,000 个字节。varbinaryvarbinary:可变长度的二进制数据,其最大长度为 8,000 个字节。imageim
19、age:可变长度的二进制数据,其最大长度为 231-1(2,147,483,647)个字节。其它数据类型其它数据类型cursorcursor:游标的引用。sql_variantsql_variant:一种存储 SQL Server 支持的各种数据类型(text、ntext、timestamp 和 sql_variant 除外)值的数据类型。tabletable:一种特殊的数据类型,存储供以后处理的结果集。timestamptimestamp:数据库范围的唯一数字,每次更新行时也进行更新。uniqueidentifieruniqueidentifier:全局唯一标识符(GUID)。4.CREAT
20、E DATABASE4.CREATE DATABASE创建一个新数据库及存储该数据库的文件,或从先前创建的数据库的文件中附加数据库。CREATE DATABASECREATE DATABASE database_namedatabase_name ON ON ,.n ,.n LOG ONLOG ON ,.n COLLATE collation_name FOR LOAD|FOR ATTACHFOR ATTACH :=PRIMARY(NAME=logical_file_name,FILENAME=os_file_name ,SIZE=size ,MAXSIZE=max_size|UNLIMITE
21、D ,FILEGROWTH=growth_increment ),.n :=FILEGROUP filegroup_name ,.n database_name:新数据库的名称。数据库名称在服务器中必须唯一,并且符合标识符的规则。ON:指定显式定义用来存储数据库数据部分的磁盘文件(数据文件)。LOG ON:指定显式定义用来存储数据库日志的磁盘文件(日志文件)。如果没有指定 LOG ON,将自动创建一个日志文件,该文件使用系统生成的名称,大小为数据库中所有数据文件总大小的 25%。FOR ATTACH:指定从现有的一组操作系统文件中附加数据库。数据库的存储文件数据库的存储文件有三种类型的文件用来
22、存储数据库:1.主主文文件件包含数据库的启动信息。主文件还可以用来存储数据。每个数据库都包含一个主文件每个数据库都包含一个主文件。2.次次要要文文件件保存所有主要数据文件中容纳不下的数据。如果主文件大到足以容纳数据库中的所有数据,就不需要有次要数据文件。而另一些数据库可能非常大,需要多多个个次次要要数数据据文文件件,也可能使用多个独立磁盘驱动器上的次要文件,以将数据分布在多个磁盘上。3.事事务务日日志志文文件件保存用来恢复数据库的日志信息。每个数据库必须至少有一个事务日志文件(尽管可以有多个)。事务日志文件最小为 512 KB。每个数据库至少有两个文件,一个主文件和一个事务日志文件。数据库文件
23、类型数据库文件类型文件类型文件类型文件扩展名文件扩展名主要数据文件.mdf次要数据文件.ndf事务日志文件.ldf创建数据库示例创建数据库示例USE masterGOCREATE DATABASECREATE DATABASE mytest 创建名为 mytest 的数据库,并创建相应的主文件和事务日志文件。因为该语句没有 项,所以主数据库文件的大小为 model 数据库主文件的大小。事务日志文件的大小为 model 数据库事务日志文件的大小。因为没有指定 MAXSIZE,文件可以增长到填满所有可用的磁盘空间为止。创建数据库示例创建数据库示例USE masterGOCREATE DATABAS
24、ECREATE DATABASE ProductsONON(NAME=prods_dat,FILENAME=c:program filesmicrosoft sql servermssqldataprods.mdf,SIZE=4,MAXSIZE=10,FILEGROWTH=1)创建名为 Products 的数据库,并指定单个文件。指定的文件成为主文件,并会自动创建一个 1 MB 的事务日志文件。因为主文件的 SIZE 参数中没有指定 MB 或 KB,所以主文件将以兆字节为单位进行分配。因为没有为事务日志文件指定,所以事务日志文件没有 MAXSIZE,可以增长到填满所有可用的磁盘空间为止。创建数
25、据库示例创建数据库示例USE masterGOCREATE DATABASE SalesON(NAME=Sales_dat,FILENAME=c:program filesmicrosoft sql servermssqldatasaledat.mdf,SIZE=10,MAXSIZE=50,FILEGROWTH=5)LOG ON(NAME=Sales_log,FILENAME=c:program filesmicrosoft sql servermssqldatasalelog.ldf,SIZE=5MB,MAXSIZE=25MB,FILEGROWTH=5MB)创建名为 Sales 的数据库。因
26、为没有使用关键字 PRIMARY,第一个文件(Sales_dat)成为主文件。因为 Salesdat 文件的 SIZE 参数没有指定 MB 或 KB,因此默认为 MB,以兆字节为单位进行分配。Saleslog 文件以兆字节为单位进行分配,因为 SIZE 参数中显式声明了 MB 后缀。创建数据库示例创建数据库示例USE masterCREATE DATABASECREATE DATABASE Archive ON PRIMARYON PRIMARY(NAME=Arch1,FILENAME=c:program filesmicrosoft sql servermssqldataarchdat1.m
27、df,SIZE=100MB,MAXSIZE=200,FILEGROWTH=20),(NAME=Arch2,FILENAME=c:program filesmicrosoft sql servermssqldataarchdat2.ndf,SIZE=100MB,MAXSIZE=200,FILEGROWTH=20),(NAME=Arch3,FILENAME=c:program filesmicrosoft sql servermssqldataarchdat3.ndf,SIZE=100MB,MAXSIZE=200,FILEGROWTH=20)LOG ONLOG ON(NAME=Archlog1,F
28、ILENAME=c:program filesmicrosoft sql servermssqldataarchlog1.ldf,SIZE=100MB,MAXSIZE=200,FILEGROWTH=20),(NAME=Archlog2,FILENAME=c:program filesmicrosoft sql servermssqldataarchlog2.ldf,SIZE=100MB,MAXSIZE=200,FILEGROWTH=20)使用三个 100 MB 的数据文件和两个 100 MB 的事务日志文件创建了名为 Archive 的数据库。主文件是列表中的第一个文件,并使用 PRIMARY
29、 关键字显式指定。事务日志文件在 LOG ON 关键字后指定。注意 FILENAME 选项中所用的文件扩展名:主要数据文件使用.mdf,次要数据文件使用.ndf,事务日志文件使用.ldf。分离数据库 sp_detach_db ArchiveGO 附加数据库附加数据库 CREATE DATABASECREATE DATABASE ArchiveON PRIMARY(FILENAME=c:program filesmicrosoft sql servermssqldataarchdat1.mdf)FOR ATTACHFOR ATTACH 删除数据库删除数据库语法:DROP DATABASE dat
30、abase_name ,.n 删除数据库删除数据库DROP DATABASE publishing DROP DATABASE pubs,newpubs 简单表的定义简单表的定义SQL语言使用CREATE TABLE语句定义基本表。其一般格式为:CREATE TABLE(列完整性约束,列完整性约束,表级完整性约束):是指对某一列设置的约束条件。该列上的数据必须满足。最常见的有:NOT NULL该列值不能为空NULL该列值可以为空UNIQUE该列值不能存在相同DEFAULT该列某值在未定义时的默认值CHECK用户自定义的约束:规定了关系主键、外键和用户自定义完整性约束。简单表的定义简单表的定义创
31、建部门关系表,通过外键建立部门关系表和员工关系表的关联。CREATE TABLE Dept(Dno char(6)not null primary key,Dname varchar(12)not null,Manager char(6)not null);简单表的定义简单表的定义创建员工关系表,通过外键建立部门关系表和员工关系表的关联。CREATE TABLE Employee(Eno CHAR(5)NOT NULL primary key,Ename VARCHAR(10)NOT NULL,Sex CHAR(2)NOT NULL,Marry CHAR(2)DEFAULT 未,Dno CHA
32、R(4)NULL,FOREIGN KEY(Dno)REFERENCES Dept(Dno);简单表的定义简单表的定义CREATE TABLE Employee(Eno CHAR(5)NOT NULL primary key,Ename VARCHAR(10)NOT NULL,Sex CHAR(2)NOT NULL,Marry CHAR(2)DEFAULT 未,Dno CHAR(4)REFERENCES Dept(Dno),);简单表的定义简单表的定义CREATE TABLE Employee(Eno CHAR(5)NOT NULL primary key,Ename VARCHAR(10)NO
33、T NULL,Sex CHAR(2)NOT NULL,Marry CHAR(2)DEFAULT 未,Dno CHAR(4)NULL,Constraint fcnameDno FOREIGN KEY(Dno)REFERENCES Dept(Dno);实 例-学生数据库学生数据库涉及到专业、课程、教师、学生、班级、开课计划、学生选课七个表。其中专业、课程、班级、教师是基本表班级参照了专业表开课计划参照了课程和教师表学生参照了班级表选课参照了学生和开课计划表在创建这样一个完整的数据库的表的时候被参照的表应该先建立,参照其他关系的应该后建立,否则就会产生错误。create table 专业(专业编号
34、char(10)not null primary key,专业名称 varchar(50),级别 char(6),学制 int);create table 课程(课程编号 char(10)not null primary key,课程名称 varchar(50),理论学时 int check(理论学时=0),实验学时 int check(实验学时=0),开课学期 int,课程性质课程介绍 char(200);create table 班级(班级编号 char(10)not null primary key,班级名称 varchar(50)unique,专业编号 char(10)referenc
35、es 专业(专业编号),入学年份 int default year(getdate()(getdate();create table 教师(教师编号 char(10)not null primary key,教师姓名 varchar(10),性别 char(2)check(性别=女 or 性别=男),职称 char(6),政治面貌 varchar(10),简介 char(200),生日 datetime,所在教研室 varchar(50);create table 学生(学号 char(10)not null primary key,姓名 varchar(10),性别 char(2)check
36、(性别=女 or 性别=男),生日 datetime,班级 char(10)references 班级(班级编号),政治面貌 varchar(10);create table 开课计划(开课计划编号 char(10)not null primary key,课程编号 char(10)references 课程(课程编号),教师编号 char(10)references 教师(教师编号),学期 char(9)check(学期 like 0-90-90-90-90-90-90-90-91-2);create table 选课表(学号 char(10)references 学生(学号),开课计划编号
37、 char(10)references 开课计划(开课计划编号),成绩 int check(成绩=0 and 成绩=0 and 成绩=100),foreign key(课程编号,教师编号,学期)references 开课计划(课程编号,教师编号,学期);自定义约束的写法 常见的几种自定义约束:是否可取空值的约束。取值唯一性约束。如果一个表中除了主码外,还有候选码,那么就因该对这些没有被指定为主码的候选码建立unique约束。like模式匹配。取值范围约束。create table 开课计划(开课计划编号 char(10)not null primary key,课程编号 char(10)ref
38、erences 课程(课程编号),教师编号 char(10)references 教师(教师编号),学期 char(9)check(学期 like 0-90-90-90-90-90-90-90-91-2),unique(课程编号,教师编号,学期);删除表DROP TABLE删除表定义及该表的所有数据、索引、触发器、约束和权限规范DROP TABLE table_nameDROP TABLE 不能用于除去由 FOREIGN KEY 约束引用的表。必须先除去引用的 FOREIGN KEY 约束或引用的表。基本表的修改 ALTER TABLE ADD 列完整性约束DROP COLUMN MODIFY ADD CONSTRAINT DROP CONSTRAINT 基本表的修改【例】【例】在Employee表中增加一个Birth列(出生)ALTER TALBE EmployeeADD Birth DATETIME NULL;【例】【例】修改Employee表中Marry列为BOOLEANALTER TALBE EmployeeMODIFY Marry BOOLEAN;【例】【例】删除Employee表中新增的Birth列ALTER TALBE EmployeeDROP COLUMN Birth;