mysql建库建表的规范问题讲解

我不是一个资深高手,只想描述普通人在项目中真正常见的问题,以及我的一些经验!

实际企业开发中,开发应用程序,我们逃不过一个点就是数据的存储,这个时候就需要建库建表,习惯性的操作背后,我们是否有真正思考过,建库建表,我们习以为常的操作后面,是否有值得我们再去认真思考过的一些细节以及规范吗,话不多说,上今天的正文。

首先明确一个前提,这是基本准则
1.凡是需要命名的对象,其标识符不能超过30个字符;

2.名称必须以英文字母开头,不得以 _(下划线) 作为起始和终止字母;

3.所有名称的字符范围为:a-z, 0-9 和_(下划线),禁用大写、特殊符号、保留字、汉字和空格;

4.采用英文单词或英文缩写作为名称,不使用无意义的字符或汉语拼音;

5.名称应该清晰明了,能够准确表达事物的含义,最好可读,遵循“见名知意”的原则

数据库名的创建,应该遵守如下规则
1.数据库名称统一使用小写,采用下划线_分割,禁止以中划线-或小数点.分割

2.数据库以 xxx_ 开头,再加业务系统代号,再加上具体业务名称 如xxx_pay_gateway

数据库字符集选择
如果无特殊需求,强力建议直接固定,字符集utf8mb4,排序规则utf8mb4_unicode_ci
注:utf8最大支持3个字节的UTF-8字符(真正的UTF-8是每个字符最多四个字节),支持大部分汉字;而utf8mb4是utf8的超集,专门兼容4个字节的unicode,支持Emoji表情、很多不常用的汉字,以及任何新增的Unicode字符等;

数据表命名规范
以表的具体内容进行描述。如:用户基础信息的表名为 users 带上模块分类前缀 sys_user
关联表可以使用两个表组合方式,比如 user_class
每个表/字段都要有注释,说明其含义,对于外键字段请说明参照哪个表

数据库字段创建规范
参考阿里的规范做了简单汇总,去除部分我认为无实际意义的,如下
1. 【强制】表达是与否概念的字段,必须使用is_xxx 的方式命名,数据类型是 unsigned tinyint(1 表示是,0 表示否)正例:表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除。
2.【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

  1. 【强制】表名不使用复数名词。

  2. 【强制】禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。

  3. 【强制】主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。

  4. 【强制】小数类型为decimal,禁止使用 float 和 double。

  5. 【强制】如果存储的字符串长度几乎相等,使用 char 定长字符串类型。

  6. 【强制】varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引率。

  7. 【强制】表必备三字段:id,create_time,update_time。

    说明:其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。create_time,update_time 的类型均为

datetime 类型,如果要记录时区信息,那么类型设置为 timestamp。

  1. 【强制】在数据库中不能使用物理删除操作,要使用逻辑删除。
    说明:逻辑删除在数据删除后可以追溯到行为操作。不过会使得一些情况下的唯一主键变得不唯一,需要根据情况来酌情解决。

此处我需要补充说明一下,在我个人实际开发经验中来讲,做逻辑删除的好处是,数据不会丢失,低风险,但是会冗余无用数据,但是同时会带来唯一主键的约束问题,举例,本来业务中三个字段按照业务应该是唯一的,利用这个来创建唯一索引约束数据,但是因为逻辑删除原因,会导致问题,这个大家结合实际情况来使用,不必要盲从。
11. 【推荐】表的命名最好是遵循“业务名称_表的作用”。
12. 【推荐】字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:不是频繁修改的字段。不是唯一索引的字段。不是 varchar 超长字段,更不能是 text 字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值