数据库模型设计案例分享(GaussDB版)
目录
一、前言
GaussDB数据库是一款企业级分布式数据库,支持集中式和分布式两种部署形态。它面向金融互联网交易和政企OA/办公等场景,具有安全可靠、超高性能、简单易用等优势。
在GaussDB中,数据建模是非常重要的一部分。数据建模是指根据业务需求和数据特点,将现实世界中的实体、属性、关系等概念抽象出来,并用一定的方式表示成计算机可以理解的形式。数据库模型设计的目的是为了建立一个能够满足业务需求的数据存储结构,使得数据的存储、查询、更新等操作更加高效、可靠、安全。
在GaussDB中,可以使用E-R图来进行数据建模,E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型,它可以帮助您更好地理解您的业务逻辑并将其转换为关系模型。
二、应用系统数据库设计的基本流程
应用系统数据库设计基本流程简图:
第一步:需求分析:主要包括数据、功能、性能等
第二步:数据库设计:主要包括概念结构设计、逻辑结构设计、物理结构设计等
第三步:数据库实施:选择数据库软件,并进行落地。
第四步:数据库系统运行、维护和优化。
其中数据库设计(Database Design)是E-R设计模型中的主要环节。
三、数据库模型设计
本节结合GaussDB数据库的相关知识点,以简单的订单模型举例来演示数据库模型的设计过程。
数据库模型设计主要分以下3个阶段:
1、概念结构设计阶段
概念数据模型(CDM)是按用户的观点来对数据和信息建模,其目标是统一业务概念,作为业务人员和技术人员之间沟通的桥梁,确定不同实体之间的最高层次的关系。其特征包括:
- 面向用户,反映用户的业务需求
- 抽象性强,不涉及具体实现细节
- 层次结构清晰,各层之间有一定的关系
- 可扩展性好,可以方便地添加新的实体和关系等。
所以这个阶段,我们主要完成从需求中抽象出示实体集和关系集。
示例系统:订单系统,实体(订单、客户、供应商、商品、地址)。
实体集之间关系集梳理:
1)客户与订单是一对多
2)客户与地址是一对一
3)供应商与地址是一对一
4)供应商与商品是一对多
5)订单与商品是一对多
如图, 确定不同实体之间的最高层次的关系:
2、逻辑结构设计阶段
逻辑数据模型(LDM)尽可能详细地描述数据, 逻辑数据模型的特征包括:
- 包括所有实体和它们之间的关系
- 指定了每个实体的所有属性
- 指定外键(标识不同实体之间关系的键)
- 关系表规范化等。
如图, 完善每个实体的属性:
3、物理结构设计阶段
物理数据模型(PDM)表示如何在数据库中构建模型。 物理数据库模型显示所有表结构,包括列名,列数据类型,列约束,主键,外键以及表之间的关系。物理数据模型的功能包括:
- 规范所有表和列
- 外键用于标识表之间的关系。
- 物理上的考虑可能导致物理数据模型与逻辑数据模型有差异
- 不同的RDBMS的物理数据模型将有所不同,例如MySQL和GaussDB之间列的数据类型可能有所不同。
- 目标是指定如何用数据库模式来实现逻辑数据模型,以及真正的保存数据。
如图,完成所有实体转换为表,转换所有关系集为相关表的外键,转换所有属性为列。
针对上面的物理数据模型设计时,GaussDB数据库有如下字段设置规范建议:
- 合理选用字符串数据类型。优先使用变长字符类VARCHAR。只有该字段输入确定为固定字符则使用定长字符类型,或需要自动补充空格,才使用CHAR(n)。
- 字符类型字段不应存储数字类型的数据。如果对存储在字符类型字段中的数据进行数值计算,或者与数值进行比较操作(如置于过滤条件中),会带来不必要的数据类型转换的开销,同时该字段上的索引可能失效,影响查询性能。
- 字符类型字段不应存储时间或日期类数据。如果对存储在字符类型字段中的数据与日期类数据进行计算或比较操作(如置于过滤条件中),会带来不必要的数据类型转换的开销,同时该字段上的索引可能失效,影响查询性能。
- 对于明确不存在NULL值的字段加上NOT NULL约束。对于NOT NULL字段,优化器在某些场景下会进行特殊优化,可较大提升查询性能。
- 相关联字段的数据类型应保持一致。在进行关联操作时,如果字段类型不一致,会带来数据类型转换开销。
- 大字段(例如varchar(1000)、varchar(4000))不建议超过8个。
- 字段定义时建议同时创建COMMENT注释信息,以便于未来维护。
- 不建议对表预留字段。大部分场景下可支持快速新增、删除表字段,或者修改字段的DEFAULT值。
- 尽量使用高效的数值类数据类型。在满足业务精度的情况下,选择的优先级从高到低依次为整数、浮点数、NUMERIC。
- 合理设置数值字段的数据类型,根据取值范围选择合适的数值类型,尽量少用NUMERIC/DECIMAL类型。NUMERIC和DECIMAL等价,NUMERIC(或DECIMAL)数据类型操作对CPU消耗较高。
数据库模型设计的三个主要阶段汇总如下:
- 概念数据模型设计阶段:实体、关系集
- 逻辑数据模型设计阶段:实体、关系集、属性、主键、外键
- 物理数据模型设计阶段:表、列名、列数据类型、主键、外键
四、小结
通常,数据建模是为了让查询更简单、更高效。在现实场景中,如果要想高效的使用好数据库,那么一个优秀的数据建模是必不可少的。数据模型是应用系统数据库设计的基础,而数据库则是数据模型实现的工具。本文建模后是在GaussDB数据库平台上进行落地实验的,其逻辑与思路与大多少关系型数据库基本通用。
——结束

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
共建基础软件基石,OpenCloudOS 社区开源实践分享
近日,红帽宣布了限制源代码访问性的政策,称RHEL相关源码仅通过CentOS Stream公开,付费客户和合作伙伴可通过Red Hat Customer Portal访问到源代码。也就是说,公开渠道不再提供RHEL的源码,只能获取CentOS Stream的源码,非客户获取源码就没有以前便利了。 这是继CentOS停服之后,红帽的又一大动作。消息一出,引发了许多人的担忧。事实上,有关红帽对CentOS相关代码发行方式的变更可以追溯到更早之前。CentOS是红帽发行的社区版Linux,其上游原本是红帽的企业发行版Linux系统RHEL (Red Hat Enterprise Linux),因此对使用者来说更加稳定。 在服务器生产环境中,CentOS占有率达到了90%,2021年国内存量400万台。 2020年12月份,CentOS官网正式宣布,将停止维护CentOS Linux,并将更多资金和人力投入到CentOS Stream中。而CentOS Stream则是在RHEL的上游,其稳定性自然不如CentOS。 CentOS停服带来了一系列的问题,如安全性风险,随着更新和补丁的停止,系...
- 下一篇
Spring容器获取Bean的9种方式 | 京东云技术团队
1 前言 随着SpringBoot的普及,Spring的使用也越来越广,在某些场景下,我们无法通过注解或配置的形式直接获取到某个Bean。比如,在某一些工具类、设计模式实现中需要使用到Spring容器管理的Bean,此时就需要直接获取到对应的Bean。 本文为大家整理汇总了常见的获取Bean的方式,并提供一些优劣分析,方便大家在使用到时有更好的选择。同时,也会为大家适当的普及和拓展一些相关知识。 2 Spring的IoC容器 在Spring中,Bean的实例化、定位、配置应用程序中的对象及建立对象间的依赖关系,都是在IoC容器中进行的。因此,要在Spring中获取Bean,本质上就是从IoC容器当中获取Bean。 在Spring中,BeanFactory是IoC容器的实际代表者,该接口提供了IoC容器最基本功能。同时,Spring还提供了另外一种类型的容器:ApplicationContext容器。 ApplicationContext容器包括BeanFactory容器的所有功能(BeanFactory的子接口),提供了更多面向应用的功能,它提供了国际化支持和框架事件体系,更易于创建实...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS8编译安装MySQL8.0.19
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Hadoop3单机部署,实现最简伪集群
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址