数据库设计规范,如何去设计数据库,数据库设计所遵循的原则

数据库设计规范

1. 分析

  • 为什么需要规范
  • 如何去设计数据库
  • 数据库设计的具体规范
  • 数据库设计所遵循的原则
2 为什么需要规范

在互联网项目,分工明确,拆分细致, 但一个项目往往会涉及众多参与人员,包括架构师、高级工程师、研发工程师、测试工程师、DBA等不同角色。 数据库是一个项目的最底层设计, 如果设计不清晰,结构模糊, 规范混乱,是很难做成一个成功的项目,而这些需要我们从最基本的开始,对数据库有一套明确的设计规范。

3 如何设计
  1. 传统数据库设计往往会遵循设计范式(三范式), 随着不断发展, 范式设计往往难以满足现在项目的要求, 出现了反范式设计。

    • 范式设计:

      第一范式:数据库表中的每一列都是不可分割的基本数据项, 比如股票名称、股票代码。

      第二范式:数据库表所有属性都必须和主键有完全依赖关系, 比如用户编号为主键,那么与之依赖的有用户名、用户地址、用户性别和身份证等, 这些属性完全与具体用户产生依赖。

      第三范式:数据库表中属性不能存在传递关系, 比如A->B->C, 属性之间存在这样关系则不符合第三范式。再具体点, 比如股票表(股票编号, 股票名称,股票市场,股票交易手续费),这个表就不符合第三范式,因为股票交易手续费是依赖股票市场来确定, 需要再拆分为(股票编号, 股票名称)和(股票市场,股票交易手续费)多张表。

    • 反范式设计:

      范式设计虽然关系层次明确, 但是给业务查询带来了相当的复杂度,中间关系表膨胀, 查询需要连接更多的表, 导致性能严重下降。

      反范式并不是完全打破范式设计, 而是在范式设计与查询性能上找到平衡点,适合业务的设计才是好的设计。

  2. 在实际业务中, 如何去设计呢? 做好需求分析, 理解业务流程, 弄清业务概念, 技术是生产工具, 服务于业务才能体现其价值,所以明白业务需求才知道怎么去设计。 业务设计三步法则:

    • 先拆解: 哪些是业务系统的核心模块, 核心模块具体包含哪些对象, 哪些又是非核心模块, 必须先列清楚。
    • 画关系: 将拆解的模块串接起来,形成一个整体, 哪些是依赖关系, 哪些是包含关系,哪些是聚合, 哪些又是组合。
    • 再细化:有上面的清晰脉络, 再去填充对象的属性, 仔细考量, 适当加入反范式设计, 冗余一些常用信息,这些就需再仔细去细化, 斟酌与权衡。
4 命名与表设计规范

​ 规范并不是千遍一律, 但要在自己的项目体系内形成一套有效规范, 以下规范可作参考:

  1. 命名规范

    1.命名有意义,一眼知道这张表是干什么用的
    2.数据库,表都用小写
    数据库形如:backend
    数据表形如:client_device_info(客户端设备信息),不要缩写,字母全小写
    3.索引命名以idx_为前缀
    4.命名不要过长(应尽量少于25字符)
    5.不要使用保留字
    6.同一字段在不同的表中也应是相同的类型和长度
    7.同一数据库下有不同的模块,可以考虑对表名用不同的前缀标识
    8.备份表时加上时间标识
    
  2. 表设计规范

    1.如果没有特殊情况,建议选择InnoDB引擎
    2.每个表都应该有主键,可选择自增字段,或长整型字段。例外情况,如果有多个字段可以组成唯一, 并且需要频繁查询的, 那么可以采用复合主键,比如用户编号+交易商编号做为复合主键,因为可以确保不产生重复数据, 同时节省空间。 
    3.(不做强制要求)尽量将字段设置为NOT NULL。因为NULL值的存储需要额外的空间,且会导致比较运算更为复杂,会使得优化器更难以优化sql。空值是不占用空间, 但NULL列需要占用一个额外字节。
    4.使用更短小的列,比如整型列。整型列的执行速度往往更快。
    5.存储精确浮点数必须使用DECIMAL代替float和double。
    6.建议使用unsigned类型存储非负值
    7.建议使用 int unsigned存储ipv4
    8.整型定义中不添加显示长度的值,使用int,而不是int(4)
    9.尽可能不要使用text,blob类型
    10.varchar(n) n表示字符数而不是字节数,比如varchar(255)最大可存储255个汉字,需根据实际字符长度选择n的值。
    11.字符集建议选择utf-8
    12.存储年时使用year类型
    13.存储日期时使用date类型
    14.存储时间时,建议使用timestamp类型,因为timestamp使用的是4字节,datetime使用的是8字节。
    15.不要在数据库中使用varbinary或blob存储图片及文件,mysql 并不适合大量存储这类型文件
    16.join 操作的字段,在不同表中的类型及命名要一致
    17.如果更改表结构会影响性能,需要找DBA、表设计人员进行联合评审。
    
5 数据库设计原则
  1. 核心原则

    不在数据库做运算; cpu计算务必移至业务层;

    控制每个表的列数量(字段少而精,字段数建议在20以内);

    平衡范式与冗余(效率优先;往往牺牲范式)

    拒绝3B(拒绝大sql语句:big sql、拒绝大事物:big transaction、拒绝大批量:big batch);

  2. 字段类原则

    用好数值类型(用合适的字段类型节约空间);

    字符转化为数字(能转化的最好转化,同样节约空间、提高查询性能);

    避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效);

    少用text类型(尽量使用varchar代替text字段);

  3. 索引类原则

    合理使用索引(改善查询,减慢更新,索引一定不是越多越好);
    字符字段大量重复属性时, 尽量建前缀索引(比如地区chinaXXX, alter table x_test add index(x_city(6)) ); 不在索引做列运算;
    innodb主键推荐使用自增列(主键建立聚簇索引,主键不应该被修改,字符串不应该做主键)
    不用外键(由程序保证约束);

  4. SQL类原则

    sql语句尽可能简单(一条sql只能在一个cpu运算,大语句拆小语句,减少锁时间,一条大sql可以堵死整个库);
    避免使用trig/func(触发器、函数, 采用程序取而代之);
    大批量SQL的更新操作要开启事务,越多效果性能越明显。

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《数据库设计开发规范-阿里 pdf》是阿里巴巴公司数据技术中心所发布的一份数据库设计开发规范。该规范内容丰富、系统完备,具有一定的指导意义。 该规范首先明确了数据库设计开发应着重考虑的三个方面:数据建模、物理设计SQL编写规范。在数据建模方面,规范强调了规范化设计、模型可视化等关键要素,提出了详细的模型设计规范;在物理设计方面,则从数据存储、索引设计、性能优化等角度,提出了一系列具体的指导建议;而在SQL编写规范方面,规范涵盖了SQL语法、性能、安全性等多个方面,对SQL优化提出了具体的操作建议,使得开发人员能够高效地编写SQL语句。 此外,规范还提出了数据字典、版本管理、测试等方面的指导意见,保障了数据库开发的质量和可维护性。特别是在数据字典方面,规范强调了数据字典的必要性,提供了详细的数据字典设计原则和实施建议,为开发人员提供了有价值的参考。 总之,《数据库设计开发规范-阿里 pdf》提供了一套完整的数据库设计开发指南,让开发人员可以根据规范实际操作,提高开发效率和代码质量。虽然该规范是阿里巴巴公司的内部规范,但它的理念和思想值得其他公司、组织和开发者借鉴,从而在数据库开发方面得到提升。 ### 回答2: 阿里巴巴提出的《数据库设计开发规范》pdf是一份非常规范并且具有实际指导意义的文档,旨在帮助开发人员在数据库设计和开发过程中能够遵循一定的规范,提高代码质量和可维护性。 规范主要从以下几个方面入手: 1.数据库命名规范:包括数据库、表、字段等的命名规范,遵循易读易懂、有意义而不冗长的原则,以便更好的理解和维护数据库。 2.数据类型规范:包括是否使用自增ID、数据类型的选择、字符集等的规范,以满足实际业务需求,减少存储空间和提高性能。 3.索引规范:包括索引的创建、使用、维护等的规范,以提高查询性能和减少额外的开销。 4.SQL语句规范:包括SQL语句编写、注释、执行等的规范,以提高开发效率和代码质量。 5.数据备份和恢复规范:包括数据备份、恢复策略等的规范,以保证数据的完整性和可靠性。 在实际开发中,遵循这些规范可以帮助开发人员降低错误率、提高工作效率、节省开发成本和提高系统的可维护性。因此,《数据库设计开发规范》pdf是一份非常值得推广和使用的文档。 ### 回答3: 阿里巴巴发布的《数据库设计开发规范》是针对数据库设计开发人员的一份指导性材料,主要包含数据库设计和开发规范、编码规范、命名规范、性能指导、错误处理、测试和版本管理等方面内容。 首先,规范的设计和开发可以确保数据结构的一致性和可用性,避免因为设计规范不当或开发人员的不规范行为导致数据质量下降或无法支持业务需求。 其次,编码规范、命名规范和错误处理等方面规范的实施可以减少代码中的错误和问题,提高代码质量和可维护性。 此外,该规范还提供了性能指导,包括了如何优化 SQL 查询、如何优化索引以及如何分析性能问题等。这些指导可以让开发人员更好地优化数据库,以达到更好的性能表现。 最后,该规范还包含了测试和版本管理等方面的指导,以确保每一次修改都是正常的,并减少因错误导致的不可逆的损失。 总的来说,阿里巴巴发布的《数据库设计开发规范》是一个非常有价值的指导性材料,可以让数据库设计和开发人员遵循统一的标准和规范,提高数据库的质量和性能表现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵然间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值