在开发一个大型应用平台,涉及的表少则十几张,多则上百。合理的数据库设计 对于平台可持续发展至关重要,下面分别从以下方面对数据库设计规范进行阐述:
一、表名组织方式
格式:"子系统代号"+"-"+"表名”;
说明:一个平台往往由多个子系统组成,第个子系统有各自特定的表。为了与其他子系统区别开,约定在表名需要加"子系统代号"作用前缀进行区分,
二、表名命名规范
1、以英文命名,不得使用中文拼音。
2、组合词不得用“_”进行连。
此方式与oracle官方推荐方式冲突,这是因为Oracle之前不支持大小写。但考虑到除Oracle外大部分数据都支持大小写,因此采用此种方式
3、建议英文全拼,不要使用缩小。
4、多个子系统公共的基础表,我们以约定以"com"作为前缀。如用户表:com_user;
三、表设计原则
3.1、表设计须考虑业务的可扩展性。
场景:需要对我们业务中设备表部分数据进行分类,且存在一种设备存在多种分类情况。
错:增加一个设备分类表,然后在设备表中增加一个字段存储所归属类型的id,多个用”,“隔。
对:增加一个设备分类表,和一个分类成员表。在分类成员表中添加两都的对应关系。
原因:
1、并不是所有的设备都有分类,在设备表中增加分类字段造成大量空值信息。
2、一个设备存在多种分类,如果以增加字段并以","分隔方式会给日后按该字段统计增加难度
3.2、表名所表达的意思与存储数据应该是包含关系。
错:卡口设备表中存储视频设备
错:车辆布控表中存储电子围栏布控数据
对:人员表中存储警员信息。
3.3、公共基础模块或可能需要存储同种不同类的表命名尽量虚化
场景:需要存储单位所警员表信息
错:在基础模块中增加表com_policeman
对:基础模块如有com_person表,把警员信息作为人员表中的一种类型数据存储,没有则新建一个com_person表。
3.4、遵循数据库设计三范式
1、第一范式
数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项
2、第二范式
要求数据库表中的每个实例或记录必须可以被唯一地区分。
3、第三范式
要求一个关系中不包含已在其它关系已包含的非主关键字信息
四、表字段设计规范
4、1,命名规范
1、字段简约,不得出现表名关键字。
场景:为人员名com_person主键,姓名,关联单位等字段
错:personId,personName,departmentId
对:id,name,departmentId
说明:主键与姓名字段设计不需要加person关键字,因为表名中存在person,把表名与字段结构起来可完整表达该字段的意思,所以没有必要加person。至于单位它是一个外键字段,需要把单位表关键字department加上才能与id区别开来。
2、不得以数据库关键字命名字段
错:排序:order ,人员类型:type,单位级别:level,分组:group,禁用:disable
对:排序:sort,人员类型:personType,单位级别:grade,分类:groupType,禁用:disabled
3、使用英文全拼,不得用中文拼音或缩写
错:姓名:xm,单位类型:deptType
对:姓名:name,单位类型:departmentType
4、同组属性字段命名要保证相关性。
错:号牌号牌:vehiclePlate,号牌种类:plateType
对:号牌号牌:plateNo,号牌种类:plateType
网友评论