|
@@ -0,0 +1,87 @@
|
|
|
+# 数据库设计规范
|
|
|
+######版本号:V0.0.1
|
|
|
+
|
|
|
+## 基本规范
|
|
|
+* 数据库统一使用MySQL,数据库存储引擎统一使用InnoDB
|
|
|
+* 字符集统一使用`utf8mb4`,排序规则统一使用`utf8mb4_general_ci`
|
|
|
+* 数据表、数据字段必须加入中文注释
|
|
|
+* 禁止使用存储过程,视图,触发器,Event
|
|
|
+* 文件或图片统一存储在文件系统中,URI存储文件的相对路径
|
|
|
+* 数据库连接优先使用内网域名,尽量避免使用IP连接
|
|
|
+* 数据表必须设置主键,主键数据类型必须为递增的整数
|
|
|
+* 不使用组合索引
|
|
|
+* 所有字段必须是`NOT NULL`,并提供默认值
|
|
|
+* 不适用ENUM枚举,使用`tinyint`替代,通过程序实现枚举功能
|
|
|
+* 单表索引字段数建议不要超过5个
|
|
|
+* 禁止使用SELECT *,只获取必要的字段
|
|
|
+* 禁止使用属性隐式转换,如`SELECT id FROM user_user WHERE mobile=13812345678`,而是`SELECT id FROM user_user WHERE mobile='13812345678'`
|
|
|
+* 禁止使用负向查询,如`NOT`,`!=`, `<>`, `!<`, `!>`, `NOT IN`, `NOT LIKE`等
|
|
|
+* 建议对于同一个字段的OR查询改成IN查询,如`SELECT id FROM user_user WHERE status=1 OR status=2`,改成`SELECT id FROM user_user WHERE status IN (1,2)`
|
|
|
+* 如非必要,尽量不使用联合查询,采用分步查询的方式实现更好
|
|
|
+* 应用程序必须捕获SQL异常,并做处理,必须避免将SQL异常信息直接呈现给前端用户。
|
|
|
+* 布尔类型的数值使用`tinyint`存储,0表示`false`,1表示`true`
|
|
|
+* 涉及货币的数据存储统一用整型存储,出库计算时通过程序移位完成。
|
|
|
+* 重要隐私信息、金融数据必须加密存储,如银行卡号。
|
|
|
+* 密码必须使用不可逆加密方式存储,不得存储明文。
|
|
|
+* 数值类型除非有特殊说明,否则默认设置为无符号整数。
|
|
|
+
|
|
|
+## 命名规范
|
|
|
+* 数据库名称统一使用{域名}.{租户名称}-{从库备份库标识}.{数据库环境}的方式命名。
|
|
|
+* 域名不包括.com,.cn这种尾缀,如www.huiguanjia.cn,则域名为huiguanjia。
|
|
|
+* 租户名称为租户唯一标识,若无租户则使用产品名称,如数据库为从库或备份库,则加上-slave或-backup。
|
|
|
+* 数据库环境分为线上环境,标识为online;开发环境,标识为dev;测试环境,标识为test。
|
|
|
+* 示例数据库名称如下:
|
|
|
+ - huiguanjia.xch.online:绘管家新成海线上数据库
|
|
|
+ - huiguanjia.xch.dev:绘管家新成海开发数据库
|
|
|
+ - huiguanjia.xch.test:绘管家新成海测试数据库
|
|
|
+ - huiguanjia.xch-salve.online:绘管家新成海线上从数据库
|
|
|
+ - huiguanjia.xch-backup.online:绘管家新成海线上备份数据库
|
|
|
+* 数据表字段统一使用小写字母,多个单词采用下划线分隔。单词不允许使用拼音,单个单词字符在15字符以内不允许缩写。
|
|
|
+* 数据表名采用模块名_实体名的方式命名,,中间表两个实体时间通过to连接,表名称长度不得超过60个字符(MySQL最大表名称长度为64,Oracle为30),建议表名在30个字符以内,示例数据表名如下:
|
|
|
+ - `service_feedback`:物业服务反馈表
|
|
|
+ - `service_feedback_detail`: 物业服务反馈详情表
|
|
|
+ - `charge_standard_to_house`: 收费系统收费标准关联房屋表
|
|
|
+
|
|
|
+* 数据表字段名禁用编程语言关键字,如`abstract`, `int`, `string`, `public`等。
|
|
|
+
|
|
|
+## 常用字段
|
|
|
+__常用字段要求必须使用下表的字段,不允许重复新增新的字段名。__
|
|
|
+
|
|
|
+| 名称 | 数据库字段名 | 数据类型 | 最小长度 | 最大长度 | 备注 |
|
|
|
+|:-------------:|:-------------:|:---------:|:----------:|:--------:|:------------|
|
|
|
+| 主键 | id | int | 10 | 16 | 数据表主键 |
|
|
|
+| 姓名 | name | varchar | 16 | 64 | 推荐长度设置为64 |
|
|
|
+| 性别 | sex | tinyint | 1 | 1 | 0=女,1=男 |
|
|
|
+| 生日 | birthday | int | 11 | 11 | __有符号整数__ |
|
|
|
+| 手机号 | mobile | varchar | 16 | 32 | 推荐长度设置为20 |
|
|
|
+| 电话号码 | telephone | varchar | 16 | 32 | 推荐长度设置为16 |
|
|
|
+| 标题 | title | varchar | 64 | 128 | 推荐长度设置为128 |
|
|
|
+| 摘要 | summary | varchar | 64 | 128 | 推荐长度设置为64 |
|
|
|
+| 备注 | remark | varchar | 64 | 128 | 推荐长度设置为64 |
|
|
|
+| 创建时间 | created_at | int | 11 | 14 | 时间戳,如果保留毫秒数则使用14位 |
|
|
|
+| 更新时间 | updated_at | int | 11 | 14 | 时间戳,如果保留毫秒数则使用14位 |
|
|
|
+| 创建人 | created_by | int | 10 | 16 | 存储数据创建者ID |
|
|
|
+| 更新人 | updated_by | int | 10 | 16 | 存储最近一次更新者ID |
|
|
|
+| 省份名 | province_name | varchar | 16 | 32 | 推荐长度设置为32 |
|
|
|
+| 省份编号 | province_id | int | 9 | 11 | 推荐长度设置为10 |
|
|
|
+| 城市名 | city_name | varchar | 16 | 32 | 推荐长度设置为32 |
|
|
|
+| 城市编号 | city_id | int | 9 | 11 | 推荐长度设置为10 |
|
|
|
+| 地区名 | district_name | varchar | 16 | 32 | 推荐长度设置为32 |
|
|
|
+| 地区编号 | district_id | int | 9 | 11 | 推荐长度设置为10 |
|
|
|
+| 经度 | longitude | decimal | 10,6 | 10,6 | |
|
|
|
+| 纬度 | latitude | decimal | 10,6 | 10,6 | |
|
|
|
+| 单价 | price | decimal | 8,2 | 16,6 | 推荐使用12,6,如果是参与计算的单价建议保留6位小数|
|
|
|
+| 删除标记 | deleted | tinyint | 1 | 1 | 1=已删除,0=正常 |
|
|
|
+| 数据可见性 | visible | tinyint | 1 | 1 | 0=不可见,1=可见,仅适用于针对C端用户 |
|
|
|
+| 是否启用 | enable | tinyint | 1 | 1 | 0=禁用,1=启用 |
|
|
|
+
|
|
|
+##业务表必备字段
|
|
|
+业务表是指关系产品具体业务逻辑实现的数据表,不包括诸如日志,配置等表。业务表要求必须有以下字段:
|
|
|
+
|
|
|
+* `id`:主键
|
|
|
+* `created_at`:创建时间
|
|
|
+* `created_by`: 创建人(如非后台创建的数据设置为0)
|
|
|
+* `updated_at`: 最近一次更新时间(创建时等于创建时间)
|
|
|
+* `updated_by`: 最近一次更新人(如非后台更新,设置为0,创建时等于创建人)
|
|
|
+* `deleted`: 删除标记(默认为0,即正常状态)
|
|
|
+* `remark`: 备注(默认为空字符串)
|