数据库模型设计案例分享(GaussDB版)

目录

一、前言

二、应用系统数据库设计的基本流程

三、数据库模型设计

1、概念结构设计阶段

2、逻辑结构设计阶段

3、物理结构设计阶段

四、小结

一、前言

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数据库有如下字段设置规范建议:

  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数据库平台上进行落地实验的,其逻辑与思路与大多少关系型数据库基本通用。

——结束 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21208.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单例模式:懒汉式和饿汉式

目录 懒汉模式和饿汉模式 区别 示例 懒汉模式线程不安全 懒汉模式线程安全 懒汉模式内部静态变量线程安全 饿汉式线程安全 指的是在系统生命周期内,只产生一个实例。 懒汉模式和饿汉模式 分为懒汉式和饿汉式 区别 创建时机和线程安全 线程安全&#xff1…

【bash:xxx:command not found问题,在英伟达nvidia的jetson-orin-nx上遇到的>>>解决方式之一】

【bash:xxx:command not found问题,在英伟达nvidia的jetson-orin-nx上遇到的>>>解决方式之一】 1、概述2、实验环境3、问题描述:bash:xxx:command not found问题4、我的努力第一种方式:加入指令方式第二种方式:使用echo $PATH命令查…

【Docker】docker基础使用

文章目录 docker概念什么是dockerdocker引擎迭代docker与虚拟机docker版本发展 docker基础docker架构docker Registry(镜像仓库)镜像仓库使用流程实际研发镜像仓库使用不同镜像仓库的拉取 docker常用命令镜像仓库命令docker logindocker pulldocker pushdocker searchdocker lo…

机器学习(12)--K-Means

目录 一、聚类 二、机器学习中的距离 三、sklearn中的聚类算法 四、KMeans簇内平方和和时间复杂度 五、sklearn中的KMeans 1、建立一个数据集 2、使用K-Means进行聚类操作 3、根据上面的模型绘散点图观察分类效果。 4、评估指标 4.1对于真实标签已知情况 4.2当真实标…

计算机网络基础

在介绍网络之前,先讲一个概念,一台计算机的内部本质也是一个小型网络结构,CPU、内存、外设都是通过线连接起来的,并且它们之前也有协议,一台计算机各个功能用多台计算机构建起来,用网络及链起来&#xff0c…

聊聊微服务 架构思想

用了好多年微服务架构了,我经常会反思,这个项目为啥用微服务?真的能帮我们解决一些痛点吗?这个项目有必要用微服务吗?这个项目体现出微服务的价值了吗? 我是从2017年开始入手微服务,距今已经五六…

Linux——权限

1.Linux权限的概念 Linux权限是指用于限制对文件和目录的访问的安全机制。文件和目录的权限由三个部分组成:所有者权限、同组用户权限和其他用户权限。每个部分又包括读、写、执行三种权限。这些权限决定了用户能否对文件或目录进行读、写、执行等操作。 2.Linux…

ETHERNET/IP转PROFIBUS-DP网关Profibus DP转EtherNet/IP协议转换网关

大家好,今天要给大家介绍一款非常神奇的通讯网关捷米特JM-DPM-EIP!这款产品可以将各种PROFIBUS-DP从站接入到ETHERNET/IP网络中,真是一款神奇的产品啊!你是否想过,如果没有这款产品,PROFIBUS-DP从站和ETHER…

【Linux后端服务器开发】进程控制与替换

目录 一、进程控制 1. 进程退出 2. 进程等待 2.1 阻塞等待 2.2 status位图结构 2.3 非阻塞等待 二、进程替换 1. exec*系列函数 2. 进程替换高级语言可执行程序 一、进程控制 1. 进程退出 进程退出会进入僵尸态,把自己的退出结果写入到自己的task_struct…

QT打开和保存文件对话框的操作笔记

QT打开和保存文件对话框的操作&#xff0c;需要先包含头文件QFileDialog&#xff0c;一般通过按钮实现打开和保存文件对话框的操作。 代码如下&#xff1a; #include <QDebug> #include <QFileDialog>void Form::on_pushButton_clicked() {QString fileName;fileN…

【尚医通】vue3+ts前端项目开发笔记 2 —— 创建项目、封装网络请求、集成elment-plus 、重置样式、准备状态管理/路由 等开发前准备

尚医通开发记录(Vue3TypeScriptPiniaAxios) 一、接口地址 服务器地址:http://syt.atguigu.cn 医院接口&#xff1a;http://139.198.34.216:8201/swagger-ui.html 公共数据接口&#xff1a;http://139.198.34.216:8202/swagger-ui.html 会员接口&#xff1a;http://139.198.34…

POI下载excel通用方法

POI下载excel通用方法 最近遇到一个业务是需要下载excel&#xff0c;使用POI,这里记录一下实现过程 1、导包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency>…