数据库设计规范

数据仓库设计规范文档 数据仓库设计规范文档 版本 更新内容 备注 v1.0 创建文档 2020-08-11 一. 数仓建设 1.1. 数据模型架构规范 分层是为了解决 ETL 任务及工作流的组织、数据的流向、读写权限的控制、不同需求的满足等各类问题。 总体来说,数仓划分为操作数据层、数据仓库层和数据集市层三部分 数据层次的划分 ODS:Operational Data Store,操作数据层,在结构上其与源系统的增量或者全量数据基本保持一致。它相当于一个数据准备区,同时又承担着基础数据的记录以及历史变化。 阅读详情

一、基础规范

(1)必须使用InnoDB存储引擎

解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高

 

(2)必须使用UTF8字符集

解读:万国码,无需转码,无乱码风险,节省空间

 

(3)数据表、数据字段必须加入中文注释

解读:N年后谁tm知道这个r1,r2,r3字段是干嘛的

 

(4)禁止使用存储过程、视图、触发器、Event

解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移吧

 

(5)禁止存储大文件或者大照片

解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存URI多好

 

二、命名规范

(6)只允许使用内网域名,而不是ip连接数据库

 

(7)线上环境、开发环境、测试环境数据库内网域名遵循命名规范

业务名称:xxx

线上环境:dj.xxx.db

开发环境:dj.xxx.rdb

测试环境:dj.xxx.tdb

从库在名称后加-s标识,备库在名称后加-ss标识

线上从库:dj.xxx-s.db

线上备库:dj.xxx-sss.db

 

(8)库名、表名、字段名:小写,下划线风格,不超过32个字符,必须见名知意,禁止拼音英文混用

 

(9)表名t_xxx,非唯一索引名idx_xxx,唯一索引名uniq_xxx

 

三、表设计规范

(10)单实例表数目必须小于500

 

(11)单表列数目必须小于30

 

(12)表必须有主键,例如自增主键

解读:

a)主键递增,数据行写入可以提高插入性能,可以避免page分裂,减少表碎片提升空间和内存的使用

b)主键要选择较短的数据类型, Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率

c) 无主键的表删除,在row模式的主从架构,会导致备库夯住

 

(13)禁止使用外键,如果有外键完整性约束,需要应用程序控制

解读:外键会导致表与表之间耦合,update与delete操作都会涉及相关联的表,十分影响sql 的性能,甚至会造成死锁。高并发情况下容易造成数据库性能,大数据高并发业务场景数据库使用以性能优先

 

四、字段设计规范

(14)必须把字段定义为NOT NULL并且提供默认值

解读:

a)null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化

b)null 这种类型MySQL内部需要进行特殊处理,增加数据库处理记录的复杂性;同等条件下,表中有较多空字段的时候,数据库的处理性能会降低很多

c)null值需要更多的存储空,无论是表还是索引中每行中的null的列都需要额外的空间来标识

d)对null 的处理时候,只能采用is null或is not null,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’shenjian’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录

 

(15)禁止使用TEXT、BLOB类型

解读:会浪费更多的磁盘和内存空间,非必要的大量的大字段查询会淘汰掉热数据,导致内存命中率急剧降低,影响数据库性能

 

(16)禁止使用小数存储货币

解读:使用整数吧,小数容易导致钱对不上

 

(17)必须使用varchar(20)存储手机号

解读:

a)涉及到区号或者国家代号,可能出现+-()

b)手机号会去做数学运算么?

c)varchar可以支持模糊查询,例如:like“138%”

 

(18)禁止使用ENUM,可使用TINYINT代替

解读:

a)增加新的ENUM值要做DDL操作

b)ENUM的内部实际存储就是整数,你以为自己定义的是字符串?

 

五、索引设计规范

(19)单表索引建议控制在5个以内

 

(20)单索引字段数不允许超过5个

解读:字段超过5个时,实际已经起不到有效过滤数据的作用了

 

(21)禁止在更新十分频繁、区分度不高的属性上建立索引

解读:

a)更新会变更B+树,更新频繁的字段建立索引会大大降低数据库性能

b)“性别”这种区分度不大的属性,建立索引是没有什么意义的,不能有效过滤数据,性能与全表扫描类似

 

(22)建立组合索引,必须把区分度高的字段放在前面

解读:能够更加有效的过滤数据

 

六、SQL使用规范

(23)禁止使用SELECT *,只获取必要的字段,需要显示说明列属性

解读:

a)读取不需要的列会增加CPU、IO、NET消耗

b)不能有效的利用覆盖索引

c)使用SELECT *容易在增加或者删除字段后出现程序BUG

 

(24)禁止使用INSERT INTO t_xxx VALUES(xxx),必须显示指定插入的列属性

解读:容易在增加或者删除字段后出现程序BUG

 

(25)禁止使用属性隐式转换

解读:SELECT uid FROM t_user WHERE phone=13812345678 会导致全表扫描,而不能命中phone索引,猜猜为什么?(这个线上问题不止出现过一次)

 

(26)禁止在WHERE条件的属性上使用函数或者表达式

解读:SELECT uid FROM t_user WHERE from_unixtime(day)>='2017-02-15' 会导致全表扫描

正确的写法是:SELECT uid FROM t_user WHERE day>= unix_timestamp('2017-02-15 00:00:00')

 

(27)禁止负向查询,以及%开头的模糊查询

解读:

a)负向查询条件:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,会导致全表扫描

b)%开头的模糊查询,会导致全表扫描

 

(28)禁止大表使用JOIN查询,禁止大表使用子查询

解读:会产生临时表,消耗较多内存与CPU,极大影响数据库性能

 

(29)禁止使用OR条件,必须改为IN查询

解读:旧版本Mysql的OR查询是不能命中索引的,即使能命中索引,为何要让数据库耗费更多的CPU帮助实施查询优化呢?

 

(30)应用程序必须捕获SQL异常,并有相应处理

本文转载自:https://mp.weixin.qq.com/s/Yjh_fPgrjuhhOZyVtRQ-SA

 

数据仓库设计规范 ○ 指标相关: 区分是否可累加指标,比如pv 为可累加指标「尽量控制在15个以内」,uv不可累加指标「尽量控制在5个以内,因为不可累加的指标需要按cube来组合运算」,不算衍生指标。○ 该层为维度数据,维度是对具体分析对象的分析角度,维度要具备丰富的属性,历史信息的可追溯性,对通用的维表要保持一致性,避免维度二义性。○ 按业务主题组织高度汇总数据,产出通用的指标数据,统一指标计算口径和方法,避免指标冗余计算导致数据不一致。○ 该层接收来源不同源的数据,主要分流量日志,业务日志,业务数据,API第三方数据。 阅读详情

相关推荐

VCL for PHP,Konopka Signature VCL Controls (Raize Components 6.2.3) for Delphi 10.4

The Raize Components suite includes a variety of interface design tools for Delphi programming language and C ++ Builder, which includes over 125 VCL controls and over 100 different tools for creating...

weixin_42137539的博客 855

SQL语言的规则与规范

- 数据库、表名不得超过30个字符,变量名限制为29个 - 必须只能包含 A–Z, a–z, 0–9, _共63个字符 - 数据库名、表名、字段名等对象名中间不要包含空格 - 同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名 - 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用`(着重号)引起来 - 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别

weixin_52533007的博客 2822

DDR4协议规范之(一)DDR4结构和寻址

DDR4 SDRAM结构和寻址DDR4 SDRAM的封装和寻址新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 DDR4 SDRAM的封装和寻址 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习

YJFeiii的博客 3万+

SQL书写规范/SQL编码规范,这一篇就够了

多层次的嵌套子查询别名之前要体现层次关系,SQL语句的别名需要分层命名,从第1层次至第4层次,分别用P(Part) 、S(Segment)、 U(Unit) 和D(Detail)表示。如果使用英文双引号引用的字符串内需要包含双引号时,除了使用转义的办法外,我们可以用一对单引号来包括字符串,这样字符串内的双引号被视作普通字符,无需特殊处理。缩进应为1个Tab或者4个字符,所有的缩进均为1个缩进量的整数倍,按照代码层次对齐,同层次的SQL语句缩进应保持一致(纵向对齐)。合理的代码注释也有助于对代码的理解。

developer_jiang的博客 9556

unity制作交互视频/互动视频

unity制作交互视频/互动视频 思路 1.先让unity播放视频 2. 视频播放结束后,视频暂停,按钮出现 3.按钮跳转下一个视频 视频播放 先创建UI-Raw Iamge 在Raw Iamge 挂载组件 Video Player 接着挂载视频播放的脚本 using UnityEngine; using UnityEngine.UI; using UnityEngine.Video; publi...

weixin_45588911的博客 8427

COD论文笔记VSCode: General Visual Salient and Camouflaged Object Detection with 2D Prompt Learning

VSCode模型通过引入领域特定提示和任务特定提示,结合提示区分损失,成功地在单一模型中处理多个显著目标检测和伪装目标检测任务。这种方法不仅提高了模型的性能,还展示了其对未见任务的泛化能力。作者使用 Visual saliency transformer ICCV 2021 作为baseline model这张图展示了VSCode模型的整体框架,特别强调了2D提示学习方法。

985小菜鸡 1629

SQL规范

命名规范: 1.库名、表名、字段名,必须使用小写字母或数字,不得超过30个字符。 2.库名、表名、字段名,禁止出现数字开头,禁止两个下划线中间只出现数字。(说明: MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、表名、字段名 ,都不允许出现任何大写字母,避免节外生枝 正例: aliyun _ admin , rdc _ config , ...

这就是那个世界,别想那么多 2701

FFDNet-pytorch版本代码训练教程

该文章为FFDNet-pytorch版本代码训练教程,抓紧订阅学习!尽早入门发论文哦!

假技术Po主 1508

SQL分类和命名规范

文章目录1. SQL 分类2. SQL语言的规则与规范3. 注 释4. 命名规则 1. SQL 分类 SQL语言在功能上主要分为如下3大类: DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。 主要的语句关键字包括 CREATE 、 DROP 、 ALTER 等。 DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记

兮动人 3704

7、刚度矩阵与弹簧元素:有限元分析的核心

本文深入探讨了有限元分析中的核心概念——刚度矩阵与弹簧元素。详细介绍了刚度矩阵的定义、构建方法及其对称性、正定性和稀疏性等性质,同时解析了弹簧和阻尼器元素的特性及其在模拟复杂系统中的应用,如液压缸、减震器等。通过结合刚度矩阵与弹簧元素,可以提高结构模型的精度并模拟复杂的工程系统。文章还讨论了优化策略、验证流程、误差分析及实际应用案例,展示了这些技术在桥梁分析、汽车悬挂系统等领域的重要作用,并展望了其在未来新材料、智能结构和数字孪生技术中的发展潜力。

nice1的博客 236

银行数据仓库数据模型设计规范:让数据管理更高效

银行数据仓库数据模型设计规范:让数据管理更高效 【下载地址】银行数据仓库数据模型设计规范 本开源项目深入解析银行数据仓库的数据模型设计规范,提供从概念模型到物理模型的完整设计指南。概念模型阶段聚焦主题划分,帮助清晰组织数据;逻辑模型阶段细化主题,归纳总结关键数据点;物理模型阶段则实现逻辑结构,涵盖表命名、字段类型等细节。...

gitblog_06761的博客 1165

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

985小水博的摸鱼日常 463

数据结构(数据库)设计规范

为什么80%的码农都做不了架构师?>>> ...

weixin_34152820的博客 2135

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

银行数据仓库数据模型设计规范

银行数据仓库数据模型设计规范 【下载地址】银行数据仓库数据模型设计规范 本开源项目深入解析银行数据仓库的数据模型设计规范,提供从概念模型到物理模型的完整设计指南。概念模型阶段聚焦主题划分,帮助清晰组织数据;逻辑模型阶段细化主题,归纳总结关键数据点;物理模型阶段则实现逻辑结构,涵盖表命名、字段类型等细节。通过这份规范,您将...

gitblog_06775的博客 491

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

DB 设计规范汇总

数据库命名规范 1、数据库名称全部使用小写; 2、名称只允许使用a-z、0-9及下划线的组合,不允许出现其他字符; 3、使用有意义的名称,能做到观其名知其意,比如:order_db; 4、年份固定格式为YYYY四位;月份固定为MM两位; 5、如果按百库十表方案分库,则名称为标准库名+下划线+编号后缀,其中编号长度固定为2位,取值范围从00到99,如order_db_00……order_db_99; 6、如果按照月份分库,则库名为标准库名+下划线+年月编号,其中年月格式为YYYYMM,固定6位长度,如ord

闲狗的博客 1820

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

常用数据库设计规范总结

数据库设计规范: 一 命名规范: 1、所有数据库对象名称必须使用小写字母并用下划线分割 2、所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 3、数据库对象的命名要做到见名识意,并且最好不超过32个字符 4、临时表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 5、所有存储相同数据的列名和列类型必须一致 二:数据库基本设计规范 1、所有表必须使用Innodb存储引擎(MySQL5.5之前默认使用MyIsam,5.6以

shassd的博客 3066

数据仓库设计规范(更新中)

文章目录设计规范逻辑架构技术架构分层设计主题划分分级管理命名规范层级任务表字段模型规范建模方法建模工具血缘关系维度退化元数据管理开发规范脚本注释字段别名脚本格式流程规范 设计规范 逻辑架构 数据采集 数据存储 数据计算 数据展现 技术架构 数据采集→Kafka→hdfs→Flink→HBase 分层设计 ods→dw→dws→sh→ 主题划分 面向主题域管理 为了提高指标管理的效率,你需要按照业务线,主题域,和业务过程三级目录方式来进行指标管理 划分原子指标和派生指标 原子指标+原子指标=派生指

数据飓风 1834

MongoDB数据库的设计规范

MongoDB是非关系型数据库的典型代表,DB-Engines Ranking 数据显示,近年来,MongoDB在NoSQL领域一直独占鳌头。MongoDB是为快速开发互联网应用 而设计的数据库系统,其数据模型和持久化策略就是为了构建高读/写的性能,并且可以方面的弹性拓展。

hongjian006的博客 967

数据库设计规范,我的数据库我做主

从数据库理论的抽象角度看,数据库设计是指对于一个给定的应用环境,构造出某种数据库管理系统支持的优化的数据库模式,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求(包括信息管理要求和数据处理要求)在数据库表设计中,虽然没有固定的规定,但可以根据广泛接受的数据库设计原则和最佳实践来总结出一些关键规定。这些规定涵盖了从命名约定到性能优化的各个方面,遵循这些规定可以帮助您创建一个结构良好、高效和易于维护的数据库。

我哎GIS博客 2560

【MySQL】数据库设计规范

范式和反范式

Yes_water的博客 448

1.数据仓库模型设计规范

从数据的时间跨度来说,通常是DWD层的一部分,主要的目的是为了满足用户分析的需求,而从分析的角度来说,用户通常只需要分析近几年(如近三年的数据)的即可。同时也可以用于少量的、且对刷新时间不是非常敏感的指标统计需要,比如交易的关闭和发货,在当前事务型事实表不支持,且只有少量的统计指标,可以基于累计快照事实表计算。事务事实表记录的事务层面的事实,保存的是最原子的数据,也称“原子事实表”。属于数据的公共层建设。周期快照事实表的粒度是每个时间段一条记录,通常比事务事实表的粒度要粗,是在事务事实表之上建立的聚集表。

HelloWowofei的博客 541
上一篇: 01-复杂度分析
下一篇: git常用命令总结
LELELED
博客等级 码龄9年 3粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值