前言
之前我们已经了解了 mysql 的基本增删改查mysql 从入门到放弃——基本约束以及语法
现在我们系统的进行一遍数据库的设计
直接进入主题
来个例子:下面我们将围绕这个例子来进行数据库的设计
我们就来简单的模拟 大学教务处的选课 系统 中的 选课功能
注意:简单的模拟,功能可能想到的没那么完善
一、概念设计
什么是概念设计呢, 简单来说就是一些 E-R 图 ,实体之间的联系
现在我们来分析一下,简易的 选课系统,有哪些主体,说人话就是有哪些对象
- 首先
选课,选课 肯定有 课程信息 的 主体 ,不然选了个寂寞,主要属性 课程名称、课程号、课程类别 、学分 等等,我们这边就不列那么多了
- 其次
课程谁录进去?就算是批量导入也会有操作者,这里就 认为是老师自己录进去的了,那就有一个 主体是老师信息,其属性有:教工号、姓名、性别、职称
- 再者
选课应该是学生去选课,这就有了学生信息这个主体,其属性有:学号、姓名、性别、年龄、专业班级
品一品他们之间的关系,E-R图 就出来了
1. 老师跟课程的关系是什么?
一般情况来说,一个老师可以上多门课程,一门课程只能让一个老师上,不要说 (不同班,都是 名字是 微积分 的课程,但是是 两个老师在上) ,其实这里只是课程同名,他们的id 不同,是两个不同的对象
所以老师跟课程的关系 为 1对多
2. 学生跟课程的关系是什么?
一个学生可以选择多门课程,一个课程也可以被多名学生选择,因此,这边学生 跟 课程的关系是 多对多
3. 学生跟老师有没有关系呢?
当然有,但并不是主要的,毕竟我们是选课功能,主要选的是课程,并不是选老师、(还没到研究生选导师环节)我们这边可以根据课程信息进行间接关联起来
E-R图:
二、逻辑结构设计
所谓的逻辑结构设计,就是将E-R关系模型进行 表结构的转换
E-R 关系模型 -----------------> 表结构
我们先要了解 三个关系概念在mysql 表中是怎么处理的
1对1
在任意一端加入对方的主键作为外键的存在
1对多
在多端加入一端的 主键作为外键存在
多对多
生成新的表,该表至少包含双方主键作为外键存在
所以:
在课程信息表 这个多端加入 教师id 进行 教师——课程 1对多 关联
课程信息表(course_info):
字段:id(主键)、teacher_id(教师id 主键)、course_name(课程名称)、course_code(课程号)、course_type(课程类别)、course_score(学分) 、create_id(创建人)、create_time(创建时间) 、update_id (修改人) 、update_time(修改时间)
教师表(teacher_info):
字段:id(主键)、code(工号)、name(姓名)、sex(性别)、professional(职称)、create_id(创建人)、create_time(创建时间) 、update_id (修改人) 、update_time(修改时间)
学生表(student_info):
字段:id(主键)、code(学号)、name(姓名)、sex(性别)、age(年龄)、class_name(专业班级)、create_id(创建人)、create_time(创建时间) 、update_id (修改人) 、update_time(修改时间)
学生课程关联表(student_course_info):
字段:id(主键)、stu_id(学生id)、cou_id(课程id)、socre(成绩)、create_id(创建人)、create_time(创建时间) 、update_id (修改人) 、update_time(修改时间)
三、物理结构设计
物理结构设计就是在mysql 数据库中建库,建表了
这边直接使用可视化工具建 数据库可视化工具分享 (DBeaver)
建表脚本,过长,这边就不贴出来了,有需要的同学 可以自行获取 ,脚本 点 这篇文章文末 有获取方式
最后,感谢您的阅读