数据库系统原理实验报告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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/543039.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】基于Redis实现共享Session登录

用户登录是一种常用功能。这里记录一下基于Redis实现用户登录的代码。  下面是登录的流程图&#xff1a; 用户先提交手机号和验证码&#xff0c;服务器以手机号为key校验redis中存储的验证码&#xff0c;存在&#xff0c;则查询数据库中是否存在用户&#xff0c;不存在则创建…

Java 常用容器及其遍历方式

目录 一、List接口1. 常见实现①ArrayList②LinkedList③Vector 2. 相关方法①共同的方法②ArrayList 和 Vector 独有的方法③LinkedList 独有的方法 二、Queue接口及Deque接口1. 常见实现①LinkedList②ArrayDeque③PriorityQueue 2. 相关方法①LinkedList②ArrayDeque③Prior…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Select)

提供下拉选择菜单&#xff0c;可以让用户在多个选项之间选择。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Select(options: Array<SelectOption>) 参数&#xff1a;…

Jmeter+Ant 接口自动化环境配置指南

一 、Jmeter安装与配置 https://blog.csdn.net/tester_sc/article/details/80746405 注&#xff1a;Jmeter5.0的环境变量配置与4.0或历往老版本有部分小差异&#xff0c;笔者用的Jmeter 5.0 二 、Ant的安装与配置 # Ant下载地址(下载到指定目录后&#xff0c;进行解压到当前…

Linux(centos)环境下安装Nginx的步骤文档

在Linux环境下安装Nginx是一个相对直接的过程&#xff0c;本篇文章将提供一个较为通用的安装指南&#xff0c;以及一些可能遇到的问题和解决方案。 目录 一、简介 二、先决条件 三、安装Nginx 1、使用包管理器安装 2、从源代码安装 四、验证安装 五、基本配置 六、常见…

NCP1271D65R2G中文资料规格书PDF数据手册引脚图参数图片价格功能特性描述

产品描述&#xff1a; NCP1271 是成功的 7 引脚电流模式 NCP12XX 系列的新一代引脚-引脚兼容新产品。该控制器通过使用可调节 Soft Skip 模式和集成的高电压启动 FET&#xff0c;实现了卓越的待机功耗。此专属 Soft Skip 还大大降低了噪音的风险。 因此可以在箝位网络中使用不…

Hello,Spider!入门第一个爬虫程序

在各大编程语言中&#xff0c;初学者要学会编写的第一个简单程序一般就是“Hello, World!”&#xff0c;即通过程序来在屏幕上输出一行“Hello, World!”这样的文字&#xff0c;在Python中&#xff0c;只需一行代码就可以做到。我们把这第一个爬虫就称之为“HelloSpider”&…

职场中的职业素养与成功之路

在职场中&#xff0c;职业素养是衡量一个人成功与否的重要标准。一个人的职业素养不仅影响个人发展&#xff0c;还关系到整个团队和组织的效益。本文将探讨职场中职业素养的重要性以及如何提升自身的职业素养&#xff0c;从而在职场中取得成功。 一、职业素养的重要性 1. 形象塑…

智慧公厕建设,助力打造宜居、韧性、可持续的智慧城市

公共厕所作为智慧城市的重要组成部分&#xff0c;对于城市的高质量发展起着至关重要的作用。智慧公厕建设旨在通过全面监测、控制和管理公共厕所&#xff0c;实现多方面功能&#xff0c;包括公共厕所环境监测与调控、厕位占用监测与引导、消耗品监测与缺失提示、安全防范与管理…

ElementUI Message 消息提示,多个显示被覆盖的问题

现象截图&#xff1a; 代码&#xff1a;主要是在this.$message 方法外层加上 setTimeout 方法 <script> export default {name: "HelloWorld",props: {msg: String,},methods: {showMessage() {for (let i 0; i < 10; i) {setTimeout(() > {this.$mess…

ThingsBoard Edge 设备控制

文章目录 一、RPC 功能1.服务端 RPC2.客户端 RPC3.MQTT RPC API3.1.服务端RPC3.2.客户端RPC 二、设备控制1.环境准备2.创建设备3.服务端PRC3.1.RPC消息主题3.2.程序源码3.3.创建仪表板3.4.边缘分配仪表板3.5.测试 4.客户端RPC4.1.RPC消息主题4.2.程序源码4.3.规则链4.4.测试 Th…

【析】一类动态车辆路径问题模型和两阶段算法

一类动态车辆路径问题模型和两阶段算法 摘要 针对一类动态车辆路径问题&#xff0c;分析4种主要类型动态信息对传统车辆路径问题的本质影响&#xff0c;将动态车辆路径问题(Dynamic Vehicle Routing Problem, DVRP)转化为多个静态的多车型开放式车辆路径问题(The Fleet Size a…