dbaplus社群 2024年08月16日
阿里的MySQL建表规范,居然只有10条……
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了阿里巴巴的MySQL建表规范,该规范简洁高效,包含10条原则,涵盖了字段命名、数据类型、索引、主键、小数类型、字符串长度、强制字段等方面。规范旨在提高代码可读性、可维护性和数据安全性,并避免一些常见的错误。

🤔 **字段命名规范:** 1. 表达是否概念的字段,必须使用`is_xxx`的形式命名,例如`is_deleted`表示是否删除,数据类型必须是`unsigned tinyint`,1表示是,0表示否。 2. 表名和字段名禁止出现大写,禁止数字开头,禁止两个下划线中间只有数字,例如`aliyun_admin`是正确的命名,而`AliyunAdmin`和`level_3_name`是错误的命名。 3. 表名禁止使用复数形式,例如`users`应该改为`user`。 4. 禁止使用保留字,例如`desc`、`range`、`match`、`delayed`等。

🔑 **索引命名规范:** 1. 主键索引名:`pk_xxx`。 2. 唯一索引名:`uk_xxx`。 3. 普通索引名:`idx_xxx`。

📏 **数据类型规范:** 1. 小数类型使用`decimal`,禁止使用`float`和`double`,因为`float`和`double`存在精度损失。 2. 如果字符串长度非常相近,必须使用定长`char`,预先分配存储空间,不会触发重新分配。 3. 如果字符串长度较长,且内容长度差异较大,使用`varchar`,不预先分配存储空间,比较节省空间。 4. 如果字符串长度大部分超过5000,使用`text`,独立出一张表单独存储,避免影响主表其他字段索引效率。

💪 **强制字段规范:** 1. 必须具备`id`字段,类型为`bigint unsigned`,单表时自增,步长为1,不具备业务含义。 2. 必须具备`create_time`字段,类型为`datetime`,除非记录时区信息,使用`timestamp`。 3. 必须具备`update_time`字段,类型同上。 4. 禁止进行物理删除操作,逻辑操作保留了数据资产的同时,能够追溯操作行为。

🚫 **其他规范:** 1. 禁止使用`float`和`double`类型,因为它们存在精度损失。 2. 如果需要存储大文本,使用`text`类型,独立出一张表单独存储,避免影响主表其他字段索引效率。

2024-08-01 07:16 广东

很多公司有很厚一本的MySQL规范,规范内容越多,越难落地执行。


很多公司有很厚一本的MySQL规范,规范内容越多,越难落地执行。


阿里的MySQL建表强制规范只有10条,大伙可以参考借鉴。




画外音,另外:

索引强制规范有4条,SQL强制规范有9条;

建议规范与参考规范若干。




规范一:是否字段


1. 表达是否概念的字段,必须使用is_xxx的形式命名;


2. 数据类型必须是 unsigned tinyint;


3. 1表示是,0表示否;


举例:是否删除


正确:使用is_deleted,1表示删除,0表示未删除


错误:deleted, if_deleted, delete_or_not


规范二:字母与数字


1. 表名,字段名禁止出现大写;




画外音:MySQL在Windows下不区分大小写,Linux下虽然区分,但为了避免节外生枝,统一禁止大写。




2. 禁止数字开头,禁止两个下划线中间只有数字;


举例:


正确:aliyun_admin,level3_name


错误:AliyunAdmin,level_3_name



规范三:表名禁止使用复数


表名表示实体内容,不是实体数量,禁止使用复数。


规范四:禁止使用保留字


常见的例如:desc,range,match,delayed...


规范五:主键,唯一索引,普通索引命名规范


1. 主键索引名:pk_xxx




画外音:primary key




2. 唯一索引名:uk_xxx




画外音:unique key




3. 普通索引名:idx_xxx



画外音:index




规范六:小数类型规范


1. 小数类型使用decimal;


2. 禁止使用float和double;




画外音:float和double存在精度损失,比较的时候,可能得到意想不到的结果。




3. 如果范围超过decimal,可以拆成整数与小数分开存储;



规范七:字符串长度非常相近,必须使用定长char




画外音:预先分配存储空间,不会触发重新分配。




规范八:可变字符串规范


1. 如果字符串长度较长,且内容长度差异较大,使用varchar;




画外音:不预先分配存储空间,比较节省空间。




2. 如果字符串长度大部分超过5000,使用text,独立出一张表单独存储;




画外音:避免影响主表其他字段索引效率。




规范九:强制字段


1. 必须具备id字段:类型为bigint unsigned,单表时自增,步长为1,不具备业务含义;


2. 必须具备create_time字段:类型为datetime(除非记录时区信息,使用timestamp);


3. 必须具备update_time字段:同上;


规范十:禁止进行物理删除操作




画外音:逻辑操作保留了数据资产的同时,能够追溯操作行为。




贵司有MySQL规范吗?你觉得他们的建表规范合理吗?


欢迎评论区讨论~



来源丨公众号:架构师之路(ID:road5858)

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn



跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MySQL 建表规范 阿里巴巴 数据库
相关文章