表设计
名字
见名知意
言简意赅,见名知意,能够提高沟通和维护成本。
模拟两可,不知所云,显得杂乱无章,让人难以理解。
- 示例
用户名称字段定义成:user_name大小写
名字尽量都用小写字母,因为从视觉上,小写字母更容易让人读懂。
- 示例
字段名:product_name分隔符
- 示例
字段名:product_name强烈建议大家在单词间用 _ 分隔。
表名
带上业务前缀。
订单相关:order_,例如:order_pay、order_pay_detail等。
商品相关:product_,例如:product_spu,product_sku等。
字段名称
- 字段统一:如 状态统一使用
status,而不是一个地方使用status另一个地方使用flag。created_at创建时间updated_at更新时间deleted_at删除时间
- 关联关系字段名带上关联表名称:如
classes.id和students.class_id。
很多公共字段,在不同的表之间,可以使用全局统一的命名规则,定义成相同的名称,以便于大家好理解。
索引名
索引有很多种,包括:主键、普通索引、唯一索引、联合索引等。
每张表的主键只有一个,一般使用 id 命名。
普通索引和联合索引,其实是一类。在建立该类索引时,可以加 index_ 前缀,比如:index_users_status 。
唯一索引,可以加 unique_ 前缀,比如:unique_users_email。
字段类型
时间格式的数据有:date、datetime和timestamp等等可以选择。
字符类型的数据有:varchar、char、text等可以选择。
数字类型的数据有:int、bigint、smallint、tinyint等可以选择。
参考原则
- 尽可能选择占用存储空间小的字段类型,在满足正常业务需求的情况下,从小到大,往上选。
- 如果字符串长度固定,或者差别不大,可以选择char类型。如果字符串长度差别较大,可以选择varchar类型。
- 是否字段,可以选择bit类型。
- 枚举字段,可以选择tinyint类型。
- 主键字段,可以选择bigint类型。
- 金额字段,可以选择decimal类型。
- 时间字段,可以选择timestamp或datetime类型。