物理模型

数据模型的物理模型,对应概念模型所映射的物理数据库表、视图、存储过程、SQL 语句、服务、JSON 等物理数据实体,是底层这块的数据存储模型。

物理模型与概念模型,是一种双向生成的关系。既可以正向从概念模型来生成物理模型,也可以反向从物理模型来生成概念模型。实际使用中,如果已有数据库中的物理模型,可以反向生成概念模型来减少开发过程。

数据表

数据库表是最常用的一种物理模型。在平台设计完概念模型的结构后,点击保存即可同步在物理数据库生成对应的表。保存时,会提示正在生成数据表。

image-20240220194158578

image-20240220193334556

在物理数据库中,已生成了对应概念模型的表:

image-20240220193535019

物理表可配置的内容主要有以下几块:

数据集表名

这里以库存表为例,数据集标识为 stock,默认对应的数据表名为 mainstock,其中 main 是对应服务模块的标识,这里默认是 main 模块。如果在其他模块,比如 oa,那么生成的表名为 oa_stock。

这个生成的关系规则,是可以自定义配置的,在”表“页签中进行设置。如果手动配置了表名,比如就叫 stock,那么在数据库就会按照定义的表名来生成。

image-20240220194505548

禁止建表

禁止建表开启后将不进行建表和发布数据,通常只在引入外部数据库表时开启。

1709200303240

意思是如果勾选了禁止建表,则由外部数据库这方来维护表的结构,不从数据模型这块进行同步。

扩展 SQL

系统在建表时,还可以执行一段 SQL,实现扩展能力。例如平台界面上没有提供创建多列联合索引的功能,那么可以在“扩展 SQL”中添加创建联合索引的 SQL。在建表后,系统自动执行这个 SQL,给表添加联合索引。

1709200854250

保存后,在物理表中可查询到该索引:

1709200854250

特别说明

  • oracle 和达梦数据库不支持多行 SQL 执行,扩展 SQL 中增加 ===batch()=== 或 ===batch(error:continue)===,示例代码如下
    • ===batch=== 表示执行下面的 SQL
    • ===batch(error:continue)=== 表示执行下面的 SQL,如果报错则跳过,继续执行后面的 SQL
===batch(error:continue)===
DROP INDEX idx_orgs_code
===batch(error:continue)===
DROP INDEX idx_orgs_fcode
===batch()===
CREATE INDEX idx_orgs_code ON orgs (code)
===batch()===
CREATE INDEX idx_orgs_fcode ON orgs (fcode)

命名风格

常用的命名风格有小驼峰和蛇式命名。小驼峰的形式例如 salesOrder,蛇式的形式例如 sales_order。

平台默认使用小驼峰命名。

1709201043955

如果命名风格修改为蛇式,比如数据模型的列字段为 productType,则生成的物理数据库表的列字段为 product_type。

  • 数据模型的列字段

1709201657477

  • 物理数据库表的列字段

1709201701748

字段

必须

存储数据时,该列必须有值。列设置必须,建表时该列不允许 NULL。如下图所示订单编号列设置必须

1721617538998

数据表中 orderNo 列不允许 NULL

1721617511827

特别说明

  • 如果该列之前允许为空,且数据表中有该列为空的记录,设置该列必填会报错,提示存在空值
  • 数据集的列上提供一个高级设置:默认值(数据迁移),用来解决这个问题,在重新建表前,将空值替换为默认值(数据迁移)

唯一

该列中的值,在整个数据表中不允许重复。列设置唯一,建表时给该列创建唯一索引。如下图所示订单编号列设置唯一

1721617755397

数据表中 orderNo 列有唯一索引

1721617796281

索引

数据表中设置索引,通常用于提升查询速度。列设置索引,建表时给该列创建索引。如下图所示订单日期列设置索引

1721618091921

数据表中 orderDate 列有索引

1721618145166

字段名

数据集列标识和数据表字段名可以不同,在“列标识”中定义数据集列标识,在“数据库字段”中定义数据表字段名。当列标识和字段名不一致时,设置数据库字段名即可实现映射

1721618905425

长度和精度

数据类型设置为文本,建表时会创建长度为254个字符的可变字符串类型:varchar(254)。在高级设置中设置长度,建表时使用设置的长度创建可变字符串类型。如下图所示订单编号列设置长度为20

1721619009271

数据表中 orderNo 列的类型为最大长度20个字符的可变字符串类型 varchar(20)

1721619095292

数据类型设置为精确数字,建表时会创建长度为18,精度为2的精确数字类型:decimal(18,2)。在高级设置中设置长度和精度,建表时使用设置的长度和精度创建精确数字类型。

1721619060096

数据表中 money 列的类型为长度18精度2的精确数字类型 decimal(18,2)

1721619112763

默认值

系统提供两个默认值:默认值(建表)和默认值(数据迁移)

  • 默认值(建表):用于设置列的默认值
  • 默认值(数据迁移):用于某列从允许为空,变成不允许为空时,自动写入的值

特别说明

  • 默认值使用 Spring Expression,不同数据类型写法不同
    • 字符串:使用单引号括起来,例如:'xxxx'
    • 数字:直接写数字,例如:123
    • 当前日期时间:#currentDateTime()
    • 当前日期:#currentDate()
    • 指定日期时间:#dateTime('2018-11-11 00:00:00')
    • 指定日期:#date('2018-11-11')

默认值(建表)

在高级设置中设置默认值(建表),建表时设置列的默认值。如下图所示支付方式列设置默认值为 RMB,注意字符串必须使用单引号括起来

1721627361720

数据表中 payType 列的默认值为 RMB

1721627293344

默认值(数据迁移)

当数据集的某列一开始允许为空,后续因业务需求,该列不允许为空后,此时数据表中存在该列为空的数据。在该列的高级设置中设置必须,此时开发环境、生产环境创建表时,都会报错(对非空字段进行安全性检查,出现数据迁移检查不通过),如下图所示

1721627826596

当数据表中存在空数据时,设置默认值(数据迁移),会在建表前将空值替换为默认值(数据迁移),设置界面如下图所示

1721627887033

重新建表后,空值都被替换为默认值(数据迁移),如下图所示

1721628636376

数据类型

建表时,系统根据数据库类型,将数据集列类型转换为数据库的数据类型,例如将文本转换为 varchar,如果需要使用指定的数据类型,在高级设置中设置数据类型,根据数据库类型,填入对应的数据类型,如下图所示,上架日期列转换为 timestamp

img

视图

同数据库表,数据模型的视图也会同步到数据库中生成对应的视图。

  • 数据模型的视图

1709200854250

  • 物理数据库的视图

1709200854250

存储过程

存储过程和表、视图存在不一样的地方,平台数据模型这边不保存存储过程的结构,只是引用存储过程名。

也就是物理数据库需要先有存储过程,数据模型这边再对存储过程进行引用。

  • 物理数据库的存储过程

1709200854250

  • 数据模型引用存储过程

1709200854250

由于存储过程支持入参的配置,因此数据模型这边也支持参数的配置:

1709202731371

对应存储过程的 IN 参数:

1709202751143

修改前备份

为避免数据丢失,平台对数据模型的修改,会在物理数据库同步进行表结构和数据的备份。

备份机制采用原表改名,在表名后加 _back_1 到 _back_5,5个备份表轮流使用。这样备份表保留了上一个版本的表结构和数据。实施效果如下:

1709202921623

在 sysmigrate 表中记录了最后一个备份表的名称和生成时间,在 key 中用表名查找,如下图所示

1720781239167

ER 图

在数据设计区,系统提供查看 ER 图(实体-关系图)的按钮,如下图所示,便于开发者了解数据库表结构及关联,支持导出为图片和 Word 文档。

1724914158528

results matching ""

    No results matching ""