Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 16

数据库结构设计说明

危化品大屏
数据库结构设计说明
数据库结构设计说明

目 录
1 数据库(MySQL)开发规范....................................................................................................4
1.1 说明..............................................................................................................................4
1.2 概述..............................................................................................................................4
2 命名规范...................................................................................................................................5
2.1 总则..............................................................................................................................5
2.2 数据库命名...................................................................................................................5
2.3 表命名..........................................................................................................................5
2.4 字段命名......................................................................................................................5
2.5 索引命名......................................................................................................................5
2.6 示例..............................................................................................................................6
3. 对象设计规范...........................................................................................................................7
3.1 总则..............................................................................................................................7
3.2 数据类型......................................................................................................................7
3.2.1 数值类型...........................................................................................................7
3.2.2 字符串类型.......................................................................................................7
3.2.3 时间类型...........................................................................................................8
3.3 表设计..........................................................................................................................8
3.4 约束使用......................................................................................................................9
3.4.1 主键...................................................................................................................9
3.4.2 唯一约束...........................................................................................................9
3.4.3 外键...................................................................................................................9
3.4.4 非空列.............................................................................................................10
3.4.5 存储过程、触发器、视图、计划任务.........................................................10
4 SQL 编写规范..........................................................................................................................10
4.1 绑定变量与替代变量.................................................................................................10
4.1.1 原则.................................................................................................................10
4.2 数据类型转换.............................................................................................................10
4.2.1 原则.................................................................................................................10
4.2.2 说明.................................................................................................................10
4.2.3 示例.................................................................................................................11
4.3 "select * from …"使用.................................................................................................11
4.3.1 原则.................................................................................................................11
4.3.2 说明.................................................................................................................11
4.4 "insert into tablename values()"使用.........................................................................11
4.4.1 原则.................................................................................................................11
4.4.2 说明.................................................................................................................11
4.5 表连接........................................................................................................................12
4.5.1 原则.................................................................................................................12
4.5.2 说明.................................................................................................................12
4.5.3 示例.................................................................................................................12
4.6 分页查询....................................................................................................................13
4.6.1 说明.................................................................................................................13
数据库结构设计说明

4.6.2 示例.................................................................................................................13
5 数据库级别规范.....................................................................................................................13
5.1 连接池的使用.............................................................................................................13
5.2 存储引擎的选择.........................................................................................................13
数据库结构设计说明

1 数据库(MySQL)开发规范

1.1说明

本规范包含 危化品大屏项目 使用 MySQL 数据库时所需要遵循的所有对象设计(数


据库,表,字段),所需要遵循的命名,对象设计,SQL 编写等的规范约定。

所有内容都为必须严格执行的项目,执行过程中有任何疑问,请联系 DBA Team 取


得帮助。

1.2概述

禁止明文传播数据库帐号和密码。

禁止开发工程师通过应用帐号登录生产数据库。

禁止应用在服务器安装 MySQL 客户端(可以安装开发包)。

禁止开发人员在 SQL 中添加 Hint,Hint 只能由 DBA 审核后添加。

禁止使用悲观锁定,即读锁 select … for update。

禁止在开发代码中使用 DDL 语句,比如 truncate,alter table … 等。

禁止 DML 语句的 where 条件中包含恒真条件(如:1=1)。

2 命名规范

1.3总则

数据库对象名仅可包含小写英文字母、数字、下划线(_)三类字符,并以英文字母
开头。

PAGE \* MERGEFORMAT11
数据库结构设计说明

数据库对象命名禁止使用 MySQL 保留字。

多个单词之间用下划线(_)分隔。

对象名称长度若超过限制,则使用简写/缩写命名。

1.4数据库命名

数据库以"db_"前缀 + "站点名_"前缀及其所服务的应用名称命名。

1.5表命名

所属同一模块的表必须以模块名作为前缀命名。

历史数据表在原表基础上增加"_his"后缀命名。

1.6字段命名

布尔意义的字段以"_flag"作为后缀,前接动词。如:表示逻辑删除意义的字段可命名
为 delete_flag。

各表间相同意义的字段(如:作为连接关系的引用字段)使用相同的字段名。

1.7索引命名

唯一索引以 uk_tablename_columnnames 方式命名

普通索引以 idx_tablename_columnnames 方式命名

组合索引以 idx_tablename_column1_column2... 方式命名

1.8 示例

站点名:maymay

PAGE \* MERGEFORMAT11
数据库结构设计说明

模块名:order ;

数据表:item;

字段组成:order_item_id,add_time,raw_update_time,c1,c2,c3,c4,c5

标准数据库名:db_maymay_order;

标准数据表名:order_item;

历史数据表名:order_item_his;

索引需求:c1 唯一,c2 和 c3 组合索引:uk_order_item_c1, idx_order_item_c2_c3

字段实际意义:是否已删除;

标准字段名:delete_flag;

字段 order.order_id 被 order_item 引用;

order_item 表中与之对应的字段命名必须为:order_id

3 对象设计规范

1.9总则

所有表、字段必须添加能够清楚表示其含义的注释。状态类字段的注释中必须明确
列出各状态值的说明。

MySQL 数据库中仅可以使用下文提及的数据类型。

PAGE \* MERGEFORMAT11
数据库结构设计说明

1.10 数据类型

1.10.1 数值类型
DECIMAL(M,D)

当表示定点小数的情况下使用该类型,禁止使用浮点类型,会带来不精确。定点数在
MySQL 内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据。

INT 系列

所 有 整 数 类 型 字 段 使 用
INT(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT),根据所存放的数据大
小选择合适的子类型,且所有 INT 类型都不使用长度限制。

1.10.2 字符串类型
VARCHAR

所有可变长度的字段均使用 VARCHAR 类型,对于有限类别的字段(如性别、状态


等),均建议使用 VARCHAR 类型存储能明显表现其意义的字符串。

TEXT 系列

仅 当 需 存 储 的 字 节 数 可 能 超 过 20000 时 , 使 用 TEXT 系 列 类 型
(TEXT、MEDIUMTEXT、LONGTEXT)。并和原表进行分拆,与原表主键组成新表
存储,且每个表只允许有一个 TEXT 系列类型字段。

CHAR

仅当字段确定为定长,且将来不会修改长度时,使用 CHAR 类型。上线以后不允许修


改字段类型。谨慎使用

PAGE \* MERGEFORMAT11
数据库结构设计说明

1.10.3 时间类型
DATE

只 需 要 精 确 到 天 的 字 段 使 用 DATE 类 型 。 精 确 到 " 天 " 的 取 当 前 时 期 的 操 作 使 用


CURDATE()函数实现。 -DATETIME

需要精确到时间(时、分、秒)的字段使用 DATETIME 类型。精确到"秒"的取当前时


间的操作使用 NOW()函数实现。取值范围:'1000-01-01'到'9999-12-31'

TIMESTAMP

该 类 型 仅 允 许 raw_update_time 字 段 使 用 , 其 它 字 段 不 允 许 使 用 该 类 型 。 取 值 范
围:'1970-01-01 00:00:00'到'2037-01-01 00:00:00'

1.11 表设计

必含字段

id INT:主键使用 MySQL 的自增类型

raw_add_time DATETIME:创建日期(大字段拆分表除外),必须使用数据库时间
(用 now()生成)

raw_update_time TIMESTAMP:修改日期(大字段拆分表除外, 但内容变化必须修改主


表的 update_time 字段),由数据库自动变更,应用不操作此字段

以上 3 个字段都必须是没有任何商业意义的与业务无关的字段,不允许赋予任何商业
意义

作为表间连接关系的字段,数据类型必须保持严格一致,避免索引无法正常使用。

附属表拆分后,附属表关联字段使用主表主键字段,且附属表须有独立主键(大字
段拆分的表不需要单独的主键)

PAGE \* MERGEFORMAT11
数据库结构设计说明

存在过期概念的表,在其设计之初就必须有过期机制,且有明确的过期时间。过期
数据必须迁移至历史表中。

不再使用的表,必须通知 DBA 予以更名归档。

线上表中若有不再使用的字段,为保证数据完整,禁止删除,而是进行更名归档,
名称统一增加"droped_"前缀

1.12 约束使用

1.12.1 主键
主键不能包含业务含义。

主键在任何情况下不允许被更新。

1.12.2 唯一约束
除主键外,需存在唯一性约束的,可通过创建以"uk_"为前缀的唯一索引实现。

1.12.3 外键
任何情况不在数据库创建外键约束,外键规则由应用控制。

1.12.4 非空列
所有非空列须在建表之初明确标识"NOT NULL",上线之后,不允许再变更。

1.12.5 存储过程、触发器、视图、计划任务
禁止任何业务逻辑通过封装在数据库中的 procedure/function/trigger 实现。

禁止应用程序使用 view。

禁止业务逻辑使用数据库的计划任务。

PAGE \* MERGEFORMAT11
数据库结构设计说明

2 SQL 编写规范

2.1绑定变量与替代变量

2.1.1 原则
所有 Query 的 Where 条件中的变量,都需要使用绑定变量来实现,此要求并不完全是基于性能的考
虑,更多是基于安全方面的考虑。

2.2数据类型转换

2.2.1 原则
避免因数据类型转换导致执行计划有误。

2.2.2 说明
where 条件中的过滤字段如需转换类型,只可转换过滤值,不可转换被过滤字段。

表连接操作中,作为连接条件的字段的数据类型严格一致。

如果表连接字段数据类型不一致,在 SQL 中用显示用类型转换,具体情况咨询


DBA。

2.2.3 示例
正确用法 1:select col1, col2 from tbl1, tbl2

where tbl1.col3 = tbl2.col4;

其中"tbl1.col3"与"tbl2.col4"数据类型严格一致。

正确用法 2:select col1,col2 from tbl

where gmt_create = str_to_date('20100526 00:00:00','%Y%m%d %H:%i:%s');

"count(…)"使用

PAGE \* MERGEFORMAT11
数据库结构设计说明

除非是明确目的是统计某个字段上值不为空的记录的数目,否者只允许之用 count(*),而
不允许使用 count(column_name) 或者 count(1)。

2.3"select * from …"使用

2.3.1 原则
为避免查询中无用字段参与排序操作而导致的性能降低及潜在的安全隐患。禁止使用"select *
from …"。

2.3.2 说明
任何情况都要明确列出查询需要返回的字段,禁止使用 select * 返回所有字段。

2.4"insert into tablename values()"使用

2.4.1 原则
为避免增加或删除字段带来的 SQL 报错。禁止使用省略字段名的 insert into 语句。

2.4.2 说明
任何情况都要明确列出需要写入的字段名称。

2.5 表连接

2.5.1 原则
规范连接语法以方便 SQL 脚本的阅读及提升连接操作性能。

2.5.2 说明
非外连接查询中,连接表在"from"子句中列出,并以逗号分隔;连接条件
在"where"子句中列出,而不允许使用 join … on 方式实现 join。

外连接查询中,可使用"left join … on"语法;外连接一律使用"left join"表示。

PAGE \* MERGEFORMAT11
数据库结构设计说明

可以改写为连接的子查询禁止使用子查询方式,而应改写为连接方式。

2.5.3 示例
规范

select col1, col2 from tbl1, tbl2 where tbl1.col4 = tbl2.col3;

select col1, col2 from tbl1 left outer join tbl2 on tbl1.col4 = tbl2.col3;

select col1, col2 from tbl1 left outer join tbl2 on tbl1.col4 = tbl2.col3;

select col1 from tbl1,tbl2 where tbl1.col2 = tbl2.col3;

select col1 from tbl1 left join tbl2 on tbl1.col2 = tbl2.col3 where tbl2.col3 is null;

非规范:

select col1, col2 from tbl1 join tbl2 on tbl1.col4 = tbl2.col3;

select col1 from tbl1 where col2 in (select col3 from tbl2);

select col1 from tbl1 where col2 not in (select col3 from tbl2);

2.6分页查询

2.6.1 说明
分页查询必须带有唯一的排序条件,除非业务逻辑明确要求随机展现数据。对于多
表连接的分页语句,如果过滤条件在单个表上,则先分页,后连接。见示例

通过 limit 进行分页操作的时候,limit 参数为 start(起始记录数),page_offset(每页


记录数)。

PAGE \* MERGEFORMAT11
数据库结构设计说明

2.6.2 示例
规范化用法:

select a.col1, a.col2,b.col1, b.col2

from (select t.col1, t.col2

from tbl1 t where t.col3 = exp

order by t.col4 limit start, page_offerset) a,tbl2 b

where a.col3 = b.col3; ?

3 数据库级别规范
3.1 连接池的使用
应用程序连接数据库必须使用连接池。

3.2 存储引擎的选择
尽量不要使用 memory 引擎的表,除非能把握好对内存表的控制。

4 数据库表详细设计
4.1 实时数据管理
FK Defau
PK (主 lt
序 表说 数据类 长 备
表名称 字段名 字段说明 (主 外键 (默
号 明 型 度 注
键) 关 认
系) 值)
PLCNumber varchar 255 Y
1 plcthresho MinData 最小值 decimal 255
lddata MaxData 最大值 decimal 255

PAGE \* MERGEFORMAT11
数据库结构设计说明

FirstData 第一数值 decimal


SecondData 第二数值 decimal 255
ThirdData 第三数值 decimal 255

FK Defau
PK (主 lt
序 表说 数据类 长 备
表名称 字段名 字段说明 (主 外键 (默
号 明 型 度 注
键) 关 认
系) 值)
NAME varchar 255 Y
过渡 QUALITY varchar 255
1 collectdat
表 TIME varchar 255
a
VALUE varchar

FK Defau
PK (主 lt
序 表说 数据类 长 备
表名称 字段名 字段说明 (主 外键 (默
号 明 型 度 注
键) 关 认
系) 值)
NAME varchar 255 Y
实时
QUALITY varchar 255
1 DataCol 原始
TIME varchar 255

VALUE varchar

FK Defau
PK (主 lt
序 表说 数据类 长 备
表名称 字段名 字段说明 (主 外键 (默
号 明 型 度 注
键) 关 认
系) 值)
id int Y
PLCNumber PLC 位号 varchar
实时 PLCAddr PLC 地址 varchar
1 plcrealtim 原始 datetim
CollectTime 采集时间 255
edata 表 e
CValue 采集数值 varchar 255
CStatus 采集状态 varchar

4.2 基础信息管理
FK Defau
PK (主 lt
序 表说 数据类 长 备
表名称 字段名 字段说明 (主 外键 (默
号 明 型 度 注
键) 关 认
系) 值)
实时 id int Y
1 plcrealtim 原始 Type varchar 255
edata 表 TypeNo Int

PAGE \* MERGEFORMAT11
数据库结构设计说明

MCObject varchar 255


SignalRange varchar 255
SignalType varchar 255
IName varchar 255
TSignal varchar 255
Remarks varchar 255
PLCNumber varchar 255
PLCAddr varchar 255
Position varchar 255

FK Defau
PK (主 lt
序 表说 数据类 长 备
表名称 字段名 字段说明 (主 外键 (默
号 明 型 度 注
键) 关 认
系) 值)
Id varchar 255 Y
1 equipmento Name varchar 255
fvideo Address varchar 255

4.3 报警信息管理
FK Defau
PK (主 lt
序 表说 数据类 长 备
表名称 字段名 字段说明 (主 外键 (默
号 明 型 度 注
键) 关 认
系) 值)
id int Y
EquipId varchar 255
报警 Type Int
1 equipmenta 信息 AlarmTime 报警时间 varchar 255
larminfo 表 Conclusion varchar 255
Remark varchar 255
PLCId varchar 255

4.4 系统管理

FK Defau
PK (主 lt
序 表说 数据类 长 备
表名称 字段名 字段说明 (主 外键 (默
号 明 型 度 注
键) 关 认
系) 值)
信息 上级菜单
ParientID int Y
1 sys_author 管理 ID
ity_inform 表 c_Name 菜单名称 varchar 255

PAGE \* MERGEFORMAT11
数据库结构设计说明

c_Code 菜单编码 Int


c_Type varchar 255
c_ProjVersi
varchar 255
on
ation
c_Remark varchar 255
c_Picture varchar 255
i_Order varchar 255

4.5 安全保密设计

(说明在数据库的设计中,将如何通过区分不同的访问者、不同的访问类型和不同的数据对象,进行分
别对待而获得的数据库安全保密的设计考虑)
序号 数据库用户 用户角色描 可以访问的表清单 是否具有表的 可以访问 备注
述 编 辑 权 限 的视图清
(Y/N) 单
1 Zhjx_admin 管理员 所有系统表及业务 Y 所有视图

2 Zhjx_PROD_READ 只读用户 所有业务表 N 无

3 Zhjx_PROD_OPERATE 操作用户 所有业务表 Y 所有视图

PAGE \* MERGEFORMAT11

You might also like