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

news2025/2/28 6:30:00

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

专业课本:

————

本次实验使用到的图形化工具: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.coloradmin.cn/o/1523846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络原理】TCP协议详细解析

文章目录 &#x1f332;TCP协议的概念&#x1f338;TCP协议段格式&#x1f338;TCP的特性 &#x1f333;TCP原理详解&#x1f338;确认应答机制&#xff08;安全机制&#xff09;&#x1f338;超时重传机制&#xff08;安全机制&#xff09;&#x1f338;连接管理&#xff08;安…

PHP魔术方法详解

php魔术方法是一些特殊的方法&#xff0c;由特定的环境来进行触发。 这些魔术方法让开发者能够更好地控制对象的行为&#xff0c;特别是在处理不常见的操作或者需要自动化处理某些任务时非常有用。 1、_construct()构造函数&#xff1a; <?php highlight_file(__FILE__);…

微信开发者工具如何使用?使用注意事项

&#xff08;1&#xff09;单位如何进行换算&#xff1f; 1 px 750/屏幕宽度 rpx 1 rpx 屏幕宽度/750 px &#xff08;2&#xff09;如何新建文件&#xff1f; 1> 点开app.json 2> 在“pages/index/index”后面接“&#xff0c;pages/自定义文件夹名/自定义文件名”…

Linux安装JDK1.8 tomcat MariaDB(MySQL删减版)

本文主要使用yum的方式来操作&#xff08;centos) 安装JDK: 先搜索&#xff0c;确定软件包的完整名称 yum list | grep jdk 不同的系统上加载出来的JDK版本有可能不太一样&#xff0c;但是&#xff0c;我们主要使用JDK1.8就&#x1f197;了&#xff01; 再进行安装 yum insta…

Node.js 中 HTML 解析全面指南:探索不同的方法

在 Web 开发中&#xff0c;解析 HTML 是一个常见的任务&#xff0c;特别是当我们需要从网页中提取数据或操作 DOM 时。掌握 Node.js 中解析 HTML 的各种方式&#xff0c;可以大大提高我们提取和处理网页数据的效率。本文将介绍如何在 Node.js 中解析 HTML。 基本概念 HTML 解析…

哥斯拉流量webshell分析-->ASP/PHP

哥斯拉流量webshell分析 哥斯拉是继菜刀、蚁剑、冰蝎之后的又一个webshell利器&#xff0c;这里就不过多介绍了。 哥斯拉GitHub地址&#xff1a;https://github.com/BeichenDream/Godzilla 很多一线师傅不太了解其中的加解密手法&#xff0c;无法进行解密&#xff0c;这篇文章…

力扣细节题:字符串中的最大奇数

奇数只要找到第一位是奇数的即可&#xff0c;不是找单个数字 //即从最低位开始&#xff0c;找到第一位为奇数的位 //然后之前的就是需要的数字char * largestOddNumber(char * num){int i strlen(num) - 1;while(i > 0){if((num[i] - 0) % 2 1)break;i--;}//先找到低位开…

Vue组件封装方案对比——v-if方式与内置component方式

近期在准备搭建一个通用组件库&#xff0c;而公司现有的各个系统也已有自己的组件库只是没抽离出来&#xff0c;但是目前有两套不同的组件封装方案&#xff0c;所以对于方案的选择比较困惑&#xff0c;于是对两种方式进行了对比&#xff0c;结合网上找到的一些开源组件库进行分…

Matlab/simulink基于模糊PID智能控制的温度控制系统建模仿真

参考文献 Matlab/simulink基于模糊PID智能控制的温度控制系统建模仿真 该系统主要对某小区换热站的温度控制策略和控制方案进行了设计&#xff0c;其设计内 容主要包括三部分。首先是基于模糊PID智能控制的温度控制系统设计。在温度控制 算法方面&#xff0c;该设计于传统的P…

HarmonyOS鸿蒙开发常用4种布局详细说明

介绍一下鸿蒙开发常用4种布局 1、线性布局 2、层叠布局 3、网格布局 4、列表布局 ​1. 线性布局&#xff08;Column/Row&#xff09; 线性布局&#xff08;LinearLayout&#xff09;是开发中最常用的布局&#xff0c;通过线性容器Row&#xff08;行&#xff09;和Column&…

模块化项目Eclipse测试网零撸教程

简介&#xff1a;Eclipse 是一个基于 Solana 区块链的初创项目&#xff0c;致力于构建基于 Solana 虚拟机的通用 Layer2 解决方案&#xff0c;为以太坊提供更快速、更通用的 Rollup 技术。其主要用途是为开发者提供构建基于 Solana 虚拟机的 Rollup 应用的平台&#xff0c;解决…

推荐一款好用的前端分页插件jqPaginator

jqPaginator 简洁、高度自定义的jQuery分页组件&#xff0c;适用于多种应用场景。 现在网上各种各样的分页组件很多&#xff0c;但是很难找到十分“称心如意”的&#xff0c;于是jqPaginator诞生了。 我心中理想的分页组件&#xff0c;要不受CSS框架限制&#xff0c;可以使用…

Redis教程——Redis入门

Redis Redis是一种开源内存中数据结构存储&#xff0c;用于数据库、缓存、消息代理和流引擎&#xff0c;其提供了丰富的数据结构&#xff0c;例如&#xff1a;字符串、哈希、列表、有序集合等。 Redis内置了复制、Lua脚本、LRU驱逐、事务和不同级别的磁盘持久化&#xff0c;并…

软考76-上午题-【面向对象技术3-设计模式】-创建型设计模式01

一、创建型设计模式一览 二、创建型设计模式 2-1、创建型设计模式的概念 一个类创建型模式使用继承改变被实例化的类&#xff1b; 一个对象创建型模式将实例化委托给另一个对象。 对应java的new一个对象。 2-2、简单工厂模式&#xff08;静态工厂方法&#xff09; 简单工厂…

XDP学习笔记

XDP的使用与eBPF程序分不开&#xff0c;因此要了解学历XDP&#xff0c;须知道什么是eBPF、什么是XDP。 概念 eBPF BPF&#xff08;Berkeley Packet Filter&#xff09;是一种灵活且高效的数据包过滤技术&#xff0c;最初由 BSD Unix 中的网络子系统引入&#xff1b;BPF 允许用…

基于模型分割的联邦学习

加速局部模型的拟合&#xff1a;根据网络状态的不同&#xff0c;提出一种基于模型分割的端边云协同训练算法&#xff0c;加速FL本地训练&#xff1b;设计一种多轮迭代再聚合的模型聚合算法&#xff0c;加速FL聚合 采用分支DNN对数据进行训练 DNN分割是指利用深度神经网络&…

(学习日记)2024.03.13:UCOSIII第十五节:基于时基列表的时延操作(持续更新)

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

虚拟宇宙如何重塑酒店和旅游业的未来

全球酒店业正在积极适应新兴的元宇宙&#xff0c;早期采用者率先推出了创新的数字解决方案。企业越来越多地采用颠覆性技术&#xff0c;从最初的非接触式服务和自动聊天机器人的客户服务转变为变革性的转变。随着数字环境的不断发展&#xff0c;世界各地的酒店业参与者正在投资…

1.python安装

1.检查是否已经安装python 打开cmd 输入 python --version查看是否有返回版本,没有返回则环境变量未设置好,或者未安装 2.下载安转python https://www.python.org/downloads/windows/ 勾选配置环境变量路径 安装成功

资深老鸟经验,性能测试-性能指标分析总结,一篇策底概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试指标 1、…