三、数据库模型设计
本节结合GaussDB数据库的相关知识点,以简单的订单模型举例来演示数据库模型的设计过程。
数据库模型设计主要分以下3个阶段:
1、概念结构设计阶段
概念数据模型(CDM)是按用户的观点来对数据和信息建模,其目标是统一业务概念,作为业务人员和技术人员之间沟通的桥梁,确定不同实体之间的最高层次的关系。其特征包括:
• 面向用户,反映用户的业务需求
• 抽象性强,不涉及具体实现细节
• 层次结构清晰,各层之间有一定的关系
• 可扩展性好,可以方便地添加新的实体和关系等。
所以这个阶段,我们主要完成从需求中抽象出示实体集和关系集。
示例系统:订单系统,实体(订单、客户、供应商、商品、地址)。
实体集之间关系集梳理:
1)客户与订单是一对多
2)客户与地址是一对一
3)供应商与地址是一对一
4)供应商与商品是一对多
5)订单与商品是一对多
如图, 确定不同实体之间的最高层次的关系:

2、逻辑结构设计阶段
逻辑数据模型(LDM)尽可能详细地描述数据, 逻辑数据模型的特征包括:
• 包括所有实体和它们之间的关系
• 指定了每个实体的所有属性
• 指定外键(标识不同实体之间关系的键)
• 关系表规范化等。
如图, 完善每个实体的属性:

3、物理结构设计阶段
物理数据模型(PDM)表示如何在数据库中构建模型。 物理数据库模型显示所有表结构,包括列名,列数据类型,列约束,主键,外键以及表之间的关系。物理数据模型的功能包括:
• 规范所有表和列
• 外键用于标识表之间的关系。
• 物理上的考虑可能导致物理数据模型与逻辑数据模型有差异
• 不同的RDBMS的物理数据模型将有所不同,例如MySQL和GaussDB之间列的数据类型可能有所不同。
• 目标是指定如何用数据库模式来实现逻辑数据模型,以及真正的保存数据。
如图,完成所有实体转换为表,转换所有关系集为相关表的外键,转换所有属性为列。

针对上面的物理数据模型设计时,GaussDB数据库有如下字段设置规范建议:
1) 合理选用字符串数据类型。优先使用变长字符类VARCHAR。只有该字段输入确定为固定字符则使用定长字符类型,或需要自动补充空格,才使用CHAR(n)。
2) 字符类型字段不应存储数字类型的数据。如果对存储在字符类型字段中的数据进行数值计算,或者与数值进行比较操作(如置于过滤条件中),会带来不必要的数据类型转换的开销,同时该字段上的索引可能失效,影响查询性能。
3) 字符类型字段不应存储时间或日期类数据。如果对存储在字符类型字段中的数据与日期类数据进行计算或比较操作(如置于过滤条件中),会带来不必要的数据类型转换的开销,同时该字段上的索引可能失效,影响查询性能。
4) 对于明确不存在NULL值的字段加上NOT NULL约束。对于NOT NULL字段,优化器在某些场景下会进行特殊优化,可较大提升查询性能。
5) 相关联字段的数据类型应保持一致。在进行关联操作时,如果字段类型不一致,会带来数据类型转换开销。
6) 大字段(例如varchar(1000)、varchar(4000))不建议超过8个。
7) 字段定义时建议同时创建COMMENT注释信息,以便于未来维护。
8) 不建议对表预留字段。大部分场景下可支持快速新增、删除表字段,或者修改字段的DEFAULT值。
9) 尽量使用高效的数值类数据类型。在满足业务精度的情况下,选择的优先级从高到低依次为整数、浮点数、NUMERIC。
10) 合理设置数值字段的数据类型,根据取值范围选择合适的数值类型,尽量少用NUMERIC/DECIMAL类型。NUMERIC和DECIMAL等价,NUMERIC(或DECIMAL)数据类型操作对CPU消耗较高。
数据库模型设计的三个主要阶段汇总如下:
• 概念数据模型设计阶段:实体、关系集
• 逻辑数据模型设计阶段:实体、关系集、属性、主键、外键
• 物理数据模型设计阶段:表、列名、列数据类型、主键、外键
四、小结
通常,数据建模是为了让查询更简单、更高效。在现实场景中,如果要想高效的使用好数据库,那么一个优秀的数据建模是必不可少的。数据模型是应用系统数据库设计的基础,而数据库则是数据模型实现的工具。本文建模后是在GaussDB数据库平台上进行落地实验的,其逻辑与思路与大多少关系型数据库基本通用。
——结束




