数据库原理与应用快速入门 课件 3.1 键_第1页
数据库原理与应用快速入门 课件 3.1 键_第2页
数据库原理与应用快速入门 课件 3.1 键_第3页
数据库原理与应用快速入门 课件 3.1 键_第4页
数据库原理与应用快速入门 课件 3.1 键_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

数据库原理与应用快速入门3.1键3.2级联更新和级联删除3.3表间联系第3章

理解数据库相关概念3.4排序与索引3.5实施约束3.1.1主键和实体完整性3.1.2为表设置主键3.1键3.1.3外键和参照完整性3.1.4为表设置外键3.1.1主键和实体完整性键(Key)是关系中一列或者多列的组合。关系中存在一些键,它们保存的数据,其值是唯一的,可以用来唯一地标识表中的一条记录。我们从这些能唯一标识一条记录的键中选择一个作为主键(PrimaryKey)。简单的情况下,主键只包含一列,在复杂的情况下,主键可能包含多列,甚至包含关系中的全部列。3.1.1主键和实体完整性请注意,判断某些键是否能唯一标识一条记录,仅对关系中现有的数据进行检查是不够的。现有的数据没有重复,并不代表将来保存在关系中的数据不会发生重复。在实际应用中,数据库设计者必须询问用户或相关专家,以确定哪些键能唯一标识一条记录。3.1.1主键和实体完整性选取主键的一般原则是,主键尽量简单而确定。整型数据操作起来效率比其他数据类型高,主键应优先考虑整型;而隐私信息则最好不要用作主键,如身份证号。3.1.1主键和实体完整性主键确定后,我们在描述表的结构时可在主键的下方加上下划线。students(stuId,stuName,class,sex,birth,telNo,Email,comment)3.1.1主键和实体完整性既然主键用于唯一标识关系中的一条记录,那么主键下的数据项不能为空值,因为空值不能用于标识记录。同时,主键下的数据项也不能出现重复,因为一旦发生重复,就不再是唯一标识了。这种保证主键字段的取值唯一且不能为空值的规则,称为实体完整性。3.1.2为表设置主键设置主键有两种方式,一是直接通过命令进行设置,二是通过图形化工具进行设置。3.1.2为表设置主键通过命令为表设置主键CREATETABLE表名(列名1数据类型[列级约束条件][默认值],列名2数据类型[列级约束条件][默认值],......[表级约束条件]);创建表时,可以在列级约束条件或表级约束条件中设置主键。在列级约束条件中设置主键适用于主键是单个列的情况,直接在该列的数据类型后面加上PRIMARYKEY。在表级约束条件中设置主键适用于主键是多个列的组合的情况,格式为PRIMARYKEY(列名1,列名2...)。3.1.2为表设置主键【例3-1】在数据库student中创建数据表students,同时指定stuId列为主键。createtablestudents(stuIdchar(9)primarykey,stuNamevarchar(10),classvarchar(30),sexenum('男','女'),birthdate,telNovarchar(15),Emailvarchar(50),commentvarchar(100));3.1.2为表设置主键【例3-2】在数据库student中创建数据表sc,同时指定stuId和corId列组合为主键。createtablesc(stuIdchar(9),corIdchar(3),scoredecimal(4,1),strDatedate,primarykey(stuId,corId));3.1.2为表设置主键如果一个数据表已经存在于数据库系统中,只是在创建表时没有设置主键,则可以使用修改表命令增加主键的设置。命令如下:

ALTERTABLE表名MODIFY字段名数据类型PRIMARYKEY;3.1.2为表设置主键【例3-3】对于数据库student中已经存在的数据表courses,设置列corId为主键。

ALTERTABLEcoursesMODIFYcorIdPRIMARYKEY;3.1.2为表设置主键通过图形化工具为表设置主键【例3-4】使用Navicat为数据库student中的students表设置主键。3.1.2为表设置主键通过图形化工具为表设置主键【例3-5】使用Navicat为数据库student中的sc表设置主键。3.1.3外键和参照完整性所谓外键(ForeignKey),指的是在关系A中的键F,如果与关系B中的主键K相对应,则键F称为关系A的外键。3.1.3外键和参照完整性外键的数据必须在相对应的主键中预先存在的规则,称为参照完整性。参照完整性在一定程度上保证了数据库中数据的正确性。3.1.4为表设置外键设置外键有两种方式,一是直接通过命令进行设置,二是通过图形化工具进行设置。3.1.4为表设置外键通过命令为表设置外键创建表时,可以在表级约束条件中设置外键。设置外键的命令语法格式如下:

[CONSTRAINT外键名]FOREIGNKEY(列名)REFERENCES主表名(列名)其中,外键名是设置的外键的名称,可以省略不写;列名为要设置外键的列,主表名为其对应的主键表名,列名为主键列名。3.1.4为表设置外键【例3-6】在数据库student中创建数据表sc,指定stuId和corId列组合为主键。同时,指定stuId列为外键,参考students表的主键stuId,指定corId列为外键,参考courses表的主键corId。createtablesc(stuIdchar(9),corIdchar(3),scoredecimal(4,1),strDatedate,primarykey(stuId,corId),Foreignkey(stuId)referencesstudents(stuId),Foreignkey(corId)referencescourses(corId));3.1.4为表设置外键通过图形化工具设置外键【例3-7】使用Navicat为数据库student中的sc表设置外键。3.2级联更新和级联删除3.2级联更新和级联删除所谓级联更新,指在设置好外键的表A和B之间,如果表B的主键K中某一数据项发生更改,则数据库会自动更改表A的外键F中对应的数据项(如果存在对应)。3.2级联更新和级联删除所谓级联删除,指如果表B的主键K中某一数据项被删除了,则数据库会自动删除表A的外键F中对应的数据项(如果存在对应)。3.2级联更新和级联删除【例3-8】使用Navicat分别为student数据库中的students表和sc表、courses表和sc表之间的主外键关系设置级联更新和级联删除。3.2级联更新和级联删除【例3-8】使用Navicat分别为student数据库中的students表和sc表、courses表和sc表之间的主外键关系设置级联更新和级联删除。3.3.1一对一联系3.3.2一对多联系3.3表间联系3.3.3多对多联系3.3.1

一对一联系如果第一个表的一条记录仅关联到第二个表的一条(或零条)记录,并且第二个表的一条记录也仅关联到第一个表的一条记录(注意,此时必须有一条关联记录,不能是零条),就称这对表之间存在一对一的联系。这时,第一个表为父表,第二个表为子表。3.3.2

一对多联系如图3-15所示,students表中含有“dorNo”这一外键,表示宿舍序号,对应dormitory表中的主键“no”。现实的情况是,一个学生住在一间宿舍,一间宿舍可以住多名学生,或者一名学生都不住。表现在表上,对于students表,每条记录有一个宿舍序号dorNo;dormitory表(no为主键)的一条记录对应学生表(dorNo为外键)零条或多条记录。这种表间联系即为一对多联系,其中dormitory表是父表,students表是子表。一对多联系是数据库中出现最多、最为重要的表间联系。3.3.2

一对多联系3.3.3

多对多联系如果第一个表的一条记录可以关联到第二个表的一条或多条记录,并且第二个表的一条记录,也可关联到第一个表的一条或多条记录,或者更精确地说,第一个表与第二个表是一对多,第二个表与第一个表也是一对多,就称这两个表之间存在多对多联系。3.3.3

多对多联系多对多的联系难以在数据库中直接表示,一般要转换成两个一对多的联系。3.3.3

多对多联系了解了表间联系之后,我们如何判断数据库中存在的多个表两两之间到底有没有联系,又是哪种联系呢?可以采用以下的步骤进行判断:

(1)看看两个表之间是否存在主外键的关联,即一个表的主键是否在另外一个表中出现了。如果不存在,则这两个表一般没有联系。如果存在关联,则继续步骤(2)。

(2)看看主键所在表中的一条记录对应外键所在表的几条记录。如果主键表一条记录仅对应外键表一条或零条记录,则这两个表之间存在一对一联系;如果主键表一条记录对应外键表多条或零条记录,则这两个表之间存在一对多联系。实际上,一对多的联系是数据库中存在最多的表间联系。多对多联系因为难以在数据库中表达,一般都会转换成两个一对多来表示。3.4.1排序3.4.2索引3.4排序和索引3.4.1

排序在数据库中,常规的排序规则如下:(1)数值型数据:按值的大小进行排序。(2)英文字符:按英文码表内的编码进行排序,如ASCII码。(3)中文字符:按中文码表内的编码进行排序。表面上看,一般是按拼音的字典顺序进行排序。(4)英文符号比中文符号小,中文符号比中文字小,而空值是最小的。3.4.1

排序在数据库中,常规的排序规则如下:(5)可能在数据库系统中,指定了别的排序规则,如汉字按笔画顺序排序。也可能在已有的排序规则基础上,加上更多的规则,如加上一条“英文不区分大小写”。(6)字符串确定大小的方法:逐个比较相应位置的字符,先出现大字符的字符串较大。(7)不同类型的数据无法正确比较大小。3.4.2

索引索引本质上来说,就是一种排序。在已排序的表中查找数据,通常速度会更快。索引的作用主要是为了加快数据的检索定位。有时,表中有索引和没有索引,查询的性能相差极远,足以影响用户的体验。3.4.2

索引图3-19是索引原理的简单示意图。3.4.2

索引实际上,表上的索引并不是越多越好。通常情况下,只有当经常查询索引列中的数据时,才需要对该列创建索引。索引数据会占用磁盘空间,过度索引可能降低数据添加、删除和更新的速度。不过在多数情况下,索引所带来的数据检索速度的优势大大超过它的不足之处。另外,如果列的数据存在大量重复,索引的效果将不明显。3.4.2

索引常用的索引类型有:唯一索引、非唯一索引、主键索引等。唯一索引不允许两行数据具有相同的索引值,但允许有空值。如果现有数据中存在重复的键值,则只能创建非唯一索引。当新数据存入使表中的键值重复时,若预先在该键上建有唯一索引,数据库将拒绝接受此数据。数据库对于唯一索引和非唯一索引的组织机制是不同的。定义表时,系统自动为主键创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,访问数据的速度很快。3.4.2

索引表3.8student数据库中的索引设计表索引列索引类型理由studentsstuId主键索引作为主键,索引自动产生。stuName非唯一索引经常按姓名查找数据。birth非唯一索引经常计算年龄,做与出生年月日相关的查找。telNo非唯一索引有时按电话查找数据。coursescorId主键索引作为主键,索引自动产生。corName唯一索引常按课程名查找数据,希望所有课程都有唯一名称,以示区分。scstuId,corId主键索引作为主键,索引自动产生。strDate非唯一索引选修时,需经常作时间判断,限定时间范围等。3.4.2

索引为表创建索引的命令格式如下:

CREATE[UNIQUE]INDEX索引名ON表名(列名)[ASC|DESC]其中,UNIQUE为可选参数,表示唯一索引;索引名最好使用有意义的名称以方便识别;如果基于数据表中的单列创建索引,则列名为单个列,如果基于多列创建索引,则列名包含多个,用逗号隔开;ASC或DESC指定升序或降序排列索引数据。3.4.2

索引【例3-9】在student数据库中,为courses表的corName列设置唯一索引。3.5.1实施非空约束3.5.2实施唯一约束3.5实施约束3.5.3实施默认约束3.5.4实施用户自定义约束3.5.

实施约束约束,是施加在数据库的表上或者表与表之间的一些规则。约束的作用是保证数据库中的数据始终处于正确的状态。要注意的是,有实在的意义的规则才是我们所需要的,规则必须在数据的有效性、一致性方面发挥确切有效的作用。3.5.

实施约束判断一个约束是否必要,可根据以下几个原则:1)可减少输入错误,保证数据的有效性。2)约束能够满足业务的需求,是用户提出来的,不是自己硬找出来的。3)当指定一个键是主键或外键时,此处隐含了约束(即实体完整性和参照完整性)。3.5.1

实施非空约束如果对表中的列实施了非空约束,则该列的取值不允许为空值。如果用户在实施了非空约束的列上输入了空值,数据库系统将会报错。非空约束使用“notnull”来表示。3.5.1

实施非空约束【例3-10】对students表的stuName列实施非空约束。createtablestudents(stuIdchar(9)primarykey,stuNamevarchar(10)notnull,classvarchar(30),sexenum('男','女'),birthdate,telNovarchar(15),Emailvarchar(50),commentvarchar(100));3.5.2

实施唯一约束如果对表中的列实施了唯一约束,则该列的取值不允许重复。如果用户在实施了唯一约束的列上输入了重复值,数据库系统将会报错。实施了唯一约束的列允许为空,但空值只能出现一次。唯一约束使用“unique”来表示。3.5.2

实施唯一约束【例3-11】对courses表的corName列实施唯一约束。createtablecourses(corIdchar(3)primarykey,corNamevarchar(30)unique,per

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论