数据库表规范
- 表名格式:模块名_表含义名,如 认证中心人员表:auth_human;如果系统功能简单,没有划分为模块,则可以以系统英文名称的缩写作为前缀,否则以各模块的英文名称缩写作为前缀
不再使用tc_,to_,tr_前缀
- 表的名称必须易于理解,使用能表达功能的英文单词或缩写英文单词,词间以
_
分割 - 在命名表时,用单数形式表示名称。例如,使用
auth_human
,而不是auth_humans - 表名用小写
- 表名称长度
不能超过30个字符
(几种数据库中Oracle要求最高) - 职责相近的表,命名规则应该相同
数据库字段规范
- 业务表须要有主键,例如自增主键
- 字段名称必须易于理解,使用能表达功能的英文单词或缩写英文单词,词间以
_
分割 - 字段名用小写,且需要加入中文注释
- 字段名称长度
不能超过30个字符
(几种数据库中Oracle要求最高) - 字段名称不要重复表的名称;例如,在名为auth_human的表中推荐使用
name
或human_name
,避免使用名为auth_human_name 的字段 - 有unique约束的varchar类型字段长度推荐设置为190(考虑到utf8mb4编码支持),但不允许超过255
- 不建议设置外键约束,但要保证与实际外键字段类型一致
数据库索引规范
- 如果字段事实上是与其它表的关键字相关联而未设计为外键引用,需建为该字段建立索引
- 常见索引列建议
- select、update、delete语句的where从句中的列
- 包含在order by、group by、distinct中的字段
- 多表join的关联列
- 不要滥用索引,限制每张表上的索引数量,建议单张表索引不超过5个
- 避免使用外键约束,但一定在表与表之间的关联键上建立索引,外键可用于保证数据的参照完整性,但建议在业务端实现,外键会影响父表和子表的写操作从而降低性能。
- 避免建立冗余索引和重复索引
- primary key(id)、index(id)、unique index(id)重复索引
- index(a,b,c)、index(a,b)、index(a)冗余索引(解释)
数据库版本管理规范
- 使用liquibase管理数据库版本
- 使用xml格式编写数据库changeset版本变更代码
- 提交到代码仓库后,changeset内容不允许再修改,例如在一个changeset中创建一个表后发现字段类型不对,而且代码已经提交到git或者svn了,这时应该创建另外一个changeset去修改字段类型
<changeSet id="create-table-oauth-code" author="xxx">
<createTable tableName="oauth_code">
<column name="code" type="VARCHAR(255)"/>
<column name="authentication" type="MEDIUMBLOB"/>
</createTable>
</changeSet>
<changeSet id="change-blob-to-text" author="xxx">
<modifyDataType tableName="oauth_code" columnName="authentication" newDataType="text"/>
</changeSet>
常用表名约定
名称 | 表含义 | 备注 |
---|---|---|
*_wf_* | 工作流相关表 | |
*_log_* | 日志相关表 | |
*_his_* | 对应历史记录表 | |
*_dic_* | 字典表 | 表示字典表命名模式 |
*_im_* | 即时通讯相关表 | |
*_job_* | 定时任务相关表 | |
*_rec_* | 案件相关表 | |
*_form_* | 表单相关表 | |
*_human_* | 人员相关表 | |
*_patrol_* | 监督员相关表 | |
*_role_* | 角色相关表 | |
auth_client | 申请接入应用表 | |
auth_client_sys_right | 应用权限表 | |
auth_client_unit | 应用部门关联表 | |
auth_dic_data_type | 数据类型字典表 | |
auth_dic_item | 通用字典项表 | |
auth_dic_table_column | 字段字典表 | |
auth_human | 用户表 | |
auth_human_relation | 人员自定义关系表 | |
auth_human_request_detail | 申请明细表(预留) | |
auth_human_role | 人员角色表 | |
auth_human_role_request | 岗位申请表(预留) | |
auth_human_unit | 人员所属部门表 | |
auth_log | 操作记录表 | |
auth_message | 消息表(预留) | |
auth_part_ex | 扩展信息表 | |
auth_reg_url | 注册地址表 | |
auth_reg_url_role_audit | 注册地址审核岗位表 | |
auth_reg_url_role_default | 注册地址初始岗位表 | |
auth_register | 注册记录表 | |
auth_role | 角色表 | |
auth_sys_right | 权限表 | |
auth_unit | 部门表 |
常用列名约定
名称 | 字段类型(mysql) | 字段类型(oracle) | 字段类型(liquibase) | 备注 |
---|---|---|---|---|
password | varchar(100) | varchar2(100 char) | varchar(100) | 可以使用包括md5,sm3,sha-1,sha-224,sha-256,sha-384在内的散列算法 |
tel_home | varchar(20) | varchar2(20 char) | varchar(20) | 家庭座机号码 |
tel_mobile | varchar(20) | varchar2(20 char) | varchar(20) | 手机号码 |
tel_office | varchar(20) | varchar2(20 char) | varchar(20) | 办公室座机号码 |
ip | int(10) | number(10) | int | ip4地址(解释) |
*_flag | tinyinit | number(3) | tinyint | 适用于delete_flag,valid_flag,gender_flag等值范围在127以内的字段,比如性别,是否删除等 |
display_order | int | number(10) | int | 显示顺序 |
create_time | datetime | date | datetime | 创建时间,精确到秒 |
create_date | date | date | date | 创建日期,精确到天 |
delete_time | datetime | date | datetime | 删除时间,精确到秒, 不允许有delete_date,记录精度不够 |
*_time | datetime | date | datetime | 时间字段,精确到秒,适用于create_time,update_time,delete_time等 |
*_date | date | date | date | 日期字段,精确到天,适用于create_date, register_date等 |
varchar(190) | varchar2(190 char) | varchar(190) | 邮箱地址 | |
postal_code | varchar(6) | varchar2(6 char) | varchar(6) | 邮编 |
address | text | varchar2(2000 char) | text | 通讯地址 |
remark | text | varchar2(2000 char) | text | 备注 |
district_id | int | number(10) | int | (城)区id |
district_name | varchar(190) | varchar2(190 char) | varchar(190) | (城)区名称 |
community_id | int | number(10) | int | 社区id |
community_name | varchar(190) | varchar2(190 char) | varchar(190) | 社区名称 |
street_id | int | number(10) | int | 街道id |
street_name | varchar(190) | varchar2(190 char) | varchar(190) | 街道名称 |
duty_grid_id | int | number(10) | int | 责任网格id |
duty_grid_name | varchar(190) | varchar2(190 char) | varchar(190) | 责任网格名称 |
duty_grid_code | varchar(190) | varchar2(190 char) | varchar(190) | 责任网格编码 |
cell_id | int | number(10) | int | 网格id |
cell_name | varchar(190) | varchar2(190 char) | varchar(190) | 网格名称 |
lat | double(18,6) | number(18,6) | double(18,6) | 纬度 |
lon | double(18,6) | number(18,6) | double(18,6) | 经度 |
coord_x | double(18,6) | number(18,6) | double(18,6) | 横坐标 |
coord_y | double(18,6) | number(18,6) | double(18,6) | 纵坐标 |
coord_type | int | number(10) | int | 坐标类型 |
speed | double(10,2) | number(10,2) | double(10,2) | 速度(单位米每秒,m/s) |
speed_ms | double(10,2) | number(10,2) | double(10,2) | 速度(单位米每秒,m/s) |
speed_kmh | double(10,2) | number(10,2) | double(10,2) | 速度(单位千米每小时,km/h) |
altitude | double(10,2) | number(10,2) | double(10,2) | 高度(单位米,m) |
altitude_m | double(10,2) | number(10,2) | double(10,2) | 高度(单位米,m) |
altitude_km | double(10,3) | number(10,3) | double(10,3) | 高度(单位千米,km) |
angle | double(3,2) | number(3,2) | double(3,2) | 度数 |