《数据库系统原理》实验9:数据库的完整性设计

一、实验目的

熟练掌握使用Navicat和Transact-SQL语言两种方法创建、修改和删除表。掌握管理表的有关系统存储过程。

二、实验内容

1、利用Navicat创建满足以下要求的数据库:①数据库存在于连接MySQL中;②数据库名称为xsgl; ③字符集选择utf8 -- UTF-8 Unicode;排序规则选择utf8_general_ci。

《数据库系统原理》实验9:数据库的完整性设计_第1张图片

2、在数据库xsgl中,利用Navicat和SQL语句创建以下表格:

1)表格名为xs(学生基本情况表),表格中各个属性的定义如下:

列名

含义

数据类型

长度

能否取空值

备注

xh

学号

int

 

no

 

xm

姓名

char

8

yes

 

xb

性别

char

2

yes

 

nl

年龄

tinyint

 

yes

 

zy

专业

char

16

yes

 

jtzz

家庭住址

char

50

yes

 

2)表格名为kc(课程情况表),表格中各个属性的定义如下:

列名

含义

数据类型

长度

能否取空值

备注

xh

学号

int

 

no

 

kch

课程号

Int

 

no

 

kcm

课程名

char

20

yes

 

xss

学时数

int

 

yes

 

xf

学分

int

 

yes

 

fs

分数

Int

 

yes

 

1、 在xs表中定义xh为主键。

2、在kc表中定义xh和kch联合构成主键。

3、定义kc表中的kcm列满足唯一性约束。

4、定义kc表中的fs列默认值为0。

5、定义xs表中的xb列的CHECK约束“男”或“女”。

6、在xs表与kc表之间定义外键xh。

 

xs表:

①Navicat:

《数据库系统原理》实验9:数据库的完整性设计_第2张图片

②SQL:

输入以下代码并运行:

CREATE TABLE xs 
( 
    xh int NOT NULL, 
    xm char(8) NULL, 
    xb char(2) NULL CHECK (xb='男' OR xb='女'), 
    nl tinyint NULL, 
    zy char(16) NULL, 
    jtzz char(50) NULL, 
    primary key(xh) 
) 

kc表:

①   Navicat:

《数据库系统原理》实验9:数据库的完整性设计_第3张图片

《数据库系统原理》实验9:数据库的完整性设计_第4张图片

②SQL:

输入以下代码并运行: 

CREATE TABLE `kc` ( 
    `xh`  int NOT NULL , 
    `kch`  int NOT NULL , 
    `kcm`  char(20) NULL , 
    `xss`  int NULL , 
    `xf`  int NULL , 
    `fs`  int NULL DEFAULT 0 , 
    PRIMARY KEY (`xh`, `kch`), 
    UNIQUE INDEX (`kcm`)  
);

 

添加外键:

输入以下代码并运行:

ALTER TABLE `kc` ADD INDEX (`xh`); 
ALTER TABLE `xs` ADD FOREIGN KEY (`xh`) REFERENCES `kc` (`xh`); 

7、以下将创建一个学生—课程数据库,包括学生关系Student、课程关系Course和选修关系SC:

①建立学生-课程数据库xskc,创建Student表,并将Student表中的Sno属性定义为主键。

《数据库系统原理》实验9:数据库的完整性设计_第5张图片

输入以下代码并运行:

CREATE TABLE Student 
( 
    Sno CHAR(9) PRIMARY KEY, 
    Sname CHAR(20) NOT NULL, 
    Ssex CHAR(2), 
    Sage SMALLINT, 
    Sdept CHAR(20) 
) 

结果如下图所示:

《数据库系统原理》实验9:数据库的完整性设计_第6张图片

《数据库系统原理》实验9:数据库的完整性设计_第7张图片

②创建Course表和SC表,并将SC表中的Sno,Cno联合构成主键。

输入以下代码并运行:

USE xskc; 
CREATE TABLE Course 
( 
    Cno CHAR(9) PRIMARY KEY, 
    Cname CHAR(20), 
    Cpno CHAR(4), 
    Ccredit SMALLINT 
) ; 
CREATE TABLE SC 
( 
    Sno CHAR(9) NOT NULL, 
    Cno CHAR(9) NOT NULL, 
    Grade SMALLINT, 
    PRIMARY KEY(Sno,Cno) 
) 

    结果如下图所示:

《数据库系统原理》实验9:数据库的完整性设计_第8张图片

《数据库系统原理》实验9:数据库的完整性设计_第9张图片

《数据库系统原理》实验9:数据库的完整性设计_第10张图片

③定义SC表中的参照完整性

输入以下代码并运行:

USE xskc; 
ALTER TABLE SC ADD FOREIGN KEY (Sno) REFERENCES Student(Sno); 
ALTER TABLE SC ADD FOREIGN KEY (Cno) REFERENCES Course(Cno); 

结果如下图所示:

《数据库系统原理》实验9:数据库的完整性设计_第11张图片

④显示说明参照完整性的违约处理示例

输入以下代码并运行:

USE xskc; 
ALTER TABLE SC 
ADD 
FOREIGN KEY (Sno) REFERENCES Student(Sno) 
ON DELETE CASCADE 
ON UPDATE CASCADE; 
ALTER TABLE SC 
ADD
FOREIGN KEY (Cno) REFERENCES Course(Cno) 
ON DELETE NO ACTION 
ON UPDATE CASCADE; 

结果如下图所示:

《数据库系统原理》实验9:数据库的完整性设计_第12张图片

⑤定义SC表Grade属性不允许为空

输入以下代码并运行:

USE xskc; 
ALTER TABLE SC CHANGE Grade Grade SMALLINT NOT NULL; 

结果如下图所示:

《数据库系统原理》实验9:数据库的完整性设计_第13张图片

三、课后练习题

1、新建名为SPJ的数据库。(其中数据表S、P、J和SPJ的关系模式及其含义见实验八)

《数据库系统原理》实验9:数据库的完整性设计_第14张图片

2、在数据库SPJ中,合理地为库中每一个数据表定义主键和外键。

s表:

《数据库系统原理》实验9:数据库的完整性设计_第15张图片

p表:

《数据库系统原理》实验9:数据库的完整性设计_第16张图片

j表:

《数据库系统原理》实验9:数据库的完整性设计_第17张图片

spj表:

《数据库系统原理》实验9:数据库的完整性设计_第18张图片

《数据库系统原理》实验9:数据库的完整性设计_第19张图片

3、适当为各数据表及其字段添加约束(唯一性、默认值等)

s表:

《数据库系统原理》实验9:数据库的完整性设计_第20张图片

p表:

《数据库系统原理》实验9:数据库的完整性设计_第21张图片

j表:

《数据库系统原理》实验9:数据库的完整性设计_第22张图片

 

四、思考题

1、使用参考语句创建好xs和kc两个表之后,语句中对于xb列的CHECK约束是否起作用?如果未起作用,思考语句通过却未起作用的原因。

《数据库系统原理》实验9:数据库的完整性设计_第23张图片

以上内容成功保存,说明CHECK约束未起作用。

MySQL 8.0.15或更早版本不支持CHECK约束,查阅MySQL官方文档,文档中有此内容:“该CHECK子句被解析但被所有存储引擎忽略”,说明check语句能正常执行,但是不生效,可以采用enum枚举类型来约束。

2、参考语句中参照完整性的违约处理示例“on delete cascade”和“on update cascade”的含义是什么?“on delete no action”又代表什么?

on update cascade是主键表中被参考字段的值更新

on delete cascade是指在主键表中删除一条记录:

on delete no action表示不做任何操作,

 

五、出现的问题及解决方案

问题:

ORDER BY关键字降序排序问题

SQL AND & OR 运算符与优先级问题

WHERE语句的特殊条件——例如is null、between and、like模糊查询等问题

Enum枚举类型的设定值问题

CHECK语句约束不起作用问题

解决方案:

参考《数据库系统概论课本》、菜鸟教程(https://www.runoob.com/sql)、CSDN博客和MySQL参考手册(https://dev.mysql.com/doc/)

你可能感兴趣的:(实验,考试与课设)