用例规约怎么写(数据库设计规范1建表规约)

本数据库设计规范是以MySQL数据库为基准,主要分为4个部分,即建表规约、索引规约、SQL 语句和ORM 映射。其中,将阐述在建表过程中的要求和约定,例如数据库名称、表名称、视图名称以及字段名称...

本数据库设计规范是以MySQL数据库为基准,主要分为4个部分,即建表规约、索引规约、SQL 语句和ORM 映射。其中,将阐述在建表过程中的要求和约定,例如数据库名称、表名称、视图名称以及字段名称和数据类型等建议,以及规范索引的创建和使⽤规则,同时将说明编写SQL语句的⽅法,SQL结构、字段别名、表别名使⽤等,最后还将描述如何在ORM中进⾏数据库表映射等。

建表规约

强制要求

1. 表达是/否概念的字段,必须使⽤ is_xxx 的⽅式命名,数据类型是 unsigned tinyint (1 表示

是, 0 表示否)。

说明: 任何字段如果为⾮负数,必须是 unsigned。

正例: 表达逻辑删除的字段名 is_deleted, 1 表示删除, 0 表示未删除。

2. 表名、字段名必须使⽤⼩写字⺟或数字,禁⽌出现数字开头,禁⽌两个下划线中间只出现数字。

说明: MySQL 在 Windows 下不区分⼤⼩写,但在 Linux 下默认是区分⼤⼩写。因此,数据库

名、表名、字段名,都不允许出现任何⼤写字⺟,避免节外⽣枝。

正例: hap_admin, rdc_config, level3_name

反例: HapAdmin, rdcConfig, level_3_name 数据库字段名的修改代价很⼤,因为⽆法进⾏

预发布,所以字段名称需要慎重考虑。

3. 表名不使⽤复数名词。

说明: 表名应该仅仅表示表⾥⾯的实体内容,不应该表示实体数量,对应于 DO 类名也是单数形

式,符合表达习惯。

4. 禁⽤保留字,如 desc、 range、 match、 delayed 等, 请参考 MySQL 官⽅保留字。

5. 主键索引名为 pk_字段名; 唯⼀索引名为 uk_字段名; 普通索引名则为 idx_字段名。

说明: pk_ 即 primary key; uk_ 即 unique key; idx_ 即 index 的简称。

6. ⼩数类型为 decimal,禁⽌使⽤ float 和 double。

说明: float 和 double 在存储的时候,存在精度损失的问题,很可能在值的⽐较时,得到不正确

的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和⼩数分开存储。

7. 如果存储的字符串⻓度⼏乎相等,使⽤ char 定⻓字符串类型。

8. varchar 是可变⻓字符串,不预先分配存储空间,⻓度不要超过5000,如果存储⻓度⼤于此值,定义字段类型为 text,独⽴出来⼀张表,⽤主键来对应,避免影响其它字段索引效率。

说明: 该表的命名以 原表名_字段缩写 的格式命名。

9. 表必备字段: id、create_time、update_time、create_by、update_by、

object_version_number。也可以叫做who字段,就是每个表⾥必须具备的字段。这些字段起到似

metadata的作⽤。这些字段的作⽤很⼤,例如,数据分析的时候,可以使⽤update_time作为数据抽取的时间戳字段等。

id 必为主键,类型为 unsigned bigint、单表时⾃增、步⻓为 1。create_time 是此条数据的创建时间,数据类型为datetime 类型。update_time是此条数据的最后更新时间,数据类型为 datetime 类型。create_by是此条数据的创建⼈,数据类型为unsigned bigint类型。update_by是此条数据的最后更新⼈,数据类型为unsigned bigint类型。object_version_number是此条数据的版本号,如果启⽤数据库数据版本控制,则会使⽤到此数据。

以下是基于MySQL数据库的创建脚本,可供参考。

column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue:

"1")

column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0")column(name: "creation_time", type: "DATETIME", defaultValueComputed:

"CURRENT_TIMESTAMP")

column(name: "updated_by", type: "BIGINT UNSIGNED", defaultValue: "0")column(name: "update_time", type: "DATETIME", defaultValueComputed:

"CURRENT_TIMESTAMP")

10. 表的命名最好是加上业务名称_表的作⽤。

正例: kanban_task 、 devops_project 、 website_config

推荐规约

1. 数据库名称或者编码与应⽤名称或者编码尽量⼀致。

2. 如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。

3. 字段允许适当冗余(所谓冗余是指在不同的表⾥⾯存储相同的字段),以提⾼查询性能,但必须考虑数据⼀致。冗余字段应遵循:

不是频繁修改的字段。不是 varchar 超⻓字段,更不能是 text 字段。

正例: 商品类⽬名称使⽤频率⾼, 字段⻓度短,名称基本⼀成不变, 可在相关联的表中冗余存储

类⽬名称,避免关联查询。

4. 单表⾏数超过 500 万⾏或者单表容量超过 2GB,才推荐进⾏分库分表。

说明: 如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。

规约参考

合适的字符存储⻓度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

正例: 如下表,其中⽆符号值可以避免误存负数,且扩⼤了表示范围。

数据库设计规范——1.建表规约

几种数字类型说明

  • 发表于 2022-10-30 00:55:30
  • 阅读 ( 206 )
  • 分类:科技

0 条评论

请先 登录 后评论
学习教程
学习教程

536 篇文章

你可能感兴趣的文章

相关问题