对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。
系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。
后端开发的日常工作,需要不断的建库和建表,来满足业务需求。
通常情况下,建库的频率比建表要低很多,所以,我们这篇文章主要讨论建表相关的内容。
如果我们在建表的时候不注意细节,等后面系统上线之后,表的维护成本变得非常高,而且很容易踩坑。
今天就跟大家一起聊聊,数据库建表的18个小技巧。
建表的时候,给表
、字段
和索引
起个好名字,真的太重要了。
1.1 见名知意
名字就像表
、字段
和索引
的一张脸,可以给人留下第一印象。
好的名字,言简意赅,见名知意,让人心情愉悦,能够提高沟通和维护成本。
坏的名字,模拟两可,不知所云。而且显得杂乱无章,看得让人抓狂。
反例:
用户名称字段定义成:t_user_xxx、用户_name、name、user_name_123456789
你看了可能会一脸懵逼,这是什么骚操作?
正例:
用户名称字段定义成:user_name
温馨提醒一下,名字也不宜过长,尽量控制在
30
个字符以内。
1.2 大小写
名字尽量都用小写字母
,因为从视觉上,小写字母更容易让人读懂。
反例:
字段名:PRODUCT_NAME、PRODUCT_name
全部大写,看起来有点不太直观。而一部分大写,一部分小写,让人看着更不爽。
正例:
字段名:product_name
名字还是使用全小写字母,看着更舒服。
1.3 分隔符
很多时候,名字为了让人好理解,有可能会包含多个单词。
那么,多个单词间的分隔符
该用什么呢?
反例:
字段名:productname、productName、product name、product@name
单词间没有分隔,或者单词间用驼峰标识,或者单词间用空格分隔,或者单词间用@分隔,这几种方式都不太建议。
正例:
字段名:product_name
强烈建议大家在单词间用_
分隔。
1.4 表名
对于表名,在言简意赅,见名知意的基础之上,建议带上业务前缀
。
如果是订单相关的业务表,可以在表名前面加个前缀:order_
。
例如:order_pay、order_pay_detail等。
如果是商品相关的业务表,可以在表名前面加个前缀:product_
。
例如:product_spu,product_sku等。
这样做的好处是为了方便归类,把相同业务的表,可以非常快速的聚集到一起。
另外,还有有个好处是,如果哪天有非订单的业务,比如:金融业务,也需要建一个名字叫做pay的表,可以取名:finance_pay,就能非常轻松的区分。
这样就不会出现同名表
的情况。
1.5 字段名称
字段名称
是开发人员发挥空间最大,但也最容易发生混乱的地方。
比如有些表,使用flag表示状态,另外的表用status表示状态。
可以统一一下,使用status表示状态。
如果一个表使用了另一个表的主键,可以在另一张表的名后面,加_id
或_sys_no
,例如:
在product_sku表中有个字段,是product_spu表的主键,这时候可以取名:product_spu_id或product_spu_sys_no。
还有创建时间,可以统一成:create_time,修改时间统一成:update_time。
删除状态固定为:delete_status。
其实还有很多公共字段,在不同的表之间,可以使用全局统一的命名规则,定义成相同的名称,以便于大家好理解。
1.6 索引名
在数据库中,索引有很多种,包括:主键、普通索引、唯一索引、联合索引等。
每张表的主键只有一个,一般使用:id
或者sys_no
命名。
普通索引和联合索引,其实是一类。在建立该类索引时,可以加ix_
前缀,比如:ix_product_status。
唯一索引,可以加ux_
前缀,比如:ux_product_code。