前言
对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。
系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracl等。
后端开发的日常工作,需要不断的建库和建表,来满足业务需求。
通常情况下,建库的频率比建表要低很多,所以,我们这篇文章主要讨论建表相关的内容。
如果我们在建表的时候不注意细节,等后面系统上线之后,表的维护成本变得非常高,而且很容易踩坑。
今天就跟大家一起聊聊,数据库建表的15个小技巧,希望对你会有所帮助。
1.名字
建表的时候,给表、字段和索引起个好名字,真的太重要了。
1.1见名知意
名字就像表、字段和索引的一张脸,可以给人留下第一印象。
好的名字,言简意赅,见名知意,让人心情愉悦,能够提高沟通和维护成本。
坏的名字,模拟两可,不知所云。而且显得杂乱无章,看得让人抓狂。
反例:
用户名称字段定义成:yong_hu_ming、用户_nam、nam、usr_nam_
你看了可能会一脸懵逼,这是什么骚操作?
正例:
用户名称字段定义成:usr_nam
温馨提醒一下,名字也不宜过长,尽量控制在30个字符以内。
1.2大小写
名字尽量都用小写字母,因为从视觉上,小写字母更容易让人读懂。
反例:
字段名:PRODUCT_NAME、PRODUCT_nam
全部大写,看起来有点不太直观。而一部分大写,一部分小写,让人看着更不爽。
正例:
字段名:product_nam
名字还是使用全小写字母,看着更舒服。
1.3分隔符
很多时候,名字为了让人好理解,有可能会包含多个单词。
那么,多个单词间的分隔符该用什么呢?
反例:
字段名:productnam、productNam、productnam、product
nam单词间没有分隔,或者单词间用驼峰标识,或者单词间用空格分隔,或者单词间用
分隔,这几种方式都不太建议。正例:
字段名:product_nam
强烈建议大家在单词间用_分隔。
1.4表名
对于表名,在言简意赅,见名知意的基础之上,建议带上业务前缀。
如果是订单相关的业务表,可以在表名前面加个前缀:ordr_。
例如:ordr_pay、ordr_pay_dtail等。
如果是商品相关的业务表,可以在表名前面加个前缀:product_。
例如:product_spu,product_sku等。
这样做的好处是为了方便归类,把相同业务的表,可以非常快速的聚集到一起。
另外,还有有个好处是,如果哪天有非订单的业务,比如:金融业务,也需要建一个名字叫做pay的表,可以取名:financ_pay,就能非常轻松的区分。
这样就不会出现同名表的情况。
1.5字段名称
字段名称是开发人员发挥空间最大,但也最容易发生混乱的地方。
比如有些表,使用flag表示状态,另外的表用status表示状态。
可以统一一下,使用status表示状态。
如果一个表使用了另一个表的主键,可以在另一张表的名后面,加_id或_sys_no,例如:
在product_sku表中有个字段,是product_spu表的主键,这时候可以取名:product_spu_id或product_spu_sys_no。
还有创建时间,可以统一成:cat_tim,修改时间统一成:updat_tim。
删除状态固定为:dlt_status。
其实还有很多公共字段,在不同的表之间,可以使用全局统一的命名规则,定义成相同的名称,以便于大家好理解。
1.6索引名
在数据库中,索引有很多种,包括:主键、普通索引、唯一索引、联合索引等。
每张表的主键只有一个,一般使用:id或者sys_no命名。
普通索引和联合索引,其实是一类。在建立该类索引时,可以加ix_前缀,比如:ix_product_status。
唯一索引,可以加ux_前缀,比如:ux_product_cod。
2.字段类型
在设计表时,我们在选择字段类型时,可发挥空间很大。
时间格式的数据有:dat、dattim和timstamp等等可以选择。
字符类型的数据有:varchar、char、txt等可以选择。
数字类型的数据有:int、bigint、smallint、tinyint等可以选择。
说实话,选择很多,有时候是一件好事,也可能是一件坏事。
如何选择一个合适的字段类型,变成了我们不得不面对的问题。
如果字段类型选大了,比如:原本只有1-10之间的10个数字,结果选了bigint,它占8个字节。
其实,1-10之间的10个数字,每个数字1个字节就能保存,选择tinyint更为合适。
这样会白白浪费7个字节的空间。
如果字段类型择小了,比如:一个18位的id字段,选择了int类型,最终数据会保存失败。
所以选择一个合适的字段类型,还是非常重要的一件事情。
以下原则可以参考一下:
尽可能选择占用存储空间小的字段类型,在满足正常业务需求的情况下,从小到大,往上选。如果字符串长度固定,或者差别不大,可以选择char类型。如果字符串长度差别较大,可以选择varchar类型。是否字段,可以选择bit类型。枚举字段,可以选择tinyint类型。主键字段,可以选择bigint类型。金额字段,可以选择dcimal类型。时间字段,可以选择timstamp或dattim类型。
3.字段长度
前面我们已经定义好了字段名称,选择了合适的字段类型,接下来,需要重点