逻辑结构设计的核心是将信息世界的概念模型(E-R图)转化为计算机世界的数据模型,并针对特定的数据库管理系统(DBMS)进行优化。以关系模型为例,这一过程涉及将E-R图中的实体、属性及它们之间的联系转化为关系模式。转换过程中遵循的原则和方法如下:
实体转换为关系:
联系转换为关系模式:
多元联系转换为关系模式:
实体自联系的转换:
具有相同主键的关系模式合并:
通过分解或合并关系模式,对从E-R图转换得到的数据模型进行初步优化。规范化理论指导着这一过程,主要目的是减少数据冗余和避免不良的数据依赖,从而提高数据库的效率和一致性。以下是规范化的基本步骤:
考察关系模式的函数依赖关系:
应用数据依赖理论进行关系模式的分解:
关系模式的分解是一个平衡过程。虽然高度的规范化可以减少数据冗余,但同时也可能增加数据库操作的复杂性,尤其是在执行连接操作时。因此,在实际应用中,通常认为达到第三范式(3NF)就足够了。在3NF中,每个非主属性都直接依赖于主键,而不是部分依赖或传递依赖。
假设有一个关系模式 学生(学号, 姓名, 性别, 出生日期, 班级号, 院系)
,其中存在以下函数依赖:
在这个例子中,院系依赖于班级号,而不是直接依赖于学号,这构成了传递依赖。为了达到3NF,我们可以将原关系模式分解为两个关系模式:
这样的分解消除了传递依赖,同时减少了数据冗余。通过这种方式,数据库设计旨在平衡规范化的需要和系统性能之间的关系。
目标是提高数据库应用系统的性能。这通常涉及到对已经产生的关系模式进行修改、调整和重构。关键点在于,虽然规范化理论旨在减少数据冗余并提高数据的一致性,但在某些情况下,适当增加冗余可以显著提高数据库的查询效率和性能。
添加适当的冗余:
考虑查询频率和性能要求:
平衡规范化与性能:
以“班级”和“学生”关系的例子来说明。假设在规范化的数据库中,我们有以下两个关系模式:
在这种设计中,要计算每个班级的学生人数,需要通过对“学生”关系中的“班级号”进行计数。这种计算如果频繁进行,会导致性能问题。因此,可以通过在“班级”关系中添加一个“人数”属性来优化此模型:
这里的“学生人数”是一个冗余属性,因为它可以通过统计“学生”关系中相同“班级号”的记录数来计算得出。然而,这种冗余可以显著提高查询“每个班级的学生人数”的效率,因为不再需要每次都去统计“学生”关系。
在实际应用中,数据库设计师需要在保持数据一致性的前提下,对数据模型进行这样的优化,以提高数据库的整体性能。
设计外模式(也称为子模式或用户模式)是一个重要步骤。外模式是数据库系统中逻辑结构设计的一部分,它提供了数据与应用程序之间的独立性,并且是确保数据库安全性的关键机制。
实现数据与应用程序的独立性:
保护数据库的安全性:
定义外模式/模式映像:
用户友好的命名:
根据用户级别定义不同的外模式:
构造必要的外模式以简化操作:
通过这些策略,外模式成为实现数据独立性、维护安全性和简化用户操作的有效工具。在数据库系统中,外模式的设计是连接用户与底层数据的桥梁,它使得用户能够以更直观和安全的方式与数据库交互。