数据库

数据库表名设计规范及是否需要前缀,优缺点是什么?

2023-03-07

概述:

本身大致来说,在数据库表设计领域,除了视图以外,其它表名加不加前缀都不重要,视图加前缀是为了在执行查询时和实体表区分开,而存储过程、函数、约束等,我们一眼即可看出它是什么,更何况在可视化管理工具中,这些功能块本来就是各自独立展示的。所以加不加前缀区分毫无意义。


关于表的命名

1,比如”TB_“ 这种前缀是毫无意义的,其本身就是一个表(table),为什么还要加tb说明?如果表数量较少,后期项目扩展升级的可能性不大,所有的表名都没有必要加其它前缀。但有时规模相对庞大、业务逻辑相对复杂的项目,表格数量多到一定程度,在可视化管理工具中查阅浏览不太方便,这时,根据业务或功能对表格进行分类,加前缀也就非常有必要了。个人感觉50张表内的数据库,加前缀意义不大,超过100张,则很有必要加前缀。而且我们要求,为了不给后期代码书写造成非必要麻烦,如果要给表加前缀,则所有表均要有前缀,不要出现有些表有、有些没有的混杂情况。

2,表前缀主要是为了区分不同功能的表,而非解释表的功能,表的功能由表名来解释。前面要求表名的长度要控制在30个字符以内,在此前提下,为了尽可能不影响表的命名,表前缀应该越短越好。我们建议表前缀控制在两个字符以内。具体表前缀添加规则建议如下,括号内的单个字母表示要添加的前缀。这里以mysql数据库为例说明:

a. 系统表(s_):System,系统配置相关的基本信息表。系统用户表(s_user)、系统角色表(s_role)、系统菜单(s_menu)、操作日志(s_operation_log)、登录日志(s_login_log)、系统字典(s_dic)、系统字典类型表(s_dic_type)等。

b. 字典表(d_):Dictionary,非系统字典外的字典表。在“设计规范”——“相关注释”——“字典字段”中提到过字典表的定义,除了数据库中的通用字典表,还有一些常见表,比如地区表(d_region)、ICD编码(d_icd)等,也是一种字典表,这里的d_前缀即加在这类字典表名前面。

c. 中间表(r_):Relationship,多对多关系中间表。具体命名方式建议为:r_主表名_从表名,在多对多关系中其实不分主从表,这里我们规定核心表为主表,另外一个为从表。比如用户角色关系中,用户表(s_user)为主、角色(s_role)表为从,那中间表就命名为s_user_role。当中间表名超长时,则根据实际情况缩写主从表名,建议优先缩写从表表名。

d. 业务表(b_):Business,核心业务涉及的基本信息表。这里的业务是非系统配置业务相关的,比如登录、注册、权限这些业务涉及的表都是和系统配置相关的,前缀应该是s_,而非b_。比如在线商城的项目中订单业务涉及的表即是核心业务表,会诊系统中会诊单业务涉及的表即是核心业务表,如果项目庞大,涉及业务较多,可以在B后面继续加单字母区分不同的业务,ba_、bb_、bc_……,没必要非得和某个英文对应,只是个代号,和项目组的人员说明即可。

表名前缀的说明如上,已经足够明确,除此外还应该避免无谓的表格后缀。比如存储客户信息的表直接命名为Guest而非GuestInfo,存储航班信息的表直接命名为Flight而非FlightList。还有命名表时,一律使用单数形式。例如,使用 Employee,而不是 Employees,总之,表的命名应该简单明了。