目录一、上节课复习约束与范式二、设计过程从需求到表三、如何找对象从需求提取实体四、一对一学生和账号五、一对多学生和班级六、多对多学生和课程七、ER图与敏捷开发总结口诀一、上节课复习约束与范式学数据库设计前得先回顾下MySQL的约束这可是基本功not null字段不能为空default默认值unique唯一值primary key主键foreign key外键check检查约束再就是经典的数据库设计三范式划重点第一范式列必须是原子的不可再分第二范式消除部分依赖第三范式消除依赖传递二、设计过程从需求到表数据库设计不等于创建数据库表实际开发中会遇到具体场景解决实际问题要有几个表每个表干啥的每个表有啥属性表和表之间是否有关联关系比较基础、细节的设计通常都是一线开发干的。而架构设计是站在更宏观的角度对整个系统结构进行设计。举个实战例子领导让你开发一个功能给广告平台上添加一个让用户录入产品信息的模块。你需要创建产品信息表根据需求细节有哪些属性这个表和其他表的关联和公司表、用户表产生联系...三、如何找对象从需求提取实体如何进行数据库表设计首先得充分理解需求产品经理干的活然后从需求中提取实体关键性质的名词这其实就是面向对象程序设计中的如何找对象。找到实体后列出实体之间的关系一对一一对多多对多没关系如何判定是哪种关系仿写句子尝试套句子到三种当中四、一对一学生和账号以教务系统为例学生和账号一个学生只能有一个账号不能注册小号一个账号只能属于一个学生账号不能共享1) 用一张表来表示学生和账号student (id, name, username, password)⚠️不推荐 因为未来新增教师表时要让教师和账号有一对一的关联关系这样设计扩展性差。2) 用两个表表示student (id, name) account(accountId, username, passworld, studentId)这是推荐的做法。五、一对多学生和班级学生和班级一个学生只能属于一个班级不能同时在两个班一个班级可以包含多个学生1) 不推荐的写法student (id, name) class (classId, name, studentIdList) -- [1,2,3,4]❌ 可拆分的不是原子的违反了第一范式2) 推荐的写法student (id, name, classId) ✅ class(classId, name)六、多对多学生和课程多对多关系必须引入关联表学生和课程一个学生可以选多个课程C, Java, C#...一个课程也可以被多个学生选择一门Java课可以被张三、李四、王五多个学生选择表结构设计student(studentId, name....) 1 张三 2 李四 course(courseId, name....) 100 语文 101 数学 student-course (studentId, courseId...) 1 100 张三选择了语文课 1 101 张三选择了数学课 2 100 李四选择了语文课 2 101 李四选择了数学课七、ER图与敏捷开发ER图实体关系图是把上述的实体和关系画出来。不过上古时期软件开发非常重视流程和文档2000年左右现代软件开发轻流程、重效率遵循敏捷开发思维——小步快跑第一阶段先开发有限的几个核心功能上线发布足够快第二阶段根据反馈对上述功能调整再开发第二阶段的功能每一个新的阶段我们都称为一次迭代总结口诀一对一定式学生和账号一对多用外键学生和班级多对多建中间表学生课程记住仿写句子法数据库设计将很简单