本文档明晰数据库设计原则和规范,规范数据库对象命名方法,见名知意,加强分工,保证数据库高效稳定运行
1数据库设计原则
1)充分考虑业务逻辑和数据分离,数据库只作为一个保证ACID特点的关系数据的持久化储存系统,尽量减低使用自定义函数、存储过程和视图,不用触发器。
2)充分考虑数据库整体安全设计小型数据库设计,数据库管理和使用人员权限分离。
3)充分考虑具体数据对象的访问频率及性能需求,结合主机、存储等需求,做好数据库性能设计。
4)充分考虑数据下降模型,决策是否采用“分布式(水平分拆或则垂直分拆)”模式。
5)充分考虑业务数据安全等级,设计合适的备份和恢复策略。
2设计规范2.1约定
1)通常情况下设计遵循数据的设计规范3NF,尽量降低非标准范式或则反模式使用。
3NF规定:
Ø表内的每一个值都只能被抒发一次。
Ø表内的每一行都应当被惟一的标示(有惟一键)。
Ø表内不应当储存依赖于其他键的非键信息。
常见关键字(不得直接作为相关命名):range、match、delayed、select、and、from、where、not、in、out、add、as、user、name、key、index、type、group、order、max、min、count、concat、by、desc、asc、null等等,更多请参考MySQL官方保留字。
2)数据库和表的字符集统一:字符集(utf8mb4),排序规则(utf8mb4_general_ci)
2.2表设计规范
1)应当按照系统构架中的组件界定,针对每位组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之间的关联应尽可能降低,确保组件对应的表之间的独立性,为系统或表结构的构建提供可能性。
2)采用领域模型驱动的形式和自顶向上的思路进行数据库设计,首先剖析系统业务,按照职责定义对象。对象要符合封装的特点,确保与职责相关的数据项被定义在一个对象之内,不会出现职责描述缺位或多余。
3)应针对所有表的字段和字段构建索引,有针对性地构建组合属性的索引。
4)尽量少采用储存过程。
5)设计出的表要具有较好的使用性。
6)设计出的表要尽可能降低数据冗余,确保数据的确切性。
2.3数组规范
1)一行记录必须表内惟一,表必须有字段。
2)假如数据库类型为MYSQL,应尽量以自增INT类型为字段。假如数据库类型为ORACLE,建议使用UUID为字段。
3)日期数组,如须要依照时间进行KEY分区或则子分区,则使用VARCHAR2类型储存,储存格式为:YYYYMMDD。若果不须要以KEY方式作为分区列,则使用DATE或则DATETIME类型储存。不建议使用时间戳储存时间。
4)数组名称和数组数据类型对应,如DATE命名数组,则储存时间精确到日,如TIME命名数组,则储存时间精确到时分秒,甚至微秒。
2.4命名规范类2.4.1约定
1)数据库对象命名清晰,尽量做到见名知意,在进行数据库建模时备注对象,以便别人理解。
2)数据库类型为MYSQL,采用全大写英语词组
3)数据库类型为ORACLE,则使用驼峰式命名规范
4)数据库对象命名宽度不能超过30个字符
3管理范围
管理数据库中所有对象,包括库,表,视图,索引,过程,自定义函数,包,序列,触发器等
3.1建库
1)数据库名:采用大写英语词组全拼或汉字大写拼音,多个词组或拼音采用顿号”_”联接
2)数据库编码规则及排序规则:字符集(utf8mb4),排序规则(utf8mb4_general_ci)
3)建库其他要求:库名与应用名称尽量一致
3.2建表
表名应使用名词性质大写英语词组。假如须要词组短语来进行概括,词组与词组之间使用英语全角输入状态下_联接。假如超长,则从后面词组开始截取,保留词组前三位,保留完整的最后一个词组,假如仍然超长,则保留上面词组首字母,直接和最后一个词组联接;临时表命名以TMP开头,命名格式为TMP_模块/用途名称_名子拼音首字母;表名不能直接采用关键字命名
1)表命名:采用“业务名称_表的作用”格式命名(比如:alipay_task/force_project/trade_config)
2)建表其他要求:表名宽度不能超过30个字符;一定要指定一个字段数组;必需要依照业务对表注释;假如更改数组涵义或对数组表示的状态追加时,须要及时更新数组注释;
3)表必备数组:
`is_delete`tinyint(1)unsignedNOTNULLDEFAULT'0'COMMENT'状态(1删掉、0未删掉)',
`is_enabled`tinyint(1)unsignedNOTNULLDEFAULT'1'COMMENT'状态(1启用、0作废)',
`op_first`varchar(50)DEFAULTNULLCOMMENT'创建人',
`op_first_time`datetimeDEFAULTNULLCOMMENT'创建时间',
`op_last`varchar(50)DEFAULTNULLCOMMENT'更新人',
`op_last_time`datetimeDEFAULTNULLCOMMENT'更新时间',
3.3建数组
1)数组命名:
表中标示惟一性数组必须以标示性简称+id命名。其余数组依据储存信息,使用名词性质英语词组表示,如须要词组短语来进行概括,词组与词组之间使用中文全角输入状态下_联接。字段引用主键使用字段表_id的方式命名;数组名必须使用大写字母或数字,严禁出现数字开头,严禁两个顿号中间只出现数字;抒发是与否概念的数组,必须使用is_xxx的方法命名,数据类型是unsignedtinyint;抒发逻辑删掉的数组名is_deleted,1表示删掉,0表示未删掉
2)数组类型、长度
假如储存的字符串宽度几乎相等,使用char定长字符串类型;小数类型为decimal;id必为字段,类型为bigintunsigned;应尽量以自增INT类型为字段;优先选择符合储存须要的最小的数据类型;将字符串转化为数字类型储存;对于非负数据采用无符号整形进行储存signedint-2147483648-2147483648,unsignedint0-2147483648,有符号比无符号多出一倍的储存空间;varchar(n)n代表字符数,不是字节数小型数据库设计,varchar(255)=765个字节,过大的宽度会消耗更多的显存;防止使用textBLOB数据类型,建议textBLOB列分离到单独的扩充表中,textBLOB类型只能使用前缀索引;防止使用enum数据类型,更改enum须要使用alter句子,enum类型的orderby操作效率低,须要额外操作,严禁使用数值作为enum的枚举值;尽可能把所有列定义为notnull,索引null列须要额外的空间来保存,所以要占用更多的空间,进行比较和估算时要对null值做非常的处理;严禁字符串储存日期型的数据,缺点1:难以用日期函数进行估算和比较,缺点2:用字符串储存日期要占用更多的空间;使用timestamp或datetime类型储存时间,timestamp储存空间更小;财务的相关金额使用decimal类型,decimal类型为精准浮点数,在估算时不会遗失精度,float、double非精准浮点数
3)数组其他要求
数组名称宽度不能超过30个字符、尽量降低或则不使用联合字段、字段尽可能不容许为null(为null时设定默认值)、文本类型数组,属性字符集(utf8mb4),排序规则(utf8mb4_general_ci)、字段必须依照业务进行注释。
3.4建索引
字段索引名为pk_数组名;惟一索引名为uk_数组名;普通索引名则为idx_数组名。
说明:pk_即primarykey;uk_即uniquekey;idx_即index的简称。
3.5创建数据库表视图
1)视图命名:以”v_项目名/模块名_用途”格式命名
2)视图其他要求:视图名称宽度不能超过30个字符
3.6建储存过程及自定义数据库函数
1)储存过程命名:以”sp_用途”格式命名
2)自定义数据库函数:以“fn_用途”格式命名
3)储存过程或自定义数据库函数:参数命名以“p_”开头命名;内部变量命名以“v_”开头命名;游标命名以“cur_loop_”开头命名;循环变量命名以“i_found_”开头命名。
3.7建数据库用户
用户命名:采用授权用户姓名简拼大写命名
3.8其他要求
1)查询大数据表,参数数组需建索引;
2)数据库表、字段删掉或变更操作(a-不须要的表或数组,通常备注“作废”即可;b-须要更改的表或数组,先备注作废原表或原数组,再创建新表或新数组,且备注好作废缘由。);
暂无评论内容