【数据库原理】(31)数据库设计-逻辑结构设计

发布时间:2024年01月18日

逻辑结构设计的核心是将信息世界的概念模型(E-R图)转化为计算机世界的数据模型,并针对特定的数据库管理系统(DBMS)进行优化。以关系模型为例,这一过程涉及将E-R图中的实体、属性及它们之间的联系转化为关系模式。转换过程中遵循的原则和方法如下:

一.E-R图转换为数据模型

在这里插入图片描述

  1. 实体转换为关系

    • 每个实体对应一个关系模式,实体的属性和主键转换为关系的属性和主键。
    • 例如:
    • 教师实体转换为教师关系模式:教师(职工号, 姓名, 性别, 出生日期, 职称)。
    • 学生实体转换为学生关系模式:学生(学号, 姓名, 性别, 出生日期)。
    • 班级实体转换为班级关系模式:班级(班级号, 学生人数)。
  2. 联系转换为关系模式

    • m:n型的联系:转换为独立的关系模式,联系中各实体的主键和联系自身的属性构成这个关系模式的属性,如“指导”联系转化为指导(职工号, 班级号, 考评成绩)。
    • 1:n型的联系:有两种转换方法:一是转换为独立的关系模式,二是合并到“n”端实体的关系模式中,如“组成”联系可以转换为组成(学号, 班级号)或合并到学生模式中。
    • 1:1型的联系:类似1:n型,可转换为独立关系模式或合并到任一实体的关系模式中。
  3. 多元联系转换为关系模式

    • 三个或以上实体的多元联系转换为独立的关系模式,相关实体的主键和联系属性构成新模式的属性。如果有如住宿(学生,宿舍,床位)这样的三元联系,可以转换为住宿(学生号, 宿舍号, 床位号)。
  4. 实体自联系的转换

    • 同一实体集的内部联系,转换方法类似于普通的实体间联系。比如教师指导教师,可以转换为指导(指导教师号, 被指导教师号)。
  5. 具有相同主键的关系模式合并

    • 当两个关系模式有相同的主键时,可以考虑合并,以减少重复和提高查询效率。如学生(学号, 姓名, 性别, 出生日期)和所属班级(学号, 班级号),由于主键相同,可以合并为学生(学号, 姓名, 性别, 出生日期, 班级号)。

二.关系规范化

通过分解或合并关系模式,对从E-R图转换得到的数据模型进行初步优化。规范化理论指导着这一过程,主要目的是减少数据冗余和避免不良的数据依赖,从而提高数据库的效率和一致性。以下是规范化的基本步骤:

  1. 考察关系模式的函数依赖关系

    • 分析并提炼各个关系模式中的函数依赖关系。
    • 对这些函数依赖进行极小化处理,消除冗余的依赖,确保每个依赖都是必要的。
  2. 应用数据依赖理论进行关系模式的分解

    • 将关系模式分解,至少达到第三范式(3NF)。
    • 第三范式的目标是消除部分函数依赖和传递依赖。

关系模式的分解是一个平衡过程。虽然高度的规范化可以减少数据冗余,但同时也可能增加数据库操作的复杂性,尤其是在执行连接操作时。因此,在实际应用中,通常认为达到第三范式(3NF)就足够了。在3NF中,每个非主属性都直接依赖于主键,而不是部分依赖或传递依赖。

举例说明:

假设有一个关系模式 学生(学号, 姓名, 性别, 出生日期, 班级号, 院系),其中存在以下函数依赖:

  • 学号 → 姓名, 性别, 出生日期
  • 班级号 → 院系

在这个例子中,院系依赖于班级号,而不是直接依赖于学号,这构成了传递依赖。为了达到3NF,我们可以将原关系模式分解为两个关系模式:

  • 学生(学号, 姓名, 性别, 出生日期, 班级号)
  • 班级(班级号, 院系)

这样的分解消除了传递依赖,同时减少了数据冗余。通过这种方式,数据库设计旨在平衡规范化的需要和系统性能之间的关系。

三.数据模型的优化

目标是提高数据库应用系统的性能。这通常涉及到对已经产生的关系模式进行修改、调整和重构。关键点在于,虽然规范化理论旨在减少数据冗余并提高数据的一致性,但在某些情况下,适当增加冗余可以显著提高数据库的查询效率和性能。

优化策略

  1. 添加适当的冗余

    • 通过在关系模式中引入冗余数据,可以减少复杂查询的频率,提高查询效率。
    • 冗余不应该随意添加,而是基于系统使用频率和性能要求进行有目的的设计。
  2. 考虑查询频率和性能要求

    • 分析数据库的使用模式,确定哪些查询是频繁进行的。
    • 针对这些高频率查询优化数据模型。
  3. 平衡规范化与性能

    • 在规范化与查询性能之间找到平衡点。
    • 在必要时,可以适当降低规范化级别来提高性能。

举例说明

以“班级”和“学生”关系的例子来说明。假设在规范化的数据库中,我们有以下两个关系模式:

  • 学生(学号, 姓名, 班级号)
  • 班级(班级号, 院系)

在这种设计中,要计算每个班级的学生人数,需要通过对“学生”关系中的“班级号”进行计数。这种计算如果频繁进行,会导致性能问题。因此,可以通过在“班级”关系中添加一个“人数”属性来优化此模型:

  • 班级(班级号, 院系, 学生人数)

这里的“学生人数”是一个冗余属性,因为它可以通过统计“学生”关系中相同“班级号”的记录数来计算得出。然而,这种冗余可以显著提高查询“每个班级的学生人数”的效率,因为不再需要每次都去统计“学生”关系。

在实际应用中,数据库设计师需要在保持数据一致性的前提下,对数据模型进行这样的优化,以提高数据库的整体性能。

四.设计外模式

设计外模式(也称为子模式或用户模式)是一个重要步骤。外模式是数据库系统中逻辑结构设计的一部分,它提供了数据与应用程序之间的独立性,并且是确保数据库安全性的关键机制。

外模式的目的和作用:

  1. 实现数据与应用程序的独立性

    • 通过外模式,可以在不改变应用程序的情况下修改数据库的内部结构,从而维护数据的逻辑独立性。
  2. 保护数据库的安全性

    • 每个用户或用户组只能看见和访问他们对应的外模式中的数据,这样数据库中的其余数据对他们是不可见的。
  3. 定义外模式/模式映像

    • 外模式/模式映像定义了外模式与数据库系统模式之间的对应关系。
    • 当系统模式变化时,数据库管理员可以更新外模式/模式映像,而不影响外模式,保持应用程序的不变。

设计外模式时的注意事项:

  1. 用户友好的命名

    • 在外模式中,应按照用户的习惯进行命名,包括关系名、属性名等。
    • 即使外模式的属性与系统模式的属性本质相同,也可以采用不同的命名方式,以适应用户的理解和使用习惯。
  2. 根据用户级别定义不同的外模式

    • 为不同级别的用户或用户组定义不同的外模式,以确保数据访问的安全性和合适的数据可见性。
  3. 构造必要的外模式以简化操作

    • 设计外模式时,应考虑用户操作的便利性,简化用户对数据的访问和操作,提高效率。

通过这些策略,外模式成为实现数据独立性、维护安全性和简化用户操作的有效工具。在数据库系统中,外模式的设计是连接用户与底层数据的桥梁,它使得用户能够以更直观和安全的方式与数据库交互。

文章来源:https://blog.csdn.net/qq_40951951/article/details/135677978
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。