数据库3—数据库基础·数据库设计与规范化

数据库知识 - 索引目录

一、数据库设计原则

1、数据库设计原则

  1. 识别实体:

    • 确定系统中的实体,它们是我们要在数据库中存储的主要对象。实体可以是现实生活中的对象、概念或事件。
  2. 定义属性:

    • 为每个实体确定属性,这些属性描述了实体的特征。属性是我们存储在数据库中的数据项。
  3. 识别关系:

    • 确定实体之间的关系。关系是连接实体并允许它们共同工作的手段。关系可以是一对一、一对多或多对多的。
  4. 消除冗余:

    • 设计时尽量减少数据冗余,避免在数据库中存储相同的信息。冗余会导致数据不一致和更新异常。
  5. 确保数据一致性:

    • 使用外键来确保关系的完整性,以防止不一致的数据进入数据库。
  6. 规范化:

    • 将数据库设计规范化,以减少数据冗余、提高数据一致性,并减少更新异常的发生。

2、数据库设计步骤

2.1 数据库设计的基本步骤

  1. 需求分析:

    • 理解业务需求,与利益相关者(包括用户和管理层)进行沟通,明确数据库的目标和功能。
    • 收集数据需求,确定需要存储的数据以及数据之间的关系。
  2. 概念设计:

    • 根据需求分析结果,绘制概念模型,使用实体-关系图(ER图)等工具,定义实体、属性和它们之间的关系。
    • 确定主键和外键,描述实体的完整性和关系的一致性。
  3. 逻辑设计:

    • 将概念模型转换为逻辑模型,选择适当的数据库管理系统(DBMS)。
    • 定义表结构、字段类型、约束(主键、外键等),确保数据的一致性和完整性。
  4. 规范化:

    • 对表进行规范化,消除冗余数据,减少数据更新异常,提高数据库的性能和可维护性。
    • 使用范式化的过程,将数据组织成更小的、更依赖于主键的关系。
  5. 物理设计:

    • 考虑数据库的物理存储结构,包括表空间、索引等。
    • 优化查询性能,选择适当的索引策略,确保数据库的高效访问。
  6. 实施和测试:

    • 根据设计完成数据库的创建,表的建立和数据的导入。
    • 进行系统测试,确保数据库的功能符合预期,性能满足需求。
  7. 部署和维护:

    • 部署数据库到生产环境,监控数据库性能,进行必要的调整和优化。
    • 定期备份数据,实施数据库的维护计划,确保数据库的稳定和可靠运行。

2.2 示例

我们有一个简单的图书管理系统,需求包括存储书籍信息、作者信息和借阅记录。

根据这些需求,我们可以进行如下设计:

  1. 需求分析:

    • 业务需求:存储书籍、作者和借阅记录信息。
    • 数据需求:书籍包含标题、ISBN等信息;作者包含姓名、国籍等信息;借阅记录包含借阅日期、归还日期等信息。
  2. 概念设计:

    • 绘制ER图,定义书籍、作者和借阅记录实体,建立它们之间的关系。
  3. 逻辑设计:

    • 将ER图转换为表结构,定义书籍表(Books)、作者表(Authors)、借阅记录表(BorrowRecords)等。
  4. 规范化:

    • 对表进行规范化,确保每个表都符合第三范式。
  5. 物理设计:

    • 考虑存储引擎、索引等,优化查询性能。
  6. 实施和测试:

    • 创建数据库,建立表,导入初始数据。
    • 进行系统测试,确保能够正确插入、更新、删除数据。
  7. 部署和维护:

    • 部署到生产环境,设置定期备份和维护计划,监控数据库性能。

3、ER图的绘制与分析

3.1 示例ER图

下面是一个简单的学生-课程数据库的ER图示例:

entity Student StudentID int FirstName string LastName string Course CourseID int CourseName string Enrollment EnrollmentID int Grade string

在这个示例中,我们有三个实体:学生(Student)、课程(Course)和注册(Enrollment)。学生和课程之间有一个“Enrolls”关系,表示学生注册了某门课程。

3.2 ER图的分析

  • 实体:

    • StudentCourse是两个主要的实体,分别代表学生和课程。
  • 属性:

    • Student有属性StudentIDFirstNameLastName
    • Course有属性CourseIDCourseName
    • Enrollment有属性EnrollmentIDGrade
  • 关系:

    • Enrollment实体表示了学生和课程之间的关系,通过StudentIDCourseID连接。

二、数据库规范化

第一至第五范式的概念 & 数据库冗余的处理

当数据库表进行规范化后,每个范式都会对表的结构和数据进行特定的调整,以确保数据的一致性、减少冗余和提高查询效率。

1.1 第一范式 (1NF) - 原子性

第一范式要求每个列都是不可再分的原子值,即每个字段中不能包含多个值。

示例表格:

学生ID 姓名 课程
1 小明 数学, 物理, 化学
2 小红 英语, 历史

第一范式后的表格:

学生ID 姓名 课程
1 小明 数学
1 小明 物理
1 小明 化学
2 小红 英语
2 小红 历史

解释: 在第一范式后,课程字段被拆分成了多行,每行只包含一个课程,确保了每个字段都是原子值,不再包含多个值。

1.2 第二范式 (2NF) - 完全依赖主键

第二范式要求表中的非主键列完全依赖于主键,消除部分依赖。

示例表格:

订单ID 产品ID 产品名称 产品描述
1 101 手机 智能手机
2 101 手机 智能手机
3 102 笔记本电脑 轻薄便携

第二范式后的表格:

订单表:

订单ID 产品ID
1 101
2 101
3 102

产品表:

产品ID 产品名称 产品描述
101 手机 智能手机
102 笔记本电脑 轻薄便携

解释: 在第二范式后,将产品表拆分出来,确保每个非主键列完全依赖于主键,消除了部分依赖。

1.3 第三范式 (3NF) - 消除传递依赖

第三范式要求消除传递依赖,即非主键列之间不能存在传递依赖。

示例表格:

学生ID 课程 教授姓名
1 数学 张老师
2 英语 王老师
3 物理 李老师

第三范式后的表格:

学生表:

学生ID 课程
1 数学
2 英语
3 物理

教师表:

课程 教授姓名
数学 张老师
英语 王老师
物理 李老师

解释: 在第三范式后,将教授姓名与课程拆分成两个表,消除了传递依赖,确保了非主键列之间不能存在传递依赖。

1.4 第四范式 (4NF) - 多值依赖

第四范式要求消除多值依赖。

示例表格:

订单ID 产品名称 颜色
1 手机 红色, 黑色
2 笔记本电脑 银色, 灰色

第四范式后的表格:

订单表:

订单ID 产品名称
1 手机
2 笔记本电脑

颜色表:

订单ID 颜色
1 红色
1 黑色
2 银色
2 灰色

解释: 在第四范式后,将颜色与订单拆分成两个表,消除了多值依赖,确保了每个表都只包含单一关联。

1.5 第五范式 (5NF) - 连接依赖

第五范式要求消除连接依赖。

示例表格:

部门 员工
技术 小明, 小红
销售 小张, 小李

第五范式后的表格:

部门表:

部门 员工
技术 小明
技术 小红
销售 小张
销售 小李

解释: 在第五范式后,将员工与部门拆分成两个表,消除了连接依赖,确保了每个表都只包含单一关联。

1.6 BCNF范式 (Boyce-Codd Normal Form) - 主键决定非主键属性

BCNF范式是在第三范式的基础上进一步要求,确保主键决定非主键属性。

示例表格:

学生ID 课程 教授姓名
1 数学 张老师
2 英语 王老师
3 物理 张老师

BCNF范式后的表格:

学生表:

学生ID 课程
1 数学
2 英语
3 物理

教师表:

课程 教授姓名
数学 张老师
英语 王老师

解释: 在BCNF范式后,确保主键决定非主键属性,保证了数据库表的结构符合BCNF的要求。

猜你喜欢

转载自blog.csdn.net/weixin_49015143/article/details/134944829