# 定义实体之间的关联关系
# 概念说明
实体关联关系:有关联的实体之间往往会存在对应关系,包括一对一关系、一对多(多对一)关系和多对多关系,实体关系图可直观展示各个实体之间的对应关系,便于数据关系的梳理。
实体关系示例如下:
- 一对一关系:客户信息和客户扩展信息,每个客户对应一个扩展信息,且每个扩展信息也对应唯一客户。
- 一对多(多对一)关系:客户和订单,每个客户可以有多个订单,且一个订单仅对应唯一客户。
- 多对多关系:订单和商品,一个订单中可以有多个商品,一个商品可以关联多个订单。
# 操作案例
# 操作场景
已存在如下表所示Customer实体,需要实现如下关系:
- 【设置一对一关系】创建一个实体CustomerExtendInfo用于存放扩展信息,与Customer实体之间为一对一关系。若删除Customer实体中的数据,连带同时删除实体CustomerExtendInfo中的数据。
- 【设置一对多关系】创建一个实体OrderInfo用于存放订单信息,与Customer实体之间为一对多关系。若删除Customer实体中的数据,需要校验实体OrderInfo中是否存在关联数据,若存在关联数据,则不允许删除。
- 【设置多对多关系】创建商品实体Product,创建中间表,订单商品实体OrderProductItem,实体Product和OrderProductItem为多对多关系。若删除Product数据,需要校验实体OrderProductItem中是否存在关联数据,若存在关联数据,则不允许删除;若删除OrderInfo数据,连带同时删除实体OrderProductItem中的数据。
属性名称 | 属性标题 | 数据类型 | 是否必填 | 其他说明 | 显示 |
---|---|---|---|---|---|
id | 主键 | 默认Long | 默认 | 默认 | |
createdTime | 创建时间 | 默认DateTime | 默认 | 默认 | |
updatedTime | 更新时间 | 默认DateTime | 默认 | 默认 | |
createdBy | 创建者 | 默认String | 默认 | 默认 | |
updatedBy | 更新者 | 默认String | 默认 | 默认 | |
name | 客户名称 | String | 是 | 最大长度:50 | 表格列、筛选项、表单项目、详情项目 |
phone | 电话 | String | 是 | 表格列、筛选项、表单项目、详情项目 | |
address | 地址 | String | 否 | 表格列、表单项目、详情项目 | |
电子邮件 | 否 | 表格列、表单项目、详情项目 | |||
remark | 备注 | String | 否 | 最大长度:200 | 表格列、表单项目、详情项目 |
isEnable | 是否启用 | Boolean | 是 | 默认为True | 表格列、筛选项、表单项目、详情项目 |
inDate | 入库日期 | Date | 否 | 表格列、表单项目、详情项目 |
# 操作思路
- 创建实体。
- 在关系为多的实体添加字段,数据类型选择需要关联实体的属性的类型,如关联主键,则设置为Long类型;若为多对多的关系,需要添加第三张中间表,通过两个一对多的关系表达多对多的关系。
- 设置关联属性:选择关联实体的属性;相同数据类型的可以设置。
- 设置删除关联属性记录时的规则,默认不允许删除,可选允许删除且同时删除本实体记录。
- 不允许删除:在删除关联实体中的记录之前,必须先将与之相关联的其他实体中的记录删除。这种设置通常用于保护数据的完整性和一致性,避免因误操作或者意外删除导致数据不一致或者丢失。
- 允许删除且同时删除本实体记录:如果删除了关联实体中的记录,那么本实体中与之关联的记录也会被自动删除。这种设置通常用于建立父子表之间的关系,例如在删除父表中的记录时,所有与之相关的子表中的记录都将被自动删除。
# 操作步骤
# 一对一关系
- 创建客户扩展信息实体CustomerExtendInfo,实体属性如下表。
属性名称 | 属性标题 | 数据类型 | 是否必填 |
---|---|---|---|
id | 主键 | 默认Long | 默认 |
createdTime | 创建时间 | 默认DateTime | 默认 |
updatedTime | 更新时间 | 默认DateTime | 默认 |
socialAccount | 社交账号 | String | 否 |
corporateAccount | 对公账户 | Long | 否 |
bank | 账户银行 | String | 否 |
customerId | 关联客户 | Long | 是 |
- 设置关联属性:关联Customer的id属性。
- 根据业务需求:当删除客户时,同步删除客户扩展信息。设置关联删除策略:当删除Customer的记录时,校验CustomerExtendInfo有无关联记录,如果有,则删除Customer记录后,同时删除CustomerExtendInfo的关联记录。
单击红框中按钮查看实体关系图,如下图所示。
# 一对多关系
- 创建订单实体OrderInfo,实体属性如下表:
属性名称 | 属性标题 | 数据类型 | 是否必填 |
---|---|---|---|
id | 主键 | 默认Long | 默认 |
createdTime | 创建时间 | 默认DateTime | 默认 |
updatedTime | 更新时间 | 默认DateTime | 默认 |
amount | 金额 | Double | 是 |
remark | 订单备注 | String | 否 |
address | 地址 | String | 是 |
customerId | 关联客户 | Long | 是 |
- 设置关联属性:关联Customer的id属性;
- 根据业务需求:当删除客户时,校验如果有订单的客户不允许删除。设置关联删除策略:当删除Customer的记录时,校验OrderInfo有无关联记录,如果有,则不允许删除Customer的记录。
# 多对多关系
- 创建商品实体Product,实体属性如下表:
属性名称 | 属性标题 | 数据类型 | 是否必填 |
---|---|---|---|
id | 主键 | 默认Long | 默认 |
createdTime | 创建时间 | 默认DateTime | 默认 |
updatedTime | 更新时间 | 默认DateTime | 默认 |
price | 单价 | Double | 是 |
name | 名称 | Sting | 是 |
- 创建中间表,订单商品实体OrderProductItem,实体属性如下表:
属性名称 | 属性标题 | 数据类型 | 是否必填 |
---|---|---|---|
id | 主键 | 默认Long | 默认 |
createdTime | 创建时间 | 默认DateTime | 默认 |
updatedTime | 更新时间 | 默认DateTime | 默认 |
price | 单价 | Double | 是 |
quantity | 数量 | Integer | 是 |
total | 小计 | Double | 是 |
productId | 关联商品 | Long | 是 |
orderId | 关联订单 | Long | 是 |
- 选择关联属性,设置关联删除策略,productId选择删除关联属性记录时,不可删除本实体关联的记录;order选择删除关联属性记录时,同时删除被本实体关联的记录。
最终生成的实体关系图如下: