软件开发的流程
立项->需求分析->概要设计->详细设计->实现->测试->交付->维护
建模过程
strong>需求分析阶段:分析客户的业务和数据处理需求 与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务。
通过需求分析,就可以抽取出关键业务中的”实体类”,这些实体类都是用来封装数据的,这些数据最终都是要存储到数据库中。
概要设计阶段:设计数据库的 E-R 模型图,确认需求信息的正确和完整。
- 标识实体(Entity)
标识数据库要管理的关键对象或实体,实体一般是名词 - 标识每个实体的属性(Attribute)
- 标识实体之间的关系(Relationship)
代码编写阶段:物理实现数据库,编码实现应用。
数据库设计的基本流程
根据业务的需求找出相应的实体类,然后把这些实体类映射成数据库对象(表),再考虑实体的属性,也就是表格的列,最后考虑实体之间的关系,也就是表格之间的关系。
数据库设计的常用工具
- PowerDesigner,sybase公司,功能强大,收费
- ERWIN-Studio,功能比较强大,收费
- JUDE,日本开发的开源,免费
三大范式
作用:用来指导数据库设计人员的一种设计思想,保证数据库的设计是具备可拓展性,无数据的冗余,结构清晰简单明了。
第一范式(1NF):确保每列的原子性,也就是说表中任何一个列都是唯一的、不可再拆分的最小数据单元(也称为最小原子单元)。
如:
R(id,name,age)
此关系中 name 可以分为 first_name 和 last_name,所以,此设计不符合 1NF,应该重新设计为:
R(id,first_name,last_name,age)
第二范式(2NF):一个关系满足 1NF,并且不存在除了主键以外的其他列,部分依赖于该主键,也就是说所有的非关键列都必须完全依赖于关键列。
如:
R(sno,sname,cname,score)
由于以上不管是以哪一列作为关键列,都存在其他非关键列部分依赖于关键列,所以此设计不符合 2NF,应该重新设计为:
R1(sno,sname) ,存放学生信息的表
R2(cno,cname) ,存放课程信息的表
R3(sno,cno,score) ,存放学生与课程考试成绩的中间表
第三范式(3NF):一个关系满足 2NF,并且除了主键以外的其他列都不传递依赖于主键列,也就是说,所有的非关键列都必须直接依赖于关键列。
如:
如果 A 依赖于 B,B 依赖于 C,我们就说 A 传递函数依赖于 C。
学生考入某所大学的信息表:
R(sno,sname,uno,uname,phone,address)
如果以 sno 作为关键列,sanme, uno 是直接依赖于 sno,但是 uname, phone, address这三列都是直接依赖于 uno,间接依赖于 sno,所以此设计不符合 3NF,应该重新设计为:
R1(sno,sname,uno) ,存放学生信息的表
R2(uno,uname,phone,address) ,存放大学信息的表
文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树设计优化反范式设计31259 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!