# 数据库原型设计规范
推荐使用数据库设计IDE工具MysqlWorkBench
进行表设计,通过MysqlWorkBench的Forward Engineer工具直接生成数据库Sql脚本或者直接生成数据库。
也可以直接用Phpmyadmin或者Navicat直接进行数据库表定义。
请注意以下规范中提到的表注释和列注释要求,它直接关系后面代码生成和数据库说明书的生成, 严格按规范定义后, 即可做到一处定义,代码、文档都可自动实时生成相应的注释, 无需额外的工作。
# 规则详细说明
以下规范中定义的 "_" 是半角, 不是全角。
表名定义: 库名缩写 + "_" + 目录名 + "_" + 类名[头字母小写]
- 如乐活的博客表:
- 库名缩写: bb
- 目录名: core
- 类名: Blog
- 所以表名:bb_core_blog
- 表名最后一段不能命名为特殊关键字如new: 如bb_core_new
- 如乐活的博客表:
每张表需要定义表注释
每张表每列需定义列注释
每张表需定义字段:
- 标识 : 类名[头字母小写] + "_" + "id"
- 创建时间: commitTime
- 更新时间: updateTime
标识列名定义为: 类名[头字母小写] + "_" + "id"
- 如乐活的博客表: blog_id
表与表之间存在关系的主键与原表中的主键定义一致
用户表和用户详情表存在一对一关系, 在用户详情中的关系主键user_id和用户表的主键是一致的。
用户表和角色表存在多对多关系, 在中间关系表:bb_user_re_userrole中关系主键user_id和用户表的主键是一致的,role_id和角色表的主键是一致的。
用户表和博客表存在一对多关系, 在博客表:bb_core_blog中关系主键user_id和用户表的主键是一致的。
标识列为自增长, AI列勾选。
列类型为int时, 默认值为0
列名不能为name, 最好加前缀, 如博客表就为blog_name。
枚举类型注释定义:
- 枚举值: 枚举值说明-枚举值英文名(或拼音名)
- 每句之间以回车或者;分割
- 如用户详情表中的性别定义为: sexType
- 类型: enum('0', '1', '2')
- 列注释如下
性别 0:女-female 1:男-male 2:待确认-unknown
updateTime默认值是CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
图片列定义规则:
- 列名称为: image|img|ico|logo|pic
大数据, 需TextArea输入大文本列定义规则:
- 列名称为: intro|memo
- 列类型为: text|longtext
- 特殊情况: 列长度>=500并且名称不能为images|link|ico
邮箱列定义规则:
- 列名称含有: email
- 列名称注释含有: 邮件,邮箱
- 并且列名称不含有is【如是否发送邮件列就不是邮箱列】
密码列定义规则:
表名称含有: member|user|admin 并且列名称含有: password
当和其他表是一对一的关系:
- 需设置外键字段为Unique
- 如用户和用户详情表, 则需要在用户详情表里指明外键user_id是Unique。
多对多关系表名称中间用"_re_"连接。如: bb_user_re_userrole
树结构定义, 需要字段:parent_id 和 level, 可选字段: 当前节点下有多少子节点可选择: countChild 或者 childCount, 示例可参考地区的定义表: bb_dic_region。