toB 应用设计系列 - 数据库设计篇

toB 应用设计系列 - 导航

适用范围

本文仅适用于 mysql 数据库

原则

  • 数据库只做存储使用, 计算 / 业务逻辑放到应用层
  • 尽量遵循三范式

高级功能

  • 禁止使用触发器 / 存储过程 / 函数 / 视图

触发器非常影响插入 / 更新 / 删除 的效率, 触发器的功能可由应用层来实现
一旦放开存储过程/函数的限制, 不能保证人们会用存储过程/函数来做什么, 极有可能在存储过程/函数里进行大量的运算, 或者将业务逻辑写入; 另外, 大多数缓存在应用层实现, 存储过程/函数就无法复用缓存
触发器 / 存储过程 / 函数 / 视图 没有版本管理

字段

通用字段

  • 主键id: 尽量使用单一逻辑主键, 实体使用单一逻辑主键, 关联关系可使用复合主键; 坚决不使用业务主键, 只使用逻辑主键
  • 实体一般拥有业务唯一标识 no
  • 创建时间 create_time
  • 更新时间 update_time

数据类型

字符串类型

  • 定长字符串: char(n)
  • 不定长字符串: varchar(n)
  • 长文本 text

整数类型

无符号 unsigned

类型范围(有符号)范围(无符号)
tinyint(-128,127)(0,255)
smallint(-32 768,32 767)(0,65 535)
mediumint(-8 388 608,8 388 607)(0,16 777 215)
int(-2 147 483 648,2 147 483 647)(0,4 294 967 295)
bigint(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)

小数类型

decimal(m, d)

布尔类型

boolean

boolean 其实是 tinyint(1)

日期类型

datetime(3)

使用 datetime(3) 来精确到毫秒

约束

非空约束

字符串类型必须加非空约束, 若可空, 请加默认约束, 并默认值为空字符串
布尔类型 / 数字类型 / 日期类型尽量使用非空约束

默认约束

尽量少用

外键约束

不使用, 由应用层保证

check 约束

不使用, 由应用层保证

唯一约束

可使用

命名规则

采用下划线命名法, 英文字母全小写

字段命名

逻辑主键约定为 id
业务唯一标识约定为 no
创建时间约定为 create_time
更新时间约定为 update_time

外键约定为 {table_name}_id
引用数据字典约定为 {数据字典类型编码}_key

索引命名

  • 主键: pk_{column1}{column2}
  • 唯一索引: uk_{column1}{column2}

文档

表注释

{表中文名称}, {说明}

字段

主键

主键

业务唯一标识

业务唯一标识, {说明}

外键

外键, {table_name}.id

数据字典

数据字典, 类型编码: {xx}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值