MySQL数据库--学生管理系统的数据库设计
目录
学生管理系统数据库设计
学生管理系统的功能介绍
数据库设计步骤
步骤:寻找对方
步骤:查找属性
步骤:查找关系
场面话遵守原则
要查找步骤4:特例:等级明确且不包含敏感数据的信息,建议保留在一张表中
遵循数据库设计的三种范式
总结:数据库设计遵循的原则[重点]
学生管理系统数据库设计
要设计一组数据库,首先需要了解当前系统具有哪些功能,以及具体的业务流程是什么
学生管理系统的功能介绍
学校学生管理系统的核心功能是:
学生信息管理(增加学生、删除学生、修改学生、查询学生信息==简称: CURD ) )。
老师信息管理(CURD ) )。
课程信息管理系统(CURD ) )。
成绩信息管理系统(CURD )。
违纪信息管理(CURD )。
活动信息管理(CURD ) ) ) ) ) ) )。
物资/设备信息管理(CURD ) )。
等待.
要完成上述所有功能,必须处理有关上述对象的信息。 上述对象的信息可以固定格式保存在数据库中!
数据库设计的第一步是找到与业务相关的中心对象,物体/对象类型信息固定存储在一张表中。
概念
对象:生活中的一种物体,在程序中称为对象
属性:物体的名词和形容词的记述是对象的属性
数据库设计步骤
数据库设计的三个主要步骤:
1 .寻找对方
2 .查找属性
3 .寻找关系
步骤:寻找对方
分析系统业务中的中心对象
学生对象----学生表(student ) )。
老师对象----老师表(teacher ) ) )。
课程对象----课程体系(course ) )。
成绩对象----成绩单(score ) )。
类对象----类表(前缀_class、user和class等英语单词是程序中的关键字,所以尽量不直接使用) )。
等待.
注意:有些隐式对象可能不熟悉业务,因此找不到。 例如:学生邀请函对象、事件对象等。 因此,在进行数据库设计之前,请务必整理系统功能和业务流程。 当然,泄露的对象可以根据需要补充。 数据库设计一步也没有。
步骤:查找属性
属性概念:物体/对象的名词或形容词的记述.学名为“属性”,各属性对应表中的一列!
学生对象(student ) :唯一标识符、学号名称、性别、年龄、生日、电话
老师对象(teacher ) :唯一标识符、姓名、性别、年龄、电话
课程对象(course ) :唯一标识符id、课程名称、开课时间、课时数
类对象(tbl_class ) :唯一标识符id、类名、人数
成绩对象(score ) : id,分数,课程名称)可以直接引用课程号码),学生名称)可以直接引用学生号码)。
对象的每个属性都对应于表中的每一列
为了避免数据冗馀(重复),请使用学生id和课程id代替名称!
电脑中存储的数据严格区分了各种类型! 年龄:整数int,名字:字符串; char/varchar/string
步骤:查找关系
表与表的关系为:1----n(1 (一对多)或n----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表名wherepid='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