无论什么web编程,还是应用开发,都离不开数据库,数据库是数据存储的中心,缺了数据,编程就无从谈起。

有些项目团队有专门的DB工程师,来负责数据库的设计与优化,有些项目没有专门的DB人员,是由开发人员一同设计了,今天聊一聊数据库设计中一些经验与原则(以MySql为例)。

数据库设计文档,这个一定得有,得详细记录每个表是干什么的,每个字段的类型、名称、长度及备注说明。

设计原则

  • 单表字段数量尽可能控制在50个以内,如果比较多,考虑拆分表。比如交易表存储的字段比较多,可以拆分为tb_trade,tb_trade_status 一个代表交易表,一个代表交易状态表。
  • 按常规存储与经常更新存储拆分表,比如用户表可以拆分为tb_user,tb_user_data,一个保存用户常规表,这里面数据一般不会变动更新,一个是更新比较频繁表单独保存。
  • 尽可能不使用text类型,如果非用不可,也不经常有,建议拆表,把text字段的单独建一张表。
  • 如果有自定义字段表,建议拆表,把自定义字段表单独建一张表。
  • 字段类型用尽量小的存储空间来存一个字段的数据;能用int,就不用varchar,能用varchar(40)就不用varchar(255)。比如IP地址等。
  • 字段类型固定长度的最好使用char,比如城市编码,邮编等等。
  • 字段类型能使用tinyint就不用smallint,int,如果业务上不出现负数,就限制不允许负数,这样可以把最大值扩大一倍。
  • 字段可以设置默认值就设置一个默认值,能不允许为空就不能为空。
  • 字段枚举值之间预留一些值便于后续扩展,比如交易状态表0代表关闭,5代表待付款,10代表已付款,15代表已经发货,20代表已经收货等。#说明#这样做的好处是便于后续扩展,万一后续业务需求,多出一个状态值,可以很容易的定义。
  • 每个表创建一个递增主键id索引(原因可以查查innodb的索引原理就明白了)。
  • 如果有业务单号字段,在单号上创建unique索引。
  • 合理使用索引,不是越多越好。
  • 每个表保留created_at,updated_at,分别保留创建时间,最后更新时间#说明#为后续的API接口开发预留,因为后续接口是需要抓取增量数据的,全是依靠updated_at来完成的。
  • 数据一经产生,不能删除,可以考虑用一个字段标识是否删除,比如is_deleted#说明#一则为了数据完整性,后续可查。再则如果有API接口,数据删除后,第三方系统只能傻傻的认为数据还存在,就不可能保证数据一致性了。
  • 尽可能的满足数据库范式要求,但适当冗余保存一些字段也是可以的。#说明#适当保存一些冗余方便后续的查询,再者有些数据具有及时性,只代表数据产生那一刻的数据,比如交易明细中商品就是明显的代表。
  • 不要使用存储过程,如果是mssql可以使用,但要注意存储过程的编写方法,后续会写到。
  • 合理使用事务,把一些条件及判断,尽可能在事务开始之前完成,避免事务占用时间过长导致堵塞。

数据库命名原则

数据库命名

  • 采用英文字母、下划线、数字;
  • 命名要简洁易懂,不要过长。如user_db,weixin_db,trade_db,当然也可以直接为user,weixin,trade等等;
  • 除非是一些分库或备份库,可以加0-9的自然数,如user_db_202012,除此之外,不要使用数字#说明#数字一般代表的是序号,日期等,便于理解,除此之外,没有什么意义,加上了有些画蛇添足的味道。

表名命名

  • 采用26个英文字母(区分大小写)、0-9数字、下划线"_"组成;
  • 命名简洁易懂,多个单词之间用下划线分隔,如user_log#说明#不建议使用驼峰法,如userLog,因为有些数据库是区分大小写的,userlog,userLog代表不同的表,如果在开发中不小心把userLog写成了userlog就会出现异常,没必要给项目挖坑。更不建议直接使用userlog,这种写法不便于读。
  • 建议系统表使用统一前缀,比如tb_user_log,tb_trade等#说明#使用前缀的好处是,一则查看的时候会自动排序,把相同的一类排在一块,再者一看就知道是系统表,不能轻易动,后续在使用过程中,可能会出现一些临时表,测试表等,这些表在用完后是需要删除的,也许在使用后暂时忘记了处理,回关一看就知道是什么用途。
  • 相同业务类型的使用统一前缀,比如tb_user,tb_user_data,tb_user_log等等#说明#这样做的好处是便于查看。

字段命名

  • 采用26个英文字母、下划线、0-9自然数(如不需要尽量不用)
  • 命名简洁易懂,多个单词之间用下划线分隔;#说明#不建议使用驼峰法,比如fName,原因上述已经说明了。
  • 不要使用关键字冲突字段,比如sum,distinct等等,有些项目在字段名上统一加上了前缀f_,比如f_name,f_mobile等,其实这样做的目的就是防止与关键字冲突了,可以根据个人喜好是否统一加前缀。

access数据库拆分的用途_聊聊数据库设计一些经验 条条都是干货相关推荐

  1. access数据库拆分的用途_手动拆分 Access 数据库 | Microsoft Docs

    如何在 Microsoft Access 中手动拆分 Access 数据库 2020/5/22 适用于: Access 2007, Access 2003, Access 2002 本文内容 备注 O ...

  2. access数据库拆分的用途_ACCESS数据库的用途和优缺点

    ACCESS简介 Access 是微软公司推出的基于Windows的桌面关系数据库管理系统(RDBMS,即Relational Database Management System),是Office系 ...

  3. 关系型数据库和mysql教材_关系型数据库(MySQL)

    数据库系统DBS(DataBase System):数据库管理系统DBMS(DataBase Management System)+数据库DB(DataBase) [关系型数据库]概念: 表table ...

  4. MySQL数据库课程实验报告_创建数据库并插入数据

    1.1 进入数据库 $ sudo service mysql start $ mysql -u root 2.1 创建数据库 create database mysql_shiyan; 创建后查看数据 ...

  5. ue查找多个关键字_聊聊数据库GROUP BY关键字的那些事

    数据库中根据一个或多个列对结果集进行分组,我们首先会想到的是使用GROUP BY,例如聚合函数 (比如 SUM求和) 就需要添加 GROUP BY语句用于实现分组. 小提示:文中选用的数据库是MySQ ...

  6. access数据库应用系统客观题_随访数据库的建立:易侕DataWeb系统应用

    临床研究通常需要随访,重复测量某些指标.例如随访血压.生存状态等.例如:研究血压与预后的关系.在基线(入院).出院.出院后30天.90天和3个月,测量血压并随访心梗和死亡. 采用易侕DataWeb数据 ...

  7. mysql数据库的新特性_【数据库】MySQL新特性归档介绍

    MySQL 8.0.17发布了,看了下release note,发现果真如之前预期的那样,恢复了redo log归档(redo log archiving)功能.之所以说是"恢复" ...

  8. mysql查询数据库创建语句是_查询数据库语句

    一.Select语句:67页 select语句除了可以查看数据库中的表格和视图的信息外,还可以查看SQL Server的系统信息.复制.创建数据表,其查询功能强大,是SQL语言的灵魂语句,也是SQL中 ...

  9. MySQL数据库的敏感标识_不同数据库标志符长度限制总结

    测试环境及数据库版本信息 操作系统:Win7 Mysql版本:5.6.24 Oracle版本:11gR2 Postgre版本:9.4 SQLServer版本:2008 1.不同数据库标识符长度限制 长 ...

最新文章

  1. 字节一实习生误删公司所有lite模型,几百人为其善后,有员工处理事故到凌晨三点!...
  2. leetcode 38. 外观数列 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下
  3. Tomcat中组件的生命周期管理(三)
  4. SQL Server时间函数
  5. 基于51单片机的蜂鸣计算器设计
  6. 微信小程序 - 自定义swiper(dot)指示点
  7. C++实现分割读取txt文件以及对齐打印设置
  8. python raise语句_Python学习笔记:异常处理
  9. Java删除文件和文件夹的方式
  10. 网站制作笔记一域名购买与主机备案
  11. Linux默认端口介绍
  12. 两年数据对比柱形图_视频教程:堆积柱形图的几种变化形式
  13. 四种渠道打造网站高质量原创内容
  14. 2021年深圳盐田区绿色建筑与装配式建筑发展资金申报资助及条件,补贴200万
  15. 【硬刚Hive】HIVE高级(8):优化(8) Explain 查看执行计划(二)
  16. 强制应用横竖屏的简单设置
  17. Camera | 5.Linux v4l2架构(基于rk3568)
  18. GitHub 近 70K 星,命令行的艺术!
  19. open-vot:PyTorch 实现 Siamese-FC
  20. 关于自己的一些想法-网络通用消费返点平台

热门文章

  1. [Nhibernate]SchemaExport工具的使用(二)——创建表及其约束、存储过程、视图
  2. NIOS II 创建示例设计_Quartus II 9.0
  3. Nginx 学习笔记(四) Nginx+keepalived
  4. 2011年9月最新整理的10个有趣的jQuery插件集合
  5. oracle创建表空间.创建用户.创建表
  6. Mono 2.4 and MonoDevelop 2.0 have been released
  7. 在启用sharepoint portal server 2003的SSO时,提示“无法连接到数据库服务器,请检查配置账户的权利”的问题的解决方法...
  8. Python简介、安装、更新、基本语法及数据类型
  9. Matlab读取点云数据显示
  10. weka: best first search