整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。
专业课本:
————
本次实验使用到的图形化工具:Heidisql
目录
一、实验目的
二、实验内容
1、创建数据库
2、创建表
1.创建student表
2.创建course表
3.创建SC表
3、实现完整性约束
(1)实体完整性。
(2)参照完整性。
(3)用户自定义完整性。
4、输入记录
三、实验结果总结
MySQL是如何保证三类完整性约束的?
四、实验结果的运用
对三类完整性约束的理解,用实验例子说明。
一、实验目的
本次实验了解MySQL的启动,熟悉如何使用图形化界面方法建立数据库和表,初步了解和验证数据的完整性。
二、实验内容
1、创建数据库
创建一个数据库,命名为EDUC+自己的名字,例如:EDUC-张三。
步骤截图:
2、创建表
步骤截图:
1.创建student表
2.创建course表
3.创建SC表
3、实现完整性约束
*注:这一部分为理论内容,大家查看一下,不需要做什么操作。
(1)实体完整性。
若属性A是基本关系R的主属性,则属性A不能取空值。
分别设置三个表的主键,就能保证实体完整性规则的实施。
(2)参照完整性。
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
· 或者取空值(F的每个属性值均为空值)
· 或者等于S中某个元组的主码值。
在选修表中,设置外键,就能保证参照完整性规则的实施。
(3)用户自定义完整性。
用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
- 姓名不能为空;
- 课程名取唯一值;
- 性别只能取值'男'或'女',性别='男' or 性别='女';(MySQL8.0以下版本暂时不支持)
- 分数>=0 and 分数<=100(MySQL8.0以下版本暂时不支持)
步骤截图:
4、输入记录
给每张表输入至少4条正确记录,注意要符合完整性规则的要求,否则会出错,注意:先输入学生表和课程表中的内容,然后再输入成绩表中的内容,输入成绩表中的学号和课程号时要参照学生表中的学号和课程表中的课程号。学生表中输入本班的几个同学的信息,课程表中输入本专业的几门课程。
步骤截图:
student表
course表
SC表
注意输入记录时需要测试错误的情况,注意把出错的截图保存下来,例如:
1.某个学生的学号为空是否可以?
不可以。因为学号是学生表中的主属性。根据实体完整性的规则,主键不能取空值。
2.某个学生的姓名为空是否可以?
不可以。在表设置中手动将姓名属性设置为了“不可取空值”。用户定义的完整性就是针对某一具体关系库数据的约束条件。根据用户定义的完整性规则,关系模型必须满足用户定义的语义。因而将姓名设定为不能取空值之后再取空值就会报错。
3.某个课程名重复了是否可以?
不可以。因为课程名属性设定了只能取唯一值(Unique)。根据用户定义的完整性规则,课程名不能重复。
4.选修表中输入的学号在学生表中不存在是否可以?选修表中输入的课号在课程表中不存在是否可以?
不可以。因为学生表中的学号是选修表的外码,选修表是参照关系,学生表是被参照关系,选修表中的学号参照学生表中的学号。根据参照完整性原则,被参照关系中的主码不能不存在。第二小问同理,且课号是课程表的主属性,本身就不能不存在。
5.删除学生表中的一条记录(这个学生在选修表中选修的有课程)是否可以?
不可以。根据参照完整性规则,学生表中的学生号是选修表的外码。选修表参照学生表,学生表是被参照关系而选修表是参照关系。被参照关系发生变动,会导致参照关系找不到要参照的对象,从而出错。
6.删除学生表中的一条记录(这个学生在选修表中没有选修课程)是否可以?
可以。因为该记录与选修表之间不存在参照与被参照关系,二者没有关联,可自由删除。
7.更新学生表中的一个学生的学号(这个学生在选修表中选修的有课程)是否可以?
不可以。根据参照完整性规则,学生表中的学生号是选修表的外码。选修表参照学生表,学生表是被参照关系而选修表是参照关系。被参照关系发生变动,会导致参照关系找不到要参照的对象,从而出错。
8.更新学生表中的一个学生的学号(这个学生在选修表中没有选修课程)是否可以?
可以。因为该记录与选修表之间不存在参照与被参照关系,二者没有关联,可自由更新。
9.删除选课表中的任何一条元组是否可以?
可以。因为选课表中的任意一条元组都没有作为其他表格的被参照关系。因此可以自由删除。
三、实验结果总结
MySQL是如何保证三类完整性约束的?
答:
- 通过规定主属性不能取空值来保证所有实体都可标识和区分,从而确保其实体完整性。(设置主码)
- 通过规定参照关系上的外码值或者取空值,或者等于被参照关系上的某个元组的主码值来保证关系之间的参照完整性。(设置外码)
通过规定关系数据必须满足某一具体关系数据库约束条件的语义要求来保证关系的用户定义的完整性。(各种约束,如默认值约束,not null约束等。)
四、实验结果的运用
对三类完整性约束的理解,用实验例子说明。
答:创建了一个新的数据库,表示的是销售管理关系。
数据库内部有4张关系:
1.销售关系
2.供应商关系
3.客户关系
4.销售员关系
其中,销售关系参照了供应商关系、销售员关系与客户关系。销售关系中的供应商编号、销售员编号与客户编号均为外码。
完整性规则:
1、实体完整性:若A是基本关系R的主属性,则A不能取空值。
比如:表销售员(销售员编号,姓名,手机号)中,销售员编号是主码,则销售员编号这个属性是主属性,不能为空值。表销售(客户编号,销售员编号,供应商编号,商品,销售量,销售单价,销售日期)中,客户编号、销售员编号、供应商编号三个属性共同构成一个主码,则其中的客户编号、销售员编号、供应商编号三个属性均为主属性,都不能为空。
2、参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码相对应,则对于R中每个月组在F上的值取之允许两种可能,或者为空值,或者等于S中某个元组的主码值。
比如:销售(客户编号,销售员编号,供应商编号,商品,销售量,销售单价,销售日期),销售员(销售员编号,姓名,手机号)两关系间存在属性引用,销售关系中销售员编号是其中的外码。因此销售关系中的销售员编号的值只有两个可能,要么等于销售员关系中的某个记录的值,要么就为空。(此情况中不能为空,因为销售员编号在销售员关系中是主属性。)
3、用户定义的完整性:
用户自定义的约束条件。
比如语句check (销售单价 >= 100 and 销售单价 <= 500)