UJCMS后端二次开发教程02-数据库设计基本规范

2023-08-11 13:29 阅读

为更方便的查询数据库,UJCMS设计了查询解析器。要使用这个查询解析器,数据库表名、字段名必须符合一定的命名规范。同时代码生成器对数据库字段类型也有一定的要求。

以下规范皆为强制性要求,如有不符的地方,可能导致系统运行异常。

表名一律使用小写字母

在Windows下默认安装MySQL,会忽略大小写,把所有大写表名自动变成小写表名。而Linux下MySQL区分大小写,这会导致从Windows导出数据往Linux迁移时,出现表名大小写不一致的情况,导致找不到表。而其它一些数据库如Oracle,会在任何时候把小写表名自动转成大写,不存在兼容性问题。

表名必须以ujcms为前缀

ujcms_article ujcms_user等。

为避免和数据库中其它表重名,或与系统表、关键字冲突,表名必须使用一个前缀。

为方便代码生成,以及查询解析,统一使用ujcms作为前缀。

表名多个单词用下划线分隔

表名多个单词必须以下划线分割,不可用大小写作为分割。

ujcms_message_board ujcms_article_ext等。

字段名一律使用小写字母

id_ name_ description_

字段名必须以下划线结尾

name_ description_

可避免和数据库关键字冲突。也是JPA(Hibernate)生成字段别名时的规则。

字段名多个单词用下划线分隔

publish_date_

字段名多个单词必须以下划线分割,不可用大小写作为分割。

主键

除多对多关联表外,一律使用名为id_的字段作为主键,该字段不能有任何业务含义,字段类型为的intbigint类型(根据预期的数据量选择)。

多对多关联表,一般用关系双方的表名加_id_组成,如用户表ujcms_user与角色表ujcms_role的多对多关联表ujcms_user_role,里面的联合主键一般为user_id_role_id_

某些情况下,多对多关联表的联合主键也可以不按照表名加_id_的方式。如栏目表ujcms_channel的闭包表ujcms_channel_tree,由于联合主键里的两个字段均是ujcms_channel的外键,因此可以更灵活的定义联合主键字段的名称,如ancestor_id_descendant_id_。需要注意的是,依然必须以_id_结尾。

外键

外键一般使用外键表名加_id_的结构,如文章表ujcms_article关联栏目表ujcms_channel,外键字段一般为channel_id_

在对一个外键表,却有多个关联字段时,可以更灵活的定义字段名,如文章表ujcms_article有多个字段关联用户表ujcms_user,创建用户字段为user_id_,修改用户字段为modified_user_id_

不管如何,外键字段名称必须以_id_结尾。

枚举类型

在一个字段有固定的几个取值时,用枚举类型。如状态(0:已发布,1:已归档,5:待发布,10:草稿,11:待审核,12:审核中,20:已删除,21:已下线,22:已退回)。

数据库中,枚举类型一律使用smallint字段类型;Java实体类的枚举字段使用Short类型。

布尔类型(boolean)

布尔字段一律使用char(1)类型。'1'true'0'false,不能为空null,并给默认值。

布尔字段不能为null,如需为null,考虑使用枚举类型。如性别,取值为m f null,则应该考虑使用枚举,0:保密,1:男,2:女。

非布尔类型字段不能使用char(1)字段类型。如特殊情况下,一定要用一个字符的数据类型,可以使用varchar(1)

布尔字段不能使用is作为前缀。如enabled_不能为is_enabled_,否则生成的实体类代码的属性名为isEndabled,而get set方法则变成了getIsEnabled setIsEnabled

日期类型

日期类型在Java里映射为OffsetDateTime。如果数据库支持带时区的日期类型,应该首选带时区的日期类型,否则用常规的日期类型。

字符串类型

Oracle的varchar2最长支持4000字节,按三个字节一个汉字计算,大概可以支持1200个汉字。所以一般超过1000个汉字的字符串,就用Clob(或MySQL的text)。

数据库的字符长度,有些以字节为单位,有些按字符为单位。为了跨数据库平台,字符串长度一律以字节为单位。

而某些字段只保存英文,无需考虑中文问题。因此在代码生成时,能够被3整除且个位为0的长度,会判定认用于存储中文,映射成java属性时,最大长度限制会除以3。例如:

QQ咨询
电话
微信
微信扫码咨询