可迁移数据库的基本命名和实施规范
前言
数据库管理系统(DBMS)是各类信息系统的核心组成部分,常用的关系数据库系统(RDBMS)有SQLite、SQL Server、MySQL、Oracle等等。不同种类和版本的关系数据库系统在大小写区分、数据类型、SQL语法等等方面各有差异,若一个信息系统需要支持一种以上的数据库系统,那么为了可迁移而在数据库命名和实施上应该遵守必要的命名和实施规范。
命名规范
1、各数据库对象(数据库、表、字段、视图、触发器、存储过程、函数等)采用下划线命名法,即标识符由小写字母和数字组成、以小写字母开头、各单词之间用下划线隔开,当然标识符建议使用英文单词(包括公认的单词缩写),例:merchant_record、api_param等。因为Linux系统对大小写敏感而Windows系统不区分大小写,部分数据库如PostgreSQL等对大小写敏感而部分数据库如SQL Server等不区分大小写,所以为了便于迁移且SQL语句大小写统一,所以标识符建议都小写并用下划线隔开。至于不能以数字开头是因为使用ORM框架时计算机语言标识符不支持数字开头。
2、数据库名称应能表明其内容和用途,即主要存储哪些数据、包含哪些业务、属于哪个系统哪个子系统,例:mis_qrcode(MIS系统下的QRCode子系统)等;表名建议由所属业务前缀和数据名称组成,业务前缀一来可以表明表所属的业务,二来方便后期垂直分库,例:base_user等;字段名建议由所有表的数据名称前缀和属性名称组成,例user_id、user_mobile等。
3、视图、触发器、存储过程、函数等的名称建议由前缀附加关联表名或功能名称组成。视图前缀view、触发器前缀trigger、存储过程前缀procedure、函数前缀function,例:view_base_user等。
4、主键和外键的字段名称应一致。
5、数据库、表、字段、视图等的名称基本上是名词词性、触发器、存储过程、函数等的名称可以是动词+名称或动词格式。
实施规范
1、使用自增整数做为表的物理主键、使用GUID做为表的逻辑主键,自增整数主键在迁移或合并时容易丢失,故表间关联建议使用GUID逻辑主键。
2、每个表建议增加一个状态字段(*_state),-1表示逻辑删除、0表示已禁用、1表示已启用,0和1的具体含义根据数据不同而不同。
3、每个字段要么不允许NULL值,要么设置默认值,这样就可以在逻辑代码中免除不必要的NULL判断;
4、建议不要设置数据库域完整性、参照完整性或其它自定义约束,如数据类型和值范围约束、主键外键值约束、check条件等,这些可在应用逻辑中实现。
5、对于常用的表间连接可酌情使用视图访问,不建议过多采用触发器、存储过程、函数等数据库逻辑,在业务逻辑中实现。
6、设计时考虑后期垂直分库(避免不同业务表之间的连接)、水平分库。
7、考虑建立过期或访问频率低的数据的历史数据库。
8、三个基础表:参数表(存储各种参数的名称、编码和值等)、枚举表(存储各种编码和含义的对照,如订单状态等)、类别表(存储各种类别数据,如商家类别、产品类别等)。
后语
如有错误,敬请指正;如有遗漏,欢迎补充。