数据库设计及三大范式

软件开发的流程

立项->需求分析->概要设计->详细设计->实现->测试->交付->维护

建模过程

strong>需求分析阶段:分析客户的业务和数据处理需求 与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务。

通过需求分析,就可以抽取出关键业务中的”实体类”,这些实体类都是用来封装数据的,这些数据最终都是要存储到数据库中。

概要设计阶段:设计数据库的 E-R 模型图,确认需求信息的正确和完整。

  1. 标识实体(Entity)
    标识数据库要管理的关键对象或实体,实体一般是名词
  2. 标识每个实体的属性(Attribute)
  3. 标识实体之间的关系(Relationship)

代码编写阶段:物理实现数据库,编码实现应用。

数据库设计的基本流程

根据业务的需求找出相应的实体类,然后把这些实体类映射成数据库对象(表),再考虑实体的属性,也就是表格的列,最后考虑实体之间的关系,也就是表格之间的关系。

数据库设计的常用工具

  1. PowerDesigner,sybase公司,功能强大,收费
  2. ERWIN-Studio,功能比较强大,收费
  3. 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进行处理,非常感谢!

上一篇 2020年8月6日
下一篇 2020年8月6日

相关推荐