MySQL数据库学习笔记(八)实验课五之数据库系统设计

news2025/1/18 3:32:15

一上来就实验课五了,实验课四呢?实验课四的内容是添加索引,差不多就是那样。
这次实验课的内容感觉就有点硬核了,数据库系统设计。

重点:

记录下我在实验里面遇到的一些问题

1,E-R图绘制

我是用drawio绘制的,这篇文章有相关的一些使用方法。
这篇文章里有一些关于E-R图的说明,大概就是这样。

2,数据库逻辑结构

由于以前没有怎么这样接触过数据库,所以刚接触到这些的时候人也是麻麻的。
目前这里我觉得打脑壳的无外乎就是两个东西,1对多和多对多的关系。
通过一些学习,我大概也稍稍清楚了一对多和多对多这两个逻辑关系。

一对多关系:

如下图
在这里插入图片描述
这就可以得出,一个书架放很多本书,一个读者借很多本书
大概差不多是这样(为了防止同学们直接把我的这个图直接拿去应付,我就不发全图了):
在这里插入图片描述
在这里可以看出,书,就是多。
通过学习我发现,一般数据库设计时遇到这种1对多的情况,往往采取父子表的形式
就比如这里的书架与图书,
书架就该设为父表,图书该设为子表,图书表中应该有个外键,设置为书架号。

当然,为了实现一些功能,我们不能单纯地只使用父子表。我们应该还需根据实际情况创建一张中间表,用于记录一些关系,就像这里的读者表与图书表,在它们之间我们应该设置一张借阅表用于确定借阅关系。同时为了实现1对多,即每本书只能被一个读者借,我们还应该设置相关的约束

多对多关系:

经过了一些学习以后,我觉得这种多对多关系基本上用一个中间表来实现关系连接。
具体的东西在后面有展示和解释。

一对一关系:

基本上这个关系放在一张表里面就是了。

3,主键外键约束

主键:

主键就是这个表里面要唯一的东东,可以是一列元素,也可以多列元素联合起来(联合主键)。不过一张表里面只能有一个主键,且不能为空。

外键:

外键用于与另一张表关联,一张表的外键是另一张表的主键。有外键的这张表就成了子表,被关联的那张表也就是父表。有的地方说主从表,意思都差不多吧。

约束:

主键和外键其实都是一种约束。但这里我要提一种约束,也是约束(废话)。
UNIQUE (A,B)联合约束,和联合主键类似但是不是主键,是一种约束。
打个比方:
一张表里有A,B,C,D四个元素
UNIQE(A,B)后,当你插入数据时
(1,1,0,1)(1,1,0,2)不能被同时插入,因为A和B重复的。
具体用法在后面会有解释
如果还不懂的话那我可以线下来给你解释。

实验:

实验1 简单的图书系统:

要求:

在这里插入图片描述

1,根据需求分析数据库逻辑关系并画E-R图:

图书和书架之间:简单的一对多关系,通过父子表设置可以直接完成
图书和读者之间:图书和读者,我认为应该借助一个借阅表来牵线搭桥。
E-R图:
在这里插入图片描述

2,初步建表:

1,图书
在这里插入图片描述
2,书架
在这里插入图片描述
3,读者
在这里插入图片描述
这个系统所需要的最基础的部分就完了。

3,添加关系:

设置主键和外键:
一般是在子表里面添加外键,主表的外键的元素是父表的主键。
主键设置:
在这里插入图片描述在这里插入图片描述在这里插入图片描述
联接图书与书架:
向图书表中添加外键:
在这里插入图片描述
这样图书就与书架有了联系。

建立中间表:
在这里插入图片描述
这张表就是连接图书与读者的中间表
这里的id是记录,设置为主键则可以保证唯一。
同时这里uniqe(book_id)确保了书唯一,书在表里不重复出现,也就是意味着一本书只能被一个读者借阅。

实验2 简单的课程系统

要求:

在这里插入图片描述
在这里插入图片描述

1,分析关系并画E-R图:

由上述要求不难看出,我们需要建4个基础的表
学生,单位,课程,教师
学生和单位的关系:
一个学生只能有一个单位,一个单位可以有多个学生
单位和学生之间是一对多的关系,同时在现实中学生和单位也差不多是一种比较固定的从属关系,这里使用父子表(主从表)的方式将它们联系起来比较好,不过还是得要看完后再做决定
学生和课程的关系:
一个学生可以选很多门课,一门课可以被很多同学选
多对多的关系,适合建立中间表连接
课程和单位的关系:
一门课程由一个单位开设,一个单位可以开设多门课程
课程和教师的关系:
一门课程可以由多位教师教授,一个教师可以教多门课程。
多对多的关系,适合建立中间表连接。
教师和单位的关系:
一个教师属于一个单位,一个单位里可以有很多教师。
一对多的关系,适合用父子表形式连接

E-R图(后续证明这个表是错的):
在这里插入图片描述

2,初步建表:

学生表:
在这里插入图片描述
课程信息表:
在这里插入图片描述
教师信息表:
在这里插入图片描述

单位表:
在这里插入图片描述

3,添加关系:

添加主键和外键:
对于学生表来说,学号应该是唯一的,但是学生表里面有一个课程元素,当学号不可重复的时候一个学号的选修课程就只能有一个,这不符合实际。
所以我们要设置一个联合主键,将学号和选修课程联合。
学生表主键:
在这里插入图片描述
单位表主键:
在这里插入图片描述
教师表主键:
在这里插入图片描述

课程表主键:
在这里插入图片描述

添加外键:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我想说的:
以上这种建表方式可以使用,但是我觉得还是不是很好,这是为了满足题目要求整的,这个系统里面数据感觉都很繁杂,很不单纯。具体说说:

1,对于学生表来说,这张学生表显然会很大,因为在学生表里有个“选修课程”这一项,也就意味着一个学号会有很多列用于记录学生的选课,这样做不好。当然,如果这个“选修课名”是包含学生这位学生已经选了的所有课程,那么这张表还是很好的。目前不清楚具体是什么意思,就权当这个选修课名只放一个课程。如果是后者,我的想法就是把这一栏数据去掉得了,让学生表更简单更单纯。结合实际与要求来看,学生和课程这两张表必定要用一个中间表来连接,这个中间表里显然会有学号和课程号,单单这两个东西就完全够数据显示了。

2,对于课程表来说,同理,好端端一个课程表里面非要有个讲授教师号,我觉得这样也会让这个表不单纯,毕竟课程与教师的连接也需要一张表才行,查询的时候多多少少也会用到这个表。

3, 教师表也不行,在需求里面教师表里有讲授课程编号但是没有单位名称,这样很不好,联系很混乱。

4,单位表也是,不够单纯。

我看来得要好好改改。
这是我修改后的E-R图:
在这里插入图片描述
删去了部分实体中的部分属性进行精简,同时这样各个实体之间的联系也能更加清晰一些。
简化后的4个表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加中间表:
学生选课表:
在这里插入图片描述
在这里插入图片描述
教师授课表:
在这里插入图片描述
在这里插入图片描述
这样,实验2就算是完成了。
以单位表为父表,其他表为子表实现1对1关系。
在教师与课程,学生与课程之间建立中间表并通过添加uniqe约束实现多对多关系。

实验3 工厂管理数据库

要求:

在这里插入图片描述

1,分析关系并画E-R图

先是5个基础的表
工厂,车间,仓库,零件,产品
显然,工厂与车间仓库之间是一对多关系
仓库与零件产品之间是一对多的关系,毕竟一个东西不能放在多个地方。
车间和产品是一对多关系,但是车间和零件是多对多关系。
产品和零件也是多对多关系。
结合实际,我打算这样设计:
工厂与车间、仓库之间使用父子表形式连接,
仓库与零件、产品之间使用父子表形式连接,
车间与产品之间使用父子表形式连接,
车间与零件使用中间表连接,
零件与产品使用中间表连接。
由此可以画出E-R图:
在这里插入图片描述
这个实验给的实体的属性要好多了。

2,初步建表:

工厂:
在这里插入图片描述
仓库:
在这里插入图片描述
车间:
在这里插入图片描述
零件:
在这里插入图片描述
产品:
在这里插入图片描述

3,添加关系

添加主键外键(构建父子表关系):
工厂:
在这里插入图片描述
仓库:
在这里插入图片描述
车间:
在这里插入图片描述
产品:
在这里插入图片描述
零件:
在这里插入图片描述
添加中间表:
零件车间表:
在这里插入图片描述
在这里插入图片描述
零件产品装配表:
在这里插入图片描述
在这里插入图片描述
实验3就到此为止了。

实验4 教务系统

要求:

在这里插入图片描述
在这里插入图片描述

1,根据要求分析关系并画E-R图:

要求中已经把关系说得很清楚了,
我根据以上的关系做出如下简单的E-R图:
在这里插入图片描述
这个E-R图只显示了以上实体的联系,具体属性还没弄。
由于研究方向和教师是1对1的关系,因此我索性将研究方向作为教师这个实体的一个属性。
有些不合规。以下是合规的:
在这里插入图片描述
添加了一些属性后:
在这里插入图片描述

2,初步建表:

学院:
在这里插入图片描述
教室:
在这里插入图片描述
课程:
在这里插入图片描述
实验室:
在这里插入图片描述
项目:
在这里插入图片描述
学生:
在这里插入图片描述
教师:
在这里插入图片描述

3,添加关系:

添加主键外键:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加中间表:
学生选课表:
在这里插入图片描述
在这里插入图片描述
教师授课表:
在这里插入图片描述
在这里插入图片描述
实验4完成。

结束~

结束

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

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

相关文章

Rancher1.6高可用架构设计与实现思路

文章目录 [toc] 1.架构图2.建立数据导入脚本2.1 单机运行命令2.2 导出单机容器中的数据库文件2.3 dump文件 3.启动命令4.总结 1.架构图 架构说明:本文重点是rancher1.6.17的多实例共用一个数据库持久化数据,对于前置的负载均衡和mysql5.7的高可用不做过多…

linux 框架学习法

学习视频:【北京迅为】再谈Linux学习方法-框架学习法 学习UBOOT 框架学习法 linux基础框架 文件系统框架 bootloader是上电后执行的第一个程序bootloader会引导linux内核,会执行zimagelinux内核会挂载文件系统,文件系统可大可小,…

Go语言gin框架项目:按模板导出excel并在网页端下载,并将此接口完成swagger的配置

1.需求 甲方的需求是以这种格式导出一个开工通知单 前端页面是这个样子: 前端勾选一部分部室,后端根据勾选的这些部室名称进行查询,将查询到的部室主任名字填充到表格对应的位置中,另外将前端传过来的信息都填充到表格的指定位置…

4.1 一级存储结构

本节介绍 GPU 上的一级缓存结构,重点介绍统一的 L1 数据缓存和暂存器“共享内存”,以及它们如何与计算核心交互。 我们还简要讨论了 L1 纹理缓存的典型微架构。 我们包括对纹理缓存的讨论,虽然它在 GPU 计算应用程序中的使用有限,…

前端GC垃圾回收机制

js中的管理是自动的,对象不再被引用时就是垃圾,不能从根上访问时也是垃圾。 能够访问到的对象就是可达对象(引用,作用域链),可达的标准就是从根触发是否能够被找到,根可以理解为是全局变量。 …

【机器学习】 - 作业7: 某闯关类手游用户流失预测

课程链接: 清华大学驭风计划 代码仓库:Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的,其分为四门课,包括: 机器学习(张敏教授) , 深度学习(胡晓林教授), 计算…

并发和线程

并行和并发 1.并行跟并发有什么区别? 从操作系统的角度来看,线程是CPU分配的最小单位。 并行就是同一时刻,两个线程都在执行。这就要求有两个CPU去分别执行两个线程。 并发就是同一时刻,只有一个执行,但是一个时间段…

详解HTTPS加密过程

目录 前言 HTTPS是什么 HTTPS的工作过程 引入对称加密 引入非对称加密 引入证书 总结 前言 对于HTTP上篇文章已经做了详细的解释了。众所周知,HTTPS要比HTTP要安全,但是为什么HTTPS要比HTTP安全呢? 这篇文章主要研究HTTPS的加密机制…

操作系统-X18 linux日志审计

Linux日志审计 在unix/类unix(Linux)系统中,日志是内核(内存)的一部分。 用于记录系统、程序运行中发生的各种事件 通过阅读日志,有助于诊断和解决系统故障 日志文件的分类 ①内核及系统日志 由系统sysl…

队列及其实现

目录 一&#xff1a;队列 1.队列的概念及结构 2.队列的实现 <1>.初始化队列 <2>.队尾入队列 <3>.队头出队列 <4>.获取队列头部元素 <5>.获取队列队尾元素 <6>.获取队列中有效元素个数 <7>.销毁队列 二&#xff1a;完整代…

如何完全卸载IDEA

工欲善其事必先利其器&#xff0c;我们在用idea的时候&#xff0c;idea的环境出现了莫名其妙的问题&#xff0c;怎么也找不到问题原因。有时候也可能是安装了不知名VB脚本&#xff0c;给系统装了一大堆的环境变量(如下图所示)&#xff0c;这个时候你可以试着把idea卸载重新安装…

Jetpack Compose UI预览

Android开发 Jetpack_Compose_2 UI预览Preview 前言 在学习jetpack compose如何编写ui之前&#xff0c;我认为还是应该先了解与Android studio配合的UI预览Preview。 这样就可以立刻看到UI效果&#xff0c;从而方便后续学习验证代码。 所需依赖 implementation "androidx…

CAPL(vTESTStudio) - 自动创建带有时间戳的报告和log

目录 getLocalTime - 获取本地时间函数 代码示例 获取当前时间并形成格式:"2023_05_22_23_20_18"

Qt中的坐标系

Qt中的坐标系 Qt中的坐标系与win10上画图工具的联系 上面这个图片的水印挡住了重要信息,然后又截了一张,显然,画图工具的像素就是Qt中的坐标系,所以,以后查坐标系直接打开Qt:画笔位置所显示的像素就是Qt的坐标!!! 再总结一下: 好奇:win10上的画图工具是qt写的吗? 答: 不是…

【SpringCloud】Nacos

文章目录 一、Nacos1、安装2、服务注册和发现3、服务分级存储模型4、负载均衡策略--NacosRule5、服务实例的权重设置 一、Nacos 1、安装 官网&#xff1a;https://nacos.io/zh-cn/ 下载 Github主页: https://github.com/alibaba/nacos Github的Release下载页: https://githu…

linux命令行如何查看命令帮助信息

一&#xff0c;简介 “授之以鱼不如授之以渔”&#xff0c;我们再学习linux命令的时候&#xff0c;想查看某个命令的详细说明&#xff0c;有哪些方法呢&#xff1f;本文来介绍一下如何在命令行查找命令的帮助信息。 二&#xff0c;linux命令格式介绍 Linux命令一般由三部分组…

【深度学习】- 作业1: Softmax实现手写数字识别

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

【深度学习】 - 作业7: 图像超分辨率重建

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

Linux网络编程—Day10

Linux服务器程序规范 Linux服务器程序一般以后台进程形式运行。后台进程又称守护进程。它没有控制终端&#xff0c;因而也不会意外接收到用户输入。 守护进程的父进程通常是init进程&#xff08;PID为1的进程&#xff09;&#xff1b;Linux服务器程序通常有一套日志系统&#…

Android 11.0 系统设置显示主菜单添加屏幕旋转菜单实现旋转屏幕功能

1.前言 在android11.0的系统rom定制化开发中,在对系统设置进行定制开发中,有产品需求要求增加 旋转屏幕功能的菜单,就是在点击旋转屏幕菜单后弹窗显示旋转0度,旋转 90度,旋转180度, 旋转270度针对不同分辨率的无重力感应的大屏设备的屏幕旋转功能的实现, 接下来就来分析…