MySQL 数据库设计规范
Data:
2017-06-21 21:09:21Form:
JournalClick:
12
一般命名规则
- [ 强制 ] 使用小写
- [ 强制 ] 使用下划线代替空格
- [ 强制 ] 通俗易懂
- [ 强制 ] 不应超过 32 个字符
数据库
- [ 强制 ] 遵守一般命名规则
- [ 强制 ] 使用单数
- [ 强制 ] 创建数据库时必须显式指定
utf8
字符集
数据表
- [ 强制 ] 遵守一般命名规则
- [ 强制 ] 使用单数
- [ 强制 ] 创建表时必须显式指定
utf8
字符集
- [ 强制 ] 创建表时必须显式指定存储引擎,如无特殊,一律为
InnoDB
- [ 建议 ] 核心表必须有行数据的创建时间和最后更新时间字段
- [ 建议 ] 表中所有字段都是
NOT NULL
,业务可以根据需要定义 DEFAULT
的值
- [ 建议 ] 将
text
等大字段拆分到其他表里,仅在需要时读取
数据字段
- [ 强制 ] 遵守一般命名规则
- [ 强制 ] 避免使用数据库关键字作为字段名称,如:
order
、date
、key
- [ 强制 ] 避免使用与表名相同的字段名,容易造成混淆
- [ 建议 ] 字段尽可能有
comment
- [ 建议 ] 尽可能选择较短的 1 - 2 个单词
字段数据类型优化
- [ 建议 ] 自增字段推荐使用
bigint
(int
溢出后会导致报错)
- [ 建议 ] 枚举字段(如性别、状态)推荐使用
tinytint
或 smallint
(不使用 enum
)
- [ 建议 ] IP 字段推荐使用
int
类型
- [ 建议 ] 金额字段推荐使用
int
、bigint
,以分为单位,通过乘除 100 进行存取
- [ 建议 ] 文本字段尽量使用
varchar
存储(一般建议字符数 < 2700)
- [ 建议 ] 时间字段尽量使用
timestamp
,更为高阶的,使用 int
存储时间戳
禁止使用的 SQL 语句
- [ 高危 ] 禁用带
limit
的更新语句(导致主从不一致),如 UPDATE|DELETE ... WHERE ... LIMIT ...
- [ 强制 ] 禁止使用关联子查询(效率低下),如
UPDATE ... SET ... WHERE id IN(SELECT id FROM user WHERE ...)
- [ 强制 ] 禁用
ON DUPLICATE KEY UPDATE
(在高并发下导致主从不一致),如 INSERT INTO ... ON DUPLICATE KEY UPDATE ...