数据库系统原理实验报告2 | 创建数据库和表

整理自博主本科《数据库系统原理》专业课自己完成的实验报告,以便各位学习数据库系统概论的小伙伴们参考、学习。

专业课本:

————

本次实验使用到的图形化工具: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是如何保证三类完整性约束的?

答:

  1. 通过规定主属性不能取空值来保证所有实体都可标识和区分,从而确保其实体完整性。(设置主码)
  2. 通过规定参照关系上的外码值或者取空值,或者等于被参照关系上的某个元组的主码值来保证关系之间的参照完整性。(设置外码)

通过规定关系数据必须满足某一具体关系数据库约束条件的语义要求来保证关系的用户定义的完整性。(各种约束,如默认值约束,not null约束等。)


四、实验结果的运用

对三类完整性约束的理解,用实验例子说明。

答:创建了一个新的数据库,表示的是销售管理关系。

数据库内部有4张关系:

1.销售关系

2.供应商关系

 3.客户关系

4.销售员关系

其中,销售关系参照了供应商关系、销售员关系与客户关系。销售关系中的供应商编号、销售员编号与客户编号均为外码。 

完整性规则:

1、实体完整性:若A是基本关系R的主属性,A不能取空值。

比如:表销售员(销售员编号,姓名,手机号)中,销售员编号是主码,则销售员编号这个属性是主属性,不能为空值。表销售(客户编号,销售员编号,供应商编号,商品,销售量,销售单价,销售日期)中,客户编号、销售员编号、供应商编号三个属性共同构成一个主码,则其中的客户编号、销售员编号、供应商编号三个属性均为主属性,都不能为空。

2、参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码相对应,则对于R中每个月组在F上的值取之允许两种可能,或者为空值,或者等于S中某个元组的主码值。

比如:销售(客户编号,销售员编号,供应商编号,商品,销售量,销售单价,销售日期),销售员(销售员编号,姓名,手机号)两关系间存在属性引用,销售关系中销售员编号是其中的外码。因此销售关系中的销售员编号的值只有两个可能,要么等于销售员关系中的某个记录的值,要么就为空。(此情况中不能为空,因为销售员编号在销售员关系中是主属性。)

3、用户定义的完整性:

用户自定义的约束条件。

比如语句check (销售单价 >= 100 and 销售单价 <= 500)

1、 Find the name, loan number and loan amount of all customers; rename the column name loan_number as loan_id. 2、 Find the names of all customers whose street includes the substring “Main”. 3、Find all customers who have a loan, an account, or both: 4、Find all customers who have both a loan and an account. 5、Find all customers who have an account but no loan. 6、Find the average account balance at the Perryridge branch. 7、 Find the number of tuples in the customer relation. 8、 Find the number of depositors in the bank. 9、 Find the number of depositors for each branch. 10、Find the names of all branches where the average account balance is more than $1,200. 11、Find all loan number which appear in the loan relation with null values for amount. 12、Find all customers who have both an account and a loan at the bank. 13、Find all customers who have a loan at the bank but do not have an account at the bank 14、Find all customers who have both an account and a loan at the Perryridge branch 15、Find all branches that have greater assets than some branch located in Brooklyn. 16、Find the names of all branches that have greater assets than all branches located in 1、创建一个School数据库,该数据库的主数据文件逻辑名称为SCHOOL_data,物理文件名为School.mdf,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为School_log,物理文件名为School.ldf,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。 2、用SQL语句建立上述自定义主键外键,对于student建立约束条件:ssex仅能取male或female;sage在1822之间。并完成下面的查询语句。 1、查询所有选修过“Bibliometrics”课的学生的姓名成绩; 2、查询考试成绩不及格的学生的个数; 3、查询名字中至少含有一个“z”字符的学生的姓名、学号别; 4、查询选修了“Introduction to the Internet”课程的学生的学号及其成绩,查询结果按分数的降序排列; 5、查询“Zuo li”同学选修课程的总学时(time)数 6、查询年龄不大于20岁的学生的平均考试成绩; 7、查询 “computer science”专业学生选修 “Database System”的人数; 8、查询同时选修课程“Database System”“Introduction to the Internet”的学生姓名; 9、查询选修的课程中含有“Wang gang”同学所有选修课程的学生姓名。 10、查询“Information Technology for Information Management”考试成绩为空的学生姓名及专业名称。 11、查询“computer science”专业学生每个人的选修课总学分。 12、查询个人考试平均成绩高于专业平均成绩的学生姓名 13、查询个人考试平均成绩高于女生平均成绩的男生姓名 14、查询比“computer science”专业所有学生年龄都大的学生姓名。 15、查询考试成绩仅有一科不及格学生姓名
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值