1 引言
在数据库设计和管理的领域中,数据模型是不可或缺的核心概念。它为我们提供了一种描述、组织和存储数据的方式。它不仅帮助我们理解和组织信息,还对数据库的设计和使用产生重要影响。本文将介绍数据模型的基本分类、组成要素以及几种常见的数据模型。
2 三大类数据模型
数据模型按抽象程度上由高到低依次是概念数据模型(Concept Data Model,CDM)、逻辑数据模型(Logical Data Model,LDM),和物理数据模型(Physical Data Model,PDM)。
低抽象程度的数据模型是在高抽象程度的数据模型基础之上的具体内容细化,提供了更丰富的数据需求信息。其中,概念数据模型和逻辑数据模型是需求分析活动的产物,而物理数据模型是技术产品设计的产物。

2.1 概念模型(Conceptual Data Model)
概念模型是一种面向用户、面向客观世界的模型,主要用来描述世界的概念化结构,也称信息模型。它是数据库设计人员在设计的初始阶段,摆脱计算机系统及数据库管理系统(DBMS)的具体技术问题,集中精力分析数据以及数据之间的联系等。概念模型与具体的数据库管理系统无关,它强调语义表达能力,概念简单、清晰,易于用户理解。
概念模型对应于企业的业务架构,指导IT项目的需求梳理和技术方案设计。在概念数据模型中需要指定一系列相关主题域以及主题域涉及的关键业务实体。
概念模型是通过分析具体形象找出共同点,用一个概念表示,并用文字和符号强调对象主要特点和关系的模型。以下是对概念模型的详细阐述:
2.1.1 信息世界的基本概念
实体(Entity):客观存在并可相互区别的事物称为实体。实体可以是具体的人、事、物,如学生、汽车;也可以是抽象的对象,如一条飞行航线、一个学生、一门课、学生的一次选课等;还可以是联系,如教师和学院的工作关系、学生和课程的选择关系等都是实体。
属性(Attribute):实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画,如学生的姓名、学号、性别、出生日期、所在班级、入学时间等属性组成。
码(Key):唯一标识实体的属性组合称为码。例如,学生的学号可以唯一标识一个学生,因此学号可以作为学生的码。
域(Domain):域是一组具有相同数据类型的值的集合。属性的取值范围称为该属性的域。例如,性别的域可以是{男,女},学生年龄的域为整数,姓名的域为字符串集合。
实体集(Entity Set):同一类型实体的集合称为实体集。例如,“学生”就是一个实体集,它包含了所有具有“学生”这一实体型的实体。
联系(Relationship):信息世界中反映实体内部或实体之间的关联。实体内部的联系通常是指组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系。
2.1.2 实体型之间的联系
1、一对一联系(1:1):如果实体集A中的每一个实体至多只与实体集B中的一个实体相联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1。
图1 1:1联系
例如,一个班级有一个班长,一个班长只负责一个班级,则班级与班长之间具有一对一联系。
2、一对多联系(1:n):如果实体集A中的每一个实体可以与实体集B中的多个实体相联系,而实体集B中的每一个实体至多只与实体集A中的一个实体相联系,则称实体集A与实体集B具有一对多联系,记为1:n。
图2 1:n 联系
例如,一个系有多个教研室,而一个教研室只属于一个系,则系与教研室之间具有一对多联系。
3、多对多联系(m:n):如果实体集A中的每一个实体可以与实体集B中的多个实体相联系,反之亦然,则称实体集A与实体集B具有多对多联系,记为m:n。
图3 m:n 联系
例如,一个学生可以选修多门课程,一门课程也可以被多个学生选修,则学生与课程之间具有多对多联系。
2.1.3 两个以上的实体型之间的联系
两个以上的实体型之间也存在着一对一、一对多和多对多联系。
例如,在供应商、项目、零件三个实体型之间,一个供应商可以供给多个项目多种零件,每个项目可以使用多个供应商供应的零件,每种零件可由不同供应商供给,因此它们之间是多对多的联系。
图4 3个实体之间的联系示例
2.1.4 单个实体型内的联系
在同一个实体集内的各实体之间也可以存在一对一、一对多和多对多的联系。
例如,在学生实体集内,班长自身也是学生,某一学生(班长)管理若干名学生,而一个学生仅被一个班长所管,这种联系是一对多的联系。
图5 单个实体之间的一对多联系示例
2.1.5 概念模型的一种表示方法:实体-联系方法
实体-联系方法(也称为E-R图)是描述现实世界概念模型的一种常用方法。E-R图提供了表示实体类型、属性和联系的方法。在E-R图中:
- 实体:用矩形框表示,框中记入实体名。例如,学生、教师、班级、课程等都可以用矩形框来表示。
- 属性:用椭圆形框表示,框中记入属性名。属性与相应的实体之间用无向边相连。例如,学生的姓名、学号、性别等都是属性,它们与“学生”这个实体相连。
- 联系:用菱形框表示,框中记入联系名。联系与有关的实体之间也用无向边相连,并在无向边旁标上联系的类型(1:1、1:n或m:n)。例如,教师与学生之间存在授课关系,这种关系可以用菱形框来表示,并标上“授课”这个联系名以及1:n这个联系类型。
例如:以学实体生为例,其实体具有学号、姓名、性别、出生年月、班级、入学日期等属性,用E-R图表示如下图:
图6 学生实体及其属性
2.1.6 实例
以学校为例,可以构建一个包含教师、学生、班级、课程等实体的概念模型。在这个模型中:
- 教师实体具有姓名、性别、年龄、职称等属性。
- 学生实体具有学号、姓名、性别、年龄、班级等属性。
- 班级实体具有班级号、班级名称、班主任等属性。
- 课程实体具有课程号、课程名称、任课教师等属性。
这些实体之间存在多种联系:
- 教师与学生之间存在授课关系(一对多联系)。
- 学生与班级之间存在归属关系(一对多联系,一个班级包含多个学生)。
- 学生与课程之间存在选修关系(多对多联系,一个学生可以选修多门课程,一门课程也可以被多个学生选修)。
下图是概念模型的ER图:
图7 学生-教师概念数据模型
2.2 逻辑模型(Logical Data Model)
逻辑模型是一种面向数据库系统的模型,是具体的DBMS所支持的数据模型。逻辑模型既要面向用户,又要面向系统,主要用于数据库管理系统的实现。逻辑模型是对概念模型的进一步细化,它描述了实现概念模型所描述的东西需要哪些具体的功能,处理哪些具体的信息。
逻辑模型对应于企业的应用架构。
逻辑模型在概念数据模型基础之上添加了属性要素,对业务活动、业务逻辑、业务规则进行了更加清晰明确的定义,为业务需求提供明确的定义和表示。
逻辑模型主要包含层次模型、网状模型、关系模型、面向对象模型和对象关系模型等,它是按照计算机系统的观点对数据建模,主要用于DBMS的实现。是数据结构的高层次抽象,它描述数据的逻辑结构,关注数据实体、属性和关系。以下是对逻辑模型的详细阐述:
2.2.1 定义与特点
-
定义:逻辑模型是严格定义的一组概念的集合,主要由数据结构、数据操作和完整性约束部分组成,通常称为数据三要素。它描述了数据的逻辑结构,而不关心具体的实现细节。
-
特点:
- 业务导向性:逻辑模型从业务角度出发,描述了数据的意义、结构和关系,使得所有相关方都能对数据结构有一个共同的理解。
- 独立性:逻辑模型相对独立于具体的数据库管理系统(DBMS)或存储介质,追求数据的一致性和标准化,避免数据冗余和不一致性。
- 细节性:逻辑模型详细描述了数据的逻辑结构和各种约束,包括表、列、数据类型、索引等元素,以及主键、外键、唯一性约束、检查约束等。
- 标准化:逻辑模型通过标准化的数据结构和关系描述,为后续的数据处理和分析提供了坚实的基础。
2.2.2 组成要素
逻辑模型主要由以下三个要素组成:
- 数据结构:是计算机数据组织方式和数据之间联系的框架描述,而数据文件的数据就按照这种框架描述进行组织。数据结构是所描述对象类型的集合,是对系统的静态描述。
- 数据操作:是指对数据库中各种对象的实例或取值所允许执行操作的集合,其中包括操作方法及有关规则,它是对数据库动态特性的描述。
- 完整性约束:是指对数据的一组完整性规则(约束条件)的集合。逻辑模型应该反映和规定本数据模型必须遵守的基本的通用的完整性约束条件。
2.2.3 类型
逻辑模型可以根据不同的应用需求和场景进行分类,常见的逻辑模型包括:
- 层次模型:是一种树形结构,它表示数据元素之间的层次关系。在层次模型中,每个数据元素都有一个父元素和若干个子元素,这种结构使得数据的层次关系非常清晰。然而,层次模型在表示复杂关系时可能存在局限性。1)有一个节点没有父节点,这个节点即根节点。
2)其他节点有且仅有一个父节点。缺点:不能直接表示多对多的实体联系,必须分解为几个一对多的联系才能表示出来。(被淘汰,现少用) - 网状模型:是一种更为复杂的结构,它允许数据元素之间存在多种关系。这种模型能够更灵活地表示数据之间的关系,但在管理和维护方面可能相对困难。1)可以有一个以上的节点无父节点。2)至少有一个节点有多于一个的父节点。(被淘汰,现少用)
- 关系模型:是目前应用最广泛的逻辑模型之一。它基于表格的形式来表示数据,每个表格代表一个实体,表格中的列代表实体的属性,而行则代表实体的实例。关系模型具有结构简单、易于理解和维护等优点,因此被广泛应用于数据库设计和数据分析领域。
2.2.4 构建步骤
构建逻辑模型是一个系统而有序的过程,通常包括以下几个步骤:
- 需求分析:明确业务需求,了解数据的来源、用途以及需要解决的问题。这是构建逻辑模型的基础,也是确保模型正确性和有效性的关键。
- 确定实体和属性:实体是指数据库中存储的具体对象,属性是实体的特征或性质。在构建逻辑模型时,需要确定所有的实体和它们的属性。
- 确定关系:关系是连接不同实体的桥梁,它描述了实体之间的相互作用和依赖关系。在定义关系时,需要明确关系的类型(如一对一、一对多或多对多)以及关系的约束条件(如主键、外键等)。
- 可视化展示:使用适当的工具或方法来可视化展示逻辑模型。ER图(实体-关系图)是一种常用的可视化工具,它能够直观地展示实体、属性和关系之间的结构和联系。
2.2.5 实例
以学校为例,可以构建一个包含教师、学生、班级、课程等实体的概念模型。在这个模型中:
- 教师实体具有姓名、性别、年龄、职称等属性。
- 学生实体具有学号、姓名、性别、年龄、班级等属性。
- 班级实体具有班级号、班级名称、班主任等属性。
- 课程实体具有课程号、课程名称、任课教师等属性。
这些实体之间存在多种联系:
- 教师与学生之间存在授课关系(一对多联系)。
- 学生与班级之间存在归属关系(一对多联系,一个班级包含多个学生)。
- 学生与课程之间存在选修关系(多对多联系,一个学生可以选修多门课程,一门课程也可以被多个学生选修)。
下图是逻辑模型的ER图:
图8 学生-教师逻辑数据模型
2.3 物理模型(Physical Data Model)
物理模型是一种面向计算机物理表示的模型,描述了数据在存储介质上的组织结构。它不但与具体的DBMS有关,而且还与操作系统和硬件有关。物理模型是对真实数据库的描述,如关系数据库中的一些对象为表、视图、字段、数据类型、长度、主键、外键、索引、约束等。
物理模型是针对逻辑模型的进一步细化,属于基于给定需求的设计阶段产物。
针对同一逻辑数据模型,在不同的技术环境和产品需求下,可以存在不同的物理模型实现方式。从数字化架构的角度上来说,物理数据模型对应于企业的技术架构。
物理模型是对真实数据库的描述。
如关系数据库中的一些对象为表、视图、字段、数据类型、长度、主键、外键、索引、约束、是否可为空、默认值。需要在具体的物理介质上实现出来,如下:
- 确定业务属性如何转换成数据库形式:类型,字段集,表;
- 确定实体和实体间的关系如何转换成数据库的表,主键,外键;
- 确定数据库表字段的其他数据库特性:默认值,是否非空,触发器;
- 确定数据库表中除业务需要之外需要冗余的字段以及是否需要其他数据库表;
2.3.1 定义与特点
物理数据模型定义了数据的存储结构、索引、存储过程、触发器以及数据访问路径等。它关注于数据在数据库中的物理表示,包括数据的布局、存储方式和访问方法。物理数据模型基于逻辑数据模型(LDM),并考虑了具体的数据库管理系统(DBMS)的特性和性能要求。
2.3.2 组成部分
物理数据模型描述了数据库的结构,并提供了数据库模式的详细视图。它主要包括以下几个部分:
- 表结构(Table Structure):定义了表的列、数据类型、长度等属性。这是数据库中最基本的存储单元,用于存储数据。
- 索引(Index):用于优化查询性能的数据结构,如B树索引、哈希索引等。索引可以加快数据的检索速度,但也会增加数据库的存储和维护成本。
- 存储引擎(Storage Engine):定义了数据的存储和访问方式,如InnoDB、MyISAM等。不同的存储引擎具有不同的性能和特性,适用于不同的应用场景。
- 分区(Partitioning):将大型表或索引分割成更小的、更易于管理的部分。分区可以提高数据库的性能和可扩展性,尤其是在处理大量数据时。
- 视图(View):一种虚拟表,其内容由查询定义。视图可以简化复杂查询,提高数据访问的灵活性和安全性。
- 存储过程(Stored Procedure):一组为了执行一个或多个SQL语句而预编译的代码。存储过程可以提高数据库的性能和安全性,减少网络传输开销。
- 触发器(Trigger):一种特殊的存储过程,它在特定数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器可以用于实现复杂的业务逻辑和数据完整性约束。
2.3.3 设计考虑因素
在设计物理数据模型时,需要考虑以下因素以确保数据库的性能、可扩展性、可维护性和安全性:
- 性能(Performance):确保查询和事务处理的性能。这包括优化索引、查询和存储过程等。
- 存储效率(Storage Efficiency):优化存储空间的使用。通过合理的表结构设计和数据类型选择,可以减少不必要的存储空间浪费。
- 可扩展性(Scalability):随着数据量的增长,数据库应能够扩展。这包括分区策略、存储引擎选择等。
- 可维护性(Maintainability):确保数据库的维护和更新简单易行。这包括合理的数据库设计、文档化和自动化工具的使用等。
- 安全性(Security):保护数据免受未授权访问。这包括访问控制、加密和审计等安全措施的实施。
2.3.4 设计步骤
设计物理数据模型通常包括以下步骤:
- 逻辑模型转换:从逻辑数据模型开始,考虑特定DBMS的特性。这包括将逻辑模型中的实体、属性和关系转换为物理模型中的表、列和关系等。
- 表和索引设计:确定表结构和索引策略。这包括选择适当的数据类型、长度和约束条件,以及设计有效的索引以优化查询性能。
- 存储引擎选择:根据性能和存储需求选择合适的存储引擎。不同的存储引擎具有不同的特性和性能,适用于不同的应用场景。
- 分区策略:设计分区策略以优化大型表的管理。分区可以提高数据库的性能和可扩展性,尤其是在处理大量数据时。
- 视图和存储过程:创建视图和存储过程以简化数据访问和操作。视图可以简化复杂查询,提高数据访问的灵活性和安全性;存储过程可以提高数据库的性能和安全性,减少网络传输开销。
- 性能优化:通过调整索引、查询优化等手段提高性能。这包括分析查询性能、识别瓶颈并实施优化措施。
- 安全性配置:实施访问控制和加密等安全措施以保护数据免受未授权访问。
2.3.5 实例
以学校为例,可以构建一个包含教师、学生、班级、课程等实体的概念模型。在这个模型中:
- 教师实体具有姓名、性别、年龄、职称等属性。
- 学生实体具有学号、姓名、性别、年龄、班级等属性。
- 班级实体具有班级号、班级名称、班主任等属性。
- 课程实体具有课程号、课程名称、任课教师等属性。
这些实体之间存在多种联系:
- 教师与学生之间存在授课关系(一对多联系)。
- 学生与班级之间存在归属关系(一对多联系,一个班级包含多个学生)。
- 学生与课程之间存在选修关系(多对多联系,一个学生可以选修多门课程,一门课程也可以被多个学生选修)。
下图是物理模型的ER图,基本和逻辑模型的ER图是一致的。
图9 学生-教师物理数据模型
3 数据模型的组成要素
数据模型是数据库系统的核心组成部分,它定义了数据的存储方式、操作规则以及数据之间的约束关系。从数据结构、数据操作、数据的完整性约束条件这三个方面来阐述数据模型的组成要素,我们可以更深入地理解数据模型的功能和作用。
3.1 数据结构
数据结构是数据模型的基础,它描述了数据库中数据的组织方式和存储形式。数据结构描述的是数据库的组成对象以及对象之间的联系。它主要包括两类描述内容:
- 一类是与对象的类型、内容、性质有关的描述,例如,在网状模型中,数据项、记录是描述对象;在关系模型中,域、属性、关系是描述对象。
- 另一类是与数据之间联系有关的描述,例如网状模型中的系型。
数据结构也可以看作所描述的对象类型的集合,它描述的是系统的静态特性。在数据模型中,数据结构通常包括以下几个方面:
-
数据类型:定义了数据的基本属性,如整数、浮点数、字符串、日期等。这些数据类型决定了数据在存储和计算时的行为。
-
数据对象:在数据模型中,数据对象可以是表、视图、索引等。表是存储数据的主要结构,视图是基于表或视图的一种虚拟表,索引用于提高查询性能。
-
数据关系:描述了数据对象之间的联系。在关系型数据模型中,这种关系通常通过外键、主键等约束来实现。
数据结构的设计直接影响到数据库的存储效率和查询性能。合理的数据结构可以使得数据访问更加高效,减少不必要的存储开销。
3.2 数据操作
数据操作是数据模型的核心功能之一,它定义了用户可以对数据进行哪些操作。在数据模型中,数据操作通常包括以下几个方面:
-
查询操作:用于从数据库中检索数据。查询操作可以根据用户的需要返回符合条件的数据集。
-
更新操作:包括插入、删除和修改数据。这些操作允许用户向数据库中添加新数据、删除不再需要的数据或更新现有数据。
-
事务处理:事务是一组要么全做、要么全不做的操作序列。数据模型需要支持事务处理,以确保数据的一致性和完整性。
数据操作的设计需要考虑到数据的安全性、一致性和性能。通过合理的操作设计,可以确保数据在操作过程中不会被破坏或丢失。
3.3 数据的完整性约束条件
数据的完整性约束条件是数据模型的重要组成部分,它定义了数据在存储和操作过程中必须遵守的规则。在数据模型中,数据的完整性约束条件通常包括以下几个方面:
-
实体完整性:确保每个实体都有唯一的标识。在关系型数据模型中,这通常通过主键约束来实现。若属性A是基本关系R的主属性,则属性A不能取空值。实体完整性规则是针对基本关系而言的,一个基本表通常对应现实世界的一个实体集。现实世界中的实体具有唯一性标识,在关系模型中以主码作为唯一性标识,主码中的属性即主属性不能取空值。
-
参照完整性:确保外键引用的数据是存在的。这可以防止出现孤立的记录或不一致的数据。关系间可能存在引用,例如,学生关系中,“学号”是主码,“班长”是外码,它引用了本关系的“学号”,则“班长”必须是确实存在的学生的学号。若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应,则对于R中每个元组在F上的值必须为:取空值或等于S中某个元组的主码值。
-
用户定义的完整性:根据具体业务需求定义的约束条件。这些约束条件可以是数据范围、数据格式、数据之间的关系等。这是针对某一具体关系数据库的约束条件,它反映了某一具体应用所涉及的数据必须满足的语义要求。关系模型应提供定义和检验这类完整性的机制。
数据的完整性约束条件的设计是确保数据质量的关键。通过严格的约束条件,可以防止数据出现错误或不一致的情况,从而提高数据的可靠性和可用性。
数据结构、数据操作和数据的完整性约束条件是数据模型的三个核心组成要素。它们共同构成了数据模型的基础框架,为数据库系统的设计和实现提供了有力的支持。在实际应用中,我们需要根据具体业务需求和数据特点来选择合适的数据模型,并合理设计这三个组成要素以满足系统的性能、可靠性和可扩展性等要求。
4 最常用的数据模型
4.1 关系模型
关系模型是现代数据库系统中最常见和最广泛使用的一种模型。它使用表格(即关系)来表示数据和数据之间的关系,每个表格由行和列组成,行代表记录,列代表字段。关系模型具有结构简单、易于理解、查询语言简单等优点,被广泛用于传统数据库系统中。
- 结构:基于表结构,表由行和列组成,行代表记录,列代表属性。
- 特点:简单易用,支持复杂查询,数据独立性高。
- 缺点:性能在大数据量时可能下降。
- 应用:现代数据库系统,如MySQL、Oracle。
关系模型的三个要素包括:
- 基本结构(Relation/Table):即数据表,用于存储数据。
- 基本操作(Relation Operator):包括数据查询、插入、更新和删除等操作。
- 完整性约束:包括实体完整性、参照完整性和用户自定义的完整性,用于确保数据的准确性和一致性。
图10 关系模型
4.2 NoSQL数据模型
NoSQL(Not Only SQL)数据模型是一
类不使用传统关系模型的数据库系统。它设计更加灵活,通常可以存储结构化、半结构化和非结构化数据。NoSQL数据库具有高扩展性、灵活的数据模型、高可用性和容错性、高性能等特点,广泛应用于大数据存储、实时数据处理等领域。常见的NoSQL数据模型包括:
4.2.1 键值存储
通过键值对来存储数据,查询效率高,适用于需要快速访问和更新的场景。
- 结构:简单的键值对存储,键唯一标识值。
- 特点:高效,适合简单查询。
- 缺点:不支持复杂查询。
- 应用:缓存系统,如Redis、Memcached。
图11 键值模型
4.2.2 文档存储
以文档形式存储数据,每个文档包含多个字段和值,适用于需要存储复杂数据结构的场景。
- 结构:存储半结构化数据,如JSON、XML文档。
- 特点:灵活,适合非结构化或半结构化数据。
- 缺点:复杂查询效率较低。
- 应用:NoSQL数据库,如MongoDB、CouchDB。
图12 文档模型
4.2.3 列族存储
将数据按列存储,适用于需要大规模并行处理和分析的场景。
- 结构:按列族存储数据,适合大规模分布式系统。
- 特点:高效处理大规模数据,适合分布式存储。
- 缺点:复杂查询效率低。
- 应用:分布式数据库,如HBase、Cassandra。
图13 列族模型
4.2.4 图数据库
以图结构表示数据实体及其关系,支持复杂关系的查询和分析,适用于社交网络分析、推荐系统等场景。
- 结构:基于图结构,节点表示实体,边表示关系。
- 特点:适合复杂关系分析,如社交网络。
- 缺点:大规模数据处理复杂。
- 应用:图数据库,如Neo4j、ArangoDB。
图14 图模型
4.3 层次模型
层次模型将数据组织成一对多关系的结构,层次结构采用关键字来访问其中每一层次的每一部分。层次模型发展最早,它以树结构为基本结构,典型代表是IMS模型。层次模型的优点是存取方便且速度快、结构清晰、容易理解、数据修改和数据库扩展容易实现、检索关键属性十分方便。然而,它在处理多对多关系时存在一定的局限性。
- 结构:树形结构,节点代表实体,边表示关系。
- 特点:简单直观,适合一对多关系。
- 缺点:难以处理多对多关系,数据冗余较多。
- 应用:早期文件系统、目录结构。
图15 层次模型
4.4 网状模型
网状模型用连接指令或指针来确定数据间的显式连接关系,是具有多对多类型的数据组织方式。网状数据模型通过网状结构表示数据间联系,开发较早且有一定优点,目前使用仍较多,典型代表是DBTG模型。网状模型的优点是能明确而方便地表示数据间的复杂关系。但是,它的设计和查询可能比较复杂。
- 结构:图形结构,允许节点间多对多关系。
- 特点:比层次模型灵活,能处理复杂关系。
- 缺点:结构复杂,维护难度大。
- 应用:早期数据库系统,如IDMS。
图16 网状模型
4.5 其他常用数据模型
除了上述几种数据模型外,还有一些其他常用的数据模型,如:
4.5.1 星型模型(Star Schema)
数据仓库中用于OLAP(联机分析处理)应用的一种专用数据模型。其特点是中央事实表包含可测量的定量数据,周围是维度表,包含与事实数据相关的描述性属性。该模型针对分析应用中的查询性能进行了优化。
图17 星型模型
4.5.1.1 结构
-
中心表(事实表):存储业务过程的度量值(如销售额、数量等),是星型模型的核心。
-
维度表:围绕事实表,存储描述性属性(如时间、地点、产品等),用于过滤和分组查询。
-
关系:事实表与每个维度表通过外键直接关联,形成星型结构。
4.5.1.2 特点
-
简单性:结构清晰,易于理解和设计。
-
查询性能高:由于维度表直接与事实表关联,查询时连接操作较少,性能较高。
-
数据冗余:维度表可能包含冗余数据(如重复的维度属性),但提高了查询效率。
-
适合场景:适用于大多数数据仓库和OLAP(联机分析处理)系统。
4.5.1.3 示例
-
事实表:销售事实表(Sales_Fact),包含销售金额、数量等度量值。
-
维度表:
-
时间维度表(Time_Dim):年、月、日等。
-
产品维度表(Product_Dim):产品名称、类别等。
-
客户维度表(Customer_Dim):客户姓名、地区等。
-
4.5.1.4 优点
-
查询性能高。
-
设计简单,易于维护。
-
适合大多数分析场景。
4.5.1.5 缺点
-
维度表可能存在数据冗余。
-
对复杂业务场景的支持有限。
4.5.2 雪花模型(Snowflake Schema)
星型模型的一种变体,在这种模式中,维度表被规范化为多个相关表,从而减少了冗余并提高了数据完整性。这样就形成了类似雪花的结构。
图18 雪花模型
4.5.2.1 结构
-
中心表(事实表):与星型模型相同,存储业务过程的度量值。
-
维度表:维度表被规范化,拆分为多个相关的表,形成层次结构。
-
关系:事实表与维度表通过外键关联,维度表之间也可能存在关联,形成类似雪花的复杂结构。
4.5.2.2 特点
-
规范化设计:维度表被拆分为多个表,减少了数据冗余。
-
复杂性:结构比星型模型复杂,查询时需要更多的连接操作。
-
存储效率高:由于规范化设计,存储空间占用较少。
-
适合场景:适用于对数据规范化要求较高的场景,或维度表数据量较大的情况。
4.5.2.3 示例
-
事实表:销售事实表(Sales_Fact),包含销售金额、数量等度量值。
-
维度表:
-
时间维度表(Time_Dim):年、月、日等。
-
产品维度表(Product_Dim):产品ID、名称等。
-
产品类别表(Product_Category):产品类别ID、类别名称(与Product_Dim关联)。
-
客户维度表(Customer_Dim):客户ID、姓名等。
-
客户地区表(Customer_Region):地区ID、地区名称(与Customer_Dim关联)。
-
4.5.2.4 优点
-
数据冗余少,存储效率高。
-
适合复杂业务场景。
-
规范化设计便于维护。
4.5.2.5 缺点
-
查询性能较低(需要更多的连接操作)。
-
设计复杂,开发和维护成本较高。
4.5.3 星型模型 vs 雪花模型
4.5.4 如何选择?
-
选择星型模型:
-
需要高性能查询。
-
数据仓库设计简单。
-
维度表数据量较小,冗余可接受。
-
-
选择雪花模型:
-
需要减少数据冗余。
-
维度表数据量较大。
-
业务场景复杂,需要规范化设计。
-
在实际应用中,星型模型更为常见,因为它在性能和设计复杂度之间取得了较好的平衡。雪花模型则更适合对数据规范化要求较高的场景。