数据库:根据学校的业务规则画出E-R图以及数据库模型图,并构建一个简单的数据库

news2024/11/15 6:00:32

目录

序言

一、需求

二、E-R图

E-R图:

三、关系模式

数据库模型图:

四、在MYSQL中创建数据库

4.1 年级表的创建

4.2 科目表的创建

4.3 学生表的创建

4.4 成绩表的创建

结果如下:



序言

  本篇文章我将通过一个具体的例子教会大家大家如何根据业务需求来画出E-R图以及构建出数据库模型图,并设计出一个简单完善的数据库,让我们接着往下看。

一、需求

某学校要设计一个数据库,学校的业务规则概括如下:

  • 学校内年级若干,每个年级内又有学生若干。

  • 学生选修某些课程,但是在自己年级下的课程是必修。

  • 学校定期组织考试,成绩囊括所有学生所有课程的考试成绩。

二、E-R图

  根据上述的需求,我们可以提取出四个实体(年级、学生、科目、成绩)以及它们所对应的属性,而实体之间的关系,我在前面的文章说过:http://t.csdnimg.cn/D3uSz,常用动词去描述。

  接下来我们就要考虑每一个实体应该包含哪些属性,因为这在我们这道题中并没有表明,所以我们可以进行发散性思维,如学生必然是有学号的,当然还有姓名、性别、电话、邮箱等等,那么年级肯定要有编号、具有唯一性,科目有课程编号、课程名称,成绩有考试时间、考试成绩等。

  梳理完实体之间以及它们的属性后,我们要思考它们之间的代数关系,代数关系包括一对一、多对一/一对多、多对多(1-1、N-1/1-N、M-N)。我随便举几个例子,多个学生属于同一个年级,就是多对一的关系;一个学生对有多个科目,就是一对多的关系。

E-R图:

三、关系模式

  关系模式我们通常用数据库模型图来表示,明确每一个实体中的主外键(PK/FK),我们就可以使这个数据库更加的完善。主键的选择我们前面也讲过,那就是确保该属性在实体中的唯一性,年级编号、学号、课程编号在他们的实体中都具备唯一性,所以关系模式如下:

1,年级(年级编号、年级名称)

2,学生(学号、姓名、性别、年级编号、手机号码、出生日期、家庭住址、邮箱、身份证号)

3,科目(课程编号、课程名称、学时、年级编号)

4,成绩(学号、课程编号、考试时间、考试成绩)

(备注:加下划线为主键)

数据库模型图:

四、在MYSQL中创建数据库

4.1 年级表的创建

CREATE DATABASE Myschool_db;#建立数据库
#建表(先主后从)
#创建年级表
CREATE TABLE grade(
	GradeID INT  NOT NULL AUTO_INCREMENT COMMENT '年级编号',
	GradeName VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '年级名称',
	PRIMARY KEY (GradeID)
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

4.2 科目表的创建

DROP TABLE IF EXISTS subject;
CREATE TABLE subject  (
  SubjectNo int NOT NULL AUTO_INCREMENT COMMENT '课程编号',
  SubjectName varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课程名称',
  ClassHour int NULL DEFAULT NULL COMMENT '学时',
  GradeID int NULL DEFAULT NULL COMMENT '年级编号',
  PRIMARY KEY (SubjectNo)
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

4.3 学生表的创建

DROP TABLE IF EXISTS student;
CREATE TABLE student  (
  StudentNo int(0) NOT NULL COMMENT '学号',
  LoginPwd varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  StudentName varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
  Sex tinyint(1) NULL DEFAULT NULL COMMENT '性别,取值0或1',
  GradeId int(0) NULL DEFAULT NULL COMMENT '年级编号',
  Phone varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系电话,允许为空,即可选输入',
  Address varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址,允许为空,即可选输入',
  BornDate datetime(0) NULL DEFAULT NULL COMMENT '出生时间',
  Email varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱账号,允许为空,即可选输入',
  IdentityCard varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (StudentNo) USING BTREE,
  UNIQUE  IdentityCard(IdentityCard) USING BTREE,
  INDEX Email(Email) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

4.4 成绩表的创建

CREATE TABLE `result`  (
  `StudentNo` int(0) NOT NULL COMMENT '学号',
  `SubjectNo` int(0) NOT NULL COMMENT '课程编号',
  `ExamDate` datetime(0) NOT NULL COMMENT '考试日期',
  `StudentResult` int(0) NOT NULL COMMENT '考试成绩',
  INDEX `SubjectNo`(`SubjectNo`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
结果如下:

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

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

相关文章

Ceph分布式存储自动化运维平台开发实践

文章目录 1. 背景介绍1.1 什么是Ceph?1.1.1 Ceph的核心组件1.1.2 Ceph的优势 1.2 自动化运维的需求目标 2. 平台架构设计和组件版本2.1 平台架构设计2.2 组件版本2.3 模块划分(已经脱敏处理)2.3.1 当前版本V1.0支持功能2.3.2 前后端代码结构t…

vivado 定义和配置I/O端口、

定义和配置I/O端口 您可以使用Vivado IDE导入、创建和配置I/O端口,如中所述以下部分。 导入I/O端口 根据项目类型,可以使用以下方法导入I/O端口: •I/O规划项目:您可以将XDC和CSV文件导入空的I/O规划项目当您使用文件导入功能…

Jmeter实现造10个账户、单元数据

今天简单介绍Jemeter的入门,Jmeter 的安装这边就跳过,直接讲述如何使用JMETER,如何运用Jmeter进行测试。Jmeter实现造10个账户、单元数据,之后大数据量批量造数据以此类推。 1.下载jmeter软件 2.安装jmeter软件 3.运行\bin\jmeter.bat批处理文件 4.选择脚本文件 5.…

全局视角,搞懂“新零售支付”

文章首发于微信公众号:PenguinPay ,欢迎关注。 零售业就是商家将商品或服务在场所中卖给消费者。其中的关键词就是 人,货,场。 一、 初始新零售 1.1 传统零售货找人 传统零售业,只能在固定场所销售商品或服务,以商家店为中心只…

缓存技术—redis

一、redis介绍 1.什么是NoSQL NosQL (Not-Only:sQL),泛指非关系型的数据库(关系型数据库: 以二维表形式存储数据) 非关系型的数据库现在成了一个极其热门的新领域,发展非常迅速。而传统的关系数据库在应付超大规模和高并发的网站已经显得力不从…

pip安装镜像源设置

01.官方镜像源:资料最新,包最全 https://pypi.python.org/simple 02.国内镜像源:国内访问速度快 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 03. 配置方式1:永久替换 pi…

Spark运行架构以及容错机制

Spark运行架构以及容错机制 1. Spark的角色区分1.1 Driver1.2 Excuter 2. Spark-Cluster模式的任务提交流程2.1 Spark On Yarn的任务提交流程2.1.1 yarn相关概念2.1.2 任务提交流程 2.2 Spark On K8S的任务提交流程2.2.1 k8s相关概念2.2.2 任务提交流程 3. Spark-Cluster模式的…

2024最新版Visual Studio Code安装使用指南

2024最新版Visual Studio Code安装使用指南 Installation and Usage Guide for the Latest Visual Studio Code in 2024 By JacksonML Visual Studio Code最新版1.85已经于2023年11月由其官网 https://code.visualstudio.com正式发布,这是微软公司2024年发行的的最…

《WebKit 技术内幕》学习之十五(5):Web前端的未来

5 Crosswalk项目 Crosswalk项目是由英特尔公司发起的一个开源项目,该项目基于WebKit(Blink)和Chromium等开源项目打造,其目的是提供一个跨不同操作系统的Web运行环境,包括Android、Tizen、Linux、Windows、MacOS等众多…

Linux-----Shell编程之循环语句

目录 一、小命令 1、echo 实验: 2、date ------ 查看当前系统时间 3、cal ---- 日历 4、seq 打印 二、循环语句 1、for语句 实验: 计算整数和: 列出奇偶数 批量添加、删除用户 密码验证 随机抽奖 改名 九九乘法表 九九乘…

线性表--栈

1.什么是栈? 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除 操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈&#xff…

AI大模型开发架构设计(5)——人人能学会的Llama-2大模型微调

文章目录 人人能学会的Llama-2大模型微调1 什么是Llama-2以及关键特性分析什么是Llama-2?Llama-2关键特性分析2 Llama-2微调全流程剖析为什么要微调Llama-2?Llama-2微调全流程3 基于Llama-2微调3个应用案例案例1:电子游戏评价数据生成文本数据集合案例2:利用Llama-2微调模型…

linux 查看zookeeper server运行版本号

zookeeper版本查看运行命令:echo stat|nc localhost 2181 显示如下图所示: Zookeeper version: 3.4.5-cdh6.3.2--1, built on 11/08/2019 13:15 GMT Clients: /127.0.0.1:44814[0](queued0,recved1,sent0) Latency min/avg/max: 0/0/0 Received: 9 Se…

【Linux】开始使用 vim 吧!!!

Linux 1 what is vim ?2 vim基本概念3 vim的基本操作 !3.1 vim的快捷方式3.1.1 复制与粘贴3.1.2 撤销与剪切3.1.3 字符操作 3.2 vim的光标操作3.3 vim的文件操作 总结Thanks♪(・ω・)ノ感谢阅读下一篇文章见!…

这是一片测试文章

这是一片测试文章 这是一片测试文章 这是一片测试文章 这是一片测试文章 这是一片测试文章 这是一片测试文章 真的是测试文章 -111122225555444433333333222211111 dddddaaa

网络安全B模块(笔记详解)- HASH算法的基本使用

1.通过服务器场景(A-Server),进行HASH算法的基本使用。将123456作为openssl md5 的输入参数,使用 123456进行md5计算并将内容输出到屏幕。将此命令中输出结果的命令作为Flag提交; 2.通过服务器场景使用不同的加密方式对123456进行加密,对比两个加密字符串有何不同。使用…

20240127如何在线识别德语字幕?

20240127如何在线识别德语字幕? 2024/1/27 11:42 1945[科尔贝格]Kolberg 01:48:49 接近109分钟 德语视频的字幕OCR适配: 1、whisper,8:39-8:58,使用GTX1080需要接近20分钟。对整机性能要求比较重,特别吃显卡&#xff…

代码随想录算法刷题训练营day16

代码随想录算法刷题训练营day16:LeetCode(104)二叉树的最大深度 、LeetCode(559)n叉树的最大深度、LeetCode(111)二叉树的最小深度、LeetCode(222)完全二叉树的节点个数 LeetCode(104)二叉树的最大深度 题目 代码 /*** Definition for a binary tree node.* publ…

外包干了10个月,技术退步明显...

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

上升子序列的最大长度,递归-记忆化搜索-动态规划三步走

题目描述: 小明有一个数组,他想从数组任意元素开始向后遍历,找出所有上升子序列,并计算出最长的上升子序列的长度。 数据范围: 每组数据长度满足 1≤n≤200 1≤n≤200 , 数据大小满足 1≤val≤350 1≤val≤…