学⽣数据库表mysql_[7]MySQL数据库--学⽣管理系统数据库
设计
完整建库建表命令参考
学⽣管理系统库设计
设计⼀套数据库⾸先要熟悉当前系统有哪些功能,具体的业务流程是什么
学⽣管理系统功能介绍
⼀套学校⽤的学⽣管理系统,最核⼼的功能如下
学⽣信息管理(增加学⽣,删除学⽣,修改学⽣,查询学⽣信息==简称:CURD)pascal语言教学
⽼师信息管理(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,分数,课程名(可直接引⽤课程编号), 学⽣名(可直接引⽤学⽣编号)
对象中每个属性就对应表中的每个列
mysql是什么系统为了避免数据冗余(重复),⽤学⽣id和课程id代替名字!
mdb数据库电脑中存储数据是严格区分不同类型的! 年龄:整数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), 总价, 总数量 )
独⽴⼀个中间表/关系表(保存另外两张表的主键引⽤)
id
pid(商品编号)
oid(订单编号)
1
P001
D001
2
P002
D001
3
P003
D001
4
D002
5
P001
D003
6
P002
D002
#查 订单D001买的所有的商品!
select * from 表名 where oid='D001'
# 查 商品 P001被下单了多少次?
select * from 表名 where pid = 'P001'
# 看:D001 买了⼏个商品!
select sum(num) from guanxi_product_order
where oid='D001'
建表遵守原则
对象分析出来后就可以建表了,⼀般建表时遵循的原则如下.建表规则
1. 同⼀类的对象信息存储在1张表中!
2. 对象的每个属性对应表中的每个列!
3. 列有具体的数据类型
int: 整数
⼩数: float/doube程序设计语言都有哪些
⽇期: date.datetime
字符串:char/varchar
4. 每个表中必须有主键列!
唯⼀区分⼀个⾏的列就交主键列(可以多个)
规则: 为了避免没有主键习惯于添加⼀个虚拟的主键id(⾃增) 5. 添加约束(限制条件)
主键: primary key --->特点: 唯⼀
⾃增: auto_increment----> ⾃动增长
默认值: default ----->性别默认为男!
⾮空: not null--------> 必须有数据
唯⼀: unique---->不能重复
第4步: 特例: 等级明显⽽且不包含敏感数据的信息建议保持为1张表⽐如:地区表 和 员⼯表
id(地区编号)
name
code
pcode⽗编号
1
北京
11
2
⼭东
37
3
济南
3701
37
4
青岛
3702
37
5
海淀
1101
11
6
房⼭
oracle12c兼容11g吗
1102
11
-- 所有省
select * from area where pcode is null
-- ⼭东省所有的市
select code from area where name= '⼭东'
select * from area where pcode = 37
select code from area where name= '⼭东'
)
遵循数据库设计三⼤范式
数组的动态初始化c语言第⼀范式: 原⼦性
根据业务需要保证表中的每个列不可再拆分.⽐如: 简单存储学⽣信息地址列就够⽤了. 但是电商类⽹站地址需要拆分为省,市,县,乡,村第⼆范式: 相关性
保证表中的每个列都和主键相关,只要满⾜⼀类物体的信息保存在1张表中,就满⾜第⼆范式
第三范式: 直接相关性
这个⼀般⽤于多个列联合作为主键的中间表,其他列必须和每个组件直接相关,⽽不能只和某⼀个列有关系.
总结: 数据库设计遵循的原则[重点]
完整建库建表SQL命令
前提: 熟悉项⽬的业务流程!
⼀类对象信息保存张表中
表中必须有主键列(为了防⽌没有主键习惯添加虚拟主键列id,id⼀般设置为⾃增)
添加约束保证数据完整性
主键
唯⼀
⾃增
⾮空
外键(实现1-N)
默认值
多对对必须独⽴⼀个关系表
注意: 等级明显并且⽆敏感信息的数据可以通过⾃关联实现!
遵守: 数据库设计三⼤范式(三⼤原则)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论