MySQL 数据库 -- 学生管理系统数据库设计

目录

学生管理系统数据库设计

学生管理系统功能介绍

数据库设计步骤

第 1 步: 找对象

第 2 步: 找属性

第 3 步: 找关系

建表遵守原则

第 4 步: 找特例: 等级明显而且不包含敏感数据的信息建议保持为 1 张表

遵循数据库设计三大范式

总结: 数据库设计遵循的原则[重点]

学生管理系统数据库设计

设计一套数据库首先要熟悉当前系统有哪些功能, 具体的业务流程是什么

学生管理系统功能介绍

一套学校用的学生管理系统, 最核心的功能如下

学生信息管理(增加学生, 删除学生, 修改学生, 查询学生信息 == 简称: CURD)

老师信息管理(CURD)

课程信息管理系统(CURD)

成绩信息管理系统(CURD)

违纪信息管理(CURD)

活动信息管理(CURD)

物资 / 设备信息管理(CURD)

等....

要完成以上所有的功能, 需要操作以上对象的相关信息. 以上对象的信息可以按照固定格式存储在数据库中!

数据库设计的第一步就是找出业务相关的的核心对象, 一类物体 / 对象的信息固定存储在一张表中!

概念

对象: 生活中的一类物体, 程序中叫对象

属性: 物体的名词和形容词的描述, 就是对象的属性

数据库设计步骤

数据库设计三大核心的步骤:

1. 找对象

2. 找属性

3. 找关系

第 1 步: 找对象

分析系统业务中的核心对象.

学生对象 ----> 学生表(student)

老师对象 ----> 老师表(teacher)

课程对象 ----> 课程表(course)

成绩对象 ----> 成绩表(score)

班级对象 ----> 班级表(前缀_class, 因为 user 或 class 等英文单词是程序中的关键字. 尽量不直接用)

等.....

注意: 一些隐含的对象可能因为对业务不熟练, 可能找不到,. 比如: 学生请假条对象. 活动对象等..... 所以进行数据库设计之前, 一定要把系统功能和业务流程整理清楚. 当然遗漏的对象可以在需要时再补充. 数据库设计没有一步到位的.

第 2 步: 找属性

属性概念: 物体 / 对象的名词或形容词的描述. 学名叫 "属性",, 每个属性对应表中的 1 个列!

学生对象(student): 唯一标识 id, 学号 姓名, 性别, 年龄, 生日, 电话,

老师对象(teacher): 唯一标识 id, 姓名, 性别, 年龄, 电话

课程对象(course): 唯一标识 id, 课程名, 开课时间, 课时数量

班级对象(tbl_class) : 唯一标识 id, 班级编号, 人数

成绩对象(score) : id, 分数, 课程名(可直接引用课程编号), 学生名(可直接引用学生编号)

对象中每个属性就对应表中的每个列

为了避免数据冗余(重复), 用学生 id 和课程 id 代替名字!

电脑中存储数据是严格区分不同类型的! 年龄: 整数 int, 名字: 字符串; char/varchar/string

第 3 步: 找关系

表和表之间的关系有: 1---N(1 对多) 或 N---1(多对 1) 或 1-1(1 对 1) 或 N--N (多对多)

1-N 或 1-1 或 N-1: 通过主键和外键表示

N-N : 一但出现多对多, 必须借助一个中间表 (关系表) 实现

比如 商品和订单表就是 N--N

商品(id, 商品编号, 名字, 数量, 价格)

订单(id, 订单号, 用户名(id), 总价, 总数量 )

独立一个中间表 / 关系表(保存另外两张表的主键引用)idpid(商品编号)oid(订单编号)1P001D001

2P002D001

3P003D001

4P001D002

5P001D003

6P002D002

# 查 订单 D001 买的所有的商品!

select * from 表名 where oid='D001'

# 查 商品 P001 被下单了多少次?

select * from 表名 where pid = 'P001'# 看: D001 买了几个商品!

selectsum(num)fromguanxi_product_order

whereoid='D001'

建表遵守原则

对象分析出来后就可以建表了, 一般建表时遵循的原则如下.

建表规则

1. 同一类的对象信息存储在 1 张表中!

2. 对象的每个属性对应表中的每个列!

3. 列有具体的数据类型

int: 整数

小数: float/doube

日期: date.datetime

字符串: char/varchar

4. 每个表中必须有主键列!

唯一区分一个行的列就交主键列(可以多个)

规则: 为了避免没有主键习惯于添加一个虚拟的主键 id(自增)

5. 添加约束(限制条件)

主键: primary key --->特点: 唯一

自增: auto_increment----> 自动增长

默认值: default ----->性别默认为男!

非空: not null--------> 必须有数据

唯一: unique---->不能重复

外键 (参考) foreign key:------> 成绩表中存班级 id, 课程 id,

第 4 步: 找特例: 等级明显而且不包含敏感数据的信息建议保持为 1 张表

比如: 地区表 和 员工表id(地区编号)namecodepcode 父编号1北京11

2山东37

3济南370137

4青岛370237

5海淀110111

6房山110211

-- 所有省

select * from area where pcode is null

-- 山东省所有的市selectcodefromareawherename='山东'

select*fromareawherepcode=37

select*fromareawherepcode=(

selectcodefromareawherename='山东'

)

遵循数据库设计三大范式

第一范式: 原子性

根据业务需要保证表中的每个列不可再拆分. 比如: 简单存储学生信息地址列就够用了. 但是电商类网站地址需要拆分为省, 市, 县, 乡, 村

第二范式: 相关性

保证表中的每个列都和主键相关, 只要满足一类物体的信息保存在 1 张表中, 就满足第二范式

第三范式: 直接相关性

这个一般用于多个列联合作为主键的中间表, 其他列必须和每个组件直接相关, 而不能只和某一个列有关系.

参考: https://www.cnblogs.com/knowledgesea/p/3667395.html

总结: 数据库设计遵循的原则[重点]

前提: 熟悉项目的业务流程!

一类对象信息保存张表中

表中必须有主键列(为了防止没有主键习惯添加虚拟主键列 id,id 一般设置为自增)

添加约束保证数据完整性

主键

唯一

自增

非空

外键(实现 1-N)

默认值

多对对必须独立一个关系表

注意: 等级明显并且无敏感信息的数据可以通过自关联实现!

遵守: 数据库设计三大范式(三大原则)

来源: http://www.bubuko.com/infodetail-3219193.html

学生管理系统的mysql数据库设计_MySQL 数据库 -- 学生管理系统数据库设计相关推荐

  1. mysql workbench 闪电_MySQL Workbench下载|可视化数据库设计建模(MySQL Workbench) 8.0 最新版-闪电下载吧...

    MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具.它是著名的数据库设计工具DBDesigner4的继任者.你可以用MySQL Workbench设计和创建新的数据库图示,建 ...

  2. 命令行mysql数据库备份_MySQL命令行备份数据库

    For instance : 数据库地址:127.0.0.1 数据库用户名:root 数据库密码:psd 数据库名称:samego samego_2 samego数据库下的两张表 managers_1 ...

  3. mysql网页后台_MySQL(PHP网站后台数据库)

    MySQL是一款非常受欢迎的开源SQL数据库管理系统,它由MySQL AB开发.发布和支持,MySQL 的执行性能非常高,运行速度非常快,并非常容易使用.是一个非常捧的数据库,PHP 和MYSQL完美 ...

  4. mysql join 去重_MySQL Update inner join数据库去重,以及根据一张表的值更新另一张表...

    1 问题来源 这几天在项目中遇到一个问题:由于前期设计不合理,导致后期用户录入数据时,基础数据表中有重复多余数据.如下: 出现两个 2G网络测试手机 这样类似的基础数据,直接后果就是用户在使用这个基础 ...

  5. mysql 系统默认_mysql之系统默认数据库

    相关内容: 系统默认数据库information_schema,performance_schema,mysql,test  的意义 首发时间:2018-02-23 17:10 安装mysql完成后, ...

  6. mysql备份教程_Mysql教程-自动备份数据库

    批处理命令: set"Ymd=%date:~,4%%date:~5,2%%date:~8,2%" set"hMs=%time:~,2%%time:~3,2%%time:~ ...

  7. mysql 数据迁移_mysql实验--不同字符集数据库迁移步骤演示

    概述 今天主要介绍下mysqldump怎么迁移编码不同的数据库,这里用一个实验来演示一下. 1.创建测试数据库 create database t1 default character set gbk ...

  8. mysql触发器 多数据_mysql的触发器同数据库多表的数据操作_MySQL

    CREATE TRIGGER BEFORE ON FOR EACH ROW //语句可以是任何合法的语句,包括复合语句,但是这里的语句受的限制和函数的一样 2.触发器的创建 不能给同一张表的同一个事件 ...

  9. mysql 授予数据库权限_MySQL:授予**对数据库的所有**权限

    我创建了数据库,例如'mydb'. CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin; CREATE USER 'myuser'@'%' ...

  10. 查看mysql用户权限_mysql 如何查看该数据库用户具有哪些权限?

    展开全部 背景 在了解动态权限之前,我们先回顾下 MySQL 的权限列表. 权限列表大体分为服务级别和表级别,列级别以32313133353236313431303231363533e59b9ee7a ...

最新文章

  1. Windows 2003架设CA服务器 (视频)
  2. 运行项目到 微信开发者工具和浏览器
  3. 18650锂电池保护板接线图_锂电池保护板的原理介绍保护板的构成和主要作用
  4. 全通阅卷系统服务器配置,网上阅卷系统建设方案(24页)-原创力文档
  5. 使用FTP服务器进行文件上传与下载
  6. php 分页类 bootstrap,Thinkphp自带分页类样式转Bootstrap分页样式
  7. matlab逆变换法产生随机数_[原创]Matlab 生成随机数
  8. Codeforces - King Kog‘s Reception
  9. 高通android q 通过backtrace,使用addr2ine工具,定位crash问题记录
  10. android屏幕适配:一个很棒的屏幕适配文章
  11. Linux运维对比:Shell运维 VS Python运维
  12. opc在自动化控件系统的应用
  13. html中简述rem布局原理,rem布局原理解析
  14. 用户与浏览器的交互过程
  15. 用C语言输出1到100的奇数
  16. rm 删除文件或目录
  17. mysql 复杂行转列_有趣的SQL(四) 行转列的复杂应用和优化思想
  18. 手机热点设置虚拟服务器,以三款路由器为例,浅谈手机热点中继路由器的设置方法...
  19. 微信小程序Vue+uniapp社区居民生活事务系统python小区物业报修缴费系统java
  20. vscode python 插件pyla_Xuite自由欄位經常造成JavaScript異常!?

热门文章

  1. html5一键导航代码,站长有福了-让网址一键添加百度首页导航
  2. 仪表盘服务(Dashboard)安装配置
  3. 借力云管理网络 兰州大学开启智慧校园新时代
  4. Office PPT中如何插入flash
  5. 易飞ERP数据库密码获取工具
  6. Java代码实现Excel表格导出
  7. Android实用的优惠券控件
  8. 关于我终于拿捏了C语言结构体那点事 ——超详细的C语言结构体讲解
  9. 基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能
  10. FIR滤波器学习设计笔记