• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

MySQL 数据库设计规范

Data: 2017-06-21 21:09:21Form: JournalClick: 1

一般命名规则

  • [ 强制 ] 使用小写
  • [ 强制 ] 使用下划线代替空格
  • [ 强制 ] 通俗易懂
  • [ 强制 ] 不应超过 32 个字符

数据库

  • [ 强制 ] 遵守一般命名规则
  • [ 强制 ] 使用单数
  • [ 强制 ] 创建数据库时必须显式指定 utf8 字符集

数据表

  • [ 强制 ] 遵守一般命名规则
  • [ 强制 ] 使用单数
  • [ 强制 ] 创建表时必须显式指定 utf8 字符集
  • [ 强制 ] 创建表时必须显式指定存储引擎,如无特殊,一律为 InnoDB
  • [ 建议 ] 核心表必须有行数据的创建时间和最后更新时间字段
  • [ 建议 ] 表中所有字段都是 NOT NULL,业务可以根据需要定义 DEFAULT 的值
  • [ 建议 ] 将 text 等大字段拆分到其他表里,仅在需要时读取

数据字段

  • [ 强制 ] 遵守一般命名规则
  • [ 强制 ] 避免使用数据库关键字作为字段名称,如:orderdatekey
  • [ 强制 ] 避免使用与表名相同的字段名,容易造成混淆
  • [ 建议 ] 字段尽可能有 comment
  • [ 建议 ] 尽可能选择较短的 1 - 2 个单词

字段数据类型优化

  • [ 建议 ] 自增字段推荐使用 bigintint 溢出后会导致报错)
  • [ 建议 ] 枚举字段(如性别、状态)推荐使用 tinytintsmallint(不使用 enum
  • [ 建议 ] IP 字段推荐使用 int 类型
  • [ 建议 ] 金额字段推荐使用 intbigint,以分为单位,通过乘除 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 ...
Name:
<提交>