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

news2024/11/15 19:46:16

目录

一、前言

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

三、数据库模型设计

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.coloradmin.cn/o/683093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试官:说下简历中提到的优化……

作者:张力尹 先来点废话: 听说最近 Android 岗位变多了,你去面试了么? 面试官:你简历中提到了卡顿优化,做了哪些优化呢,展开说说。 你:哦,脑子飞速闪过网上的文章&#x…

Python模块pytest全局初始化和局部初始化前置后置操作

在 pytest 中,我们可以通过 conftest.py 文件来实现全局的前置和后置操作。 conftest.py 文件是一个特殊的 pytest 文件,它可以定义一些 fixture 和钩子函数,这些 fixture 和钩子函数可以在当前目录及其子目录下的所有测试文件中使用。 下面…

VR全景如何制作,可以用在哪些领域?

引言: 虚拟现实(VR)全景制作正在以惊人的速度改变着我们的感官体验。通过VR全景技术,我们可以身临其境地探索虚拟世界,感受前所未有的沉浸式体验。 一.如何进行VR全景制作 1.什么是VR全景制作&#xff1f…

【雕爷学编程】Arduino动手做(127)---2004A LCD液晶屏模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

【状态估计】基于卡尔曼滤波器和扩展卡尔曼滤波器用于 INS/GNSS 导航、目标跟踪和地形参考导航研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

计算机网络——自顶向下方法(第五章学习记录)

本章学习网络层:控制平面 控制平面作为一种网络范围的逻辑,不仅控制沿着从源主机到目的主机的端到端路径间路由器如何转发数据报,而且控制网络层组件和服务如何配置和管理。 概述 通过前面的学习,我们已经知道转发表&#xff0…

Android使用echart展示图表

Android使用echart展示酷炫的图表 最近开发的时候,遇到了柱状图,刻度图等各种图表的展示。查资料发现,Android用的的最多的是MPAndroidChart,我也尝试了,一般的柱状图和饼状图都可以实现,但是刻度图就不行…

【复习《剑指Offer》1-5题】【每天40分钟,我们一起用50天刷完 (剑指Offer)】第六天 6/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

第二章:项目环境搭建【基于Servlet+JSP的图书管理系统】

环境搭建 1.项目工具 本项目涉及到的工具都有在云盘提供,自行下载即可 JDK8IDEA2021Tomcat8.5MySQL的客户端工具SQLYog… 2.项目搭建 通过IDEA创建maven项目。勾选脚手架工具。选择maven-archetype-webapp 设置项目的基础信息 3.基本配置 3.1 JDK配置 JDK使用的…

前端Vue自定义服务说明弹窗弹框 自下而上底部弹框

前端Vue自定义服务说明弹窗弹框 自下而上底部弹框&#xff0c; 请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13108 效果图如下&#xff1a; # cc-serviceDialog 自定义服务说明弹窗 自下而上 底部弹窗 #### 使用方法 使用方法 <!-- 服务…

开发吐槽,谁说测试是二等公民,我们才是好吧

很多测试都认为自己是团队中的二等公民&#xff0c;从而各种看衰作贱自己。 这不&#xff0c;昨天在知乎上就看到一篇帖子&#xff1a;一女测试在团队中各种嘲讽自己的测试团队&#xff0c;“测试是低人一等的职业”&#xff0c;时刻劝说大家转开发。最后团队领导受不了&#…

机器学习:简介与类型

从翻译应用、商品推荐、医疗诊断到自动驾驶汽车&#xff0c;机器学习 (ML) 作为一种技术&#xff0c;都有用武之地。机器学习提供了一种解决问题、回答复杂问题以及创建新内容的新方式。机器学习可以预测天气、估算行程时间、推荐歌曲、自动补全句子、汇总文章以及生成全新的图…

【数据结构】串的基本定义及操作

&#x1f387;[数据结构]串的基本定义及操作&#x1f387; &#x1f308;积薪高于山&#xff0c;焉用先后别 &#x1f308; &#x1f31f; 正式开始学习数据结构啦~此专栏作为学习过程中的记录&#x1f31f; 文章目录 &#x1f387;[数据结构]串的基本定义及操作&#x1f387;&…

【运维心得】SAP EPM Add-In加载错误的另类解决方案

关键字&#xff1a;SAP BPC EPM OFFICE WPS 今天又解决了一个诡异的问题&#xff0c;记录一下&#xff0c;以备将来能够用上。 目录 问题现象 网上的方法 启发和解决 结论 问题现象 财务SAP系统需要BPC模块做报表&#xff0c;安装了OfficeEPM Add-In以后&#xff0c;结果…

抖音私域怎么做?

“私域流量”是如今备受市场瞩目的话题之一。众所周知&#xff0c;腾讯、阿里巴巴、抖音等互联网巨头已经开始布局私域资源&#xff0c;因此许多企业都希望在这些平台上获取生意增长。作为具有6亿日活跃用户的短视频平台&#xff0c;抖音也为企业提供了私域运营的阵地。那么&am…

2023年湖北黄冈人社局初、中级职称怎么评?申报条件是什么?启程别

2023年湖北黄冈人社局初、中级职称怎么评&#xff1f;申报条件是什么&#xff1f;启程别 想要评过人社局的初、中级职称&#xff0c;首先要满足申报条件&#xff0c;其次是要准备好申报资料&#xff0c;最后等待申报时间提交资料&#xff0c;等待结果。湖北目前改外全面线上申报…

SAP从入门到放弃系列之BOM技术类型-派生BOM-Part5

文章导航目录 一、概述二、基本概念-BOM技术类型三、BOM技术类型详解3.1、BOM技术类型-简单BOM&多重BOM 3.2、BOM技术类型-派生BOM 四、测试示例&#xff1a;4.1、数据准备4.2、创建派生BOM4.3、调整BOM组&#xff0c;更新派生BOM 一、概述 本来想在介绍BOM组的时候写这个…

hbase协处理器编码实例

Observer协处理器通常在一个特定的事件&#xff08;诸如Get或Put&#xff09;之前或之后发生&#xff0c;相当于RDBMS中的触发器。Endpoint协处理器则类似于RDBMS中的存储过程&#xff0c;因为它可以让你在RegionServer上对数据执行自定义计算&#xff0c;而不是在客户端上执行…

MATLAB 之 对话框设计实例和菜单设计

这里写目录标题 一、对话框设计实例1. 数值转化2. 图形演示 二、菜单设计1. 建立用户菜单2. 菜单对象常用属性3. 快捷菜单 一、对话框设计实例 在上一篇博客当中&#xff0c;我们介绍了控件的基本操作&#xff0c;这是建立对话框的基础。下面我们举两个例子&#xff0c;用以说…

软件测试工程师最常用的Linux系统命令大全(汇总)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 cd命令 这是一个…