# 定义实体之间的关联关系

# 概念说明

实体关联关系:有关联的实体之间往往会存在对应关系,包括一对一关系、一对多(多对一)关系和多对多关系,实体关系图可直观展示各个实体之间的对应关系,便于数据关系的梳理。

实体关系示例如下:

  • 一对一关系:客户信息和客户扩展信息,每个客户对应一个扩展信息,且每个扩展信息也对应唯一客户。
  • 一对多(多对一)关系:客户和订单,每个客户可以有多个订单,且一个订单仅对应唯一客户。
  • 多对多关系:订单和商品,一个订单中可以有多个商品,一个商品可以关联多个订单。

# 操作案例

# 操作场景

已存在如下表所示Customer实体,需要实现如下关系:

  1. 【设置一对一关系】创建一个实体CustomerExtendInfo用于存放扩展信息,与Customer实体之间为一对一关系。若删除Customer实体中的数据,连带同时删除实体CustomerExtendInfo中的数据。
  2. 【设置一对多关系】创建一个实体OrderInfo用于存放订单信息,与Customer实体之间为一对多关系。若删除Customer实体中的数据,需要校验实体OrderInfo中是否存在关联数据,若存在关联数据,则不允许删除。
  3. 【设置多对多关系】创建商品实体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 表格列、表单项目、详情项目
email 电子邮件 Email 表格列、表单项目、详情项目
remark 备注 String 最大长度:200 表格列、表单项目、详情项目
isEnable 是否启用 Boolean 默认为True 表格列、筛选项、表单项目、详情项目
inDate 入库日期 Date 表格列、表单项目、详情项目

# 操作思路

  1. 创建实体。
  2. 在关系为多的实体添加字段,数据类型选择需要关联实体的属性的类型,如关联主键,则设置为Long类型;若为多对多的关系,需要添加第三张中间表,通过两个一对多的关系表达多对多的关系。
  3. 设置关联属性:选择关联实体的属性;相同数据类型的可以设置。
  4. 设置删除关联属性记录时的规则,默认不允许删除,可选允许删除且同时删除本实体记录
    • 不允许删除:在删除关联实体中的记录之前,必须先将与之相关联的其他实体中的记录删除。这种设置通常用于保护数据的完整性和一致性,避免因误操作或者意外删除导致数据不一致或者丢失。
    • 允许删除且同时删除本实体记录:如果删除了关联实体中的记录,那么本实体中与之关联的记录也会被自动删除。这种设置通常用于建立父子表之间的关系,例如在删除父表中的记录时,所有与之相关的子表中的记录都将被自动删除。

# 操作步骤

# 一对一关系

  1. 创建客户扩展信息实体CustomerExtendInfo,实体属性如下表。
属性名称 属性标题 数据类型 是否必填
id 主键 默认Long 默认
createdTime 创建时间 默认DateTime 默认
updatedTime 更新时间 默认DateTime 默认
socialAccount 社交账号 String
corporateAccount 对公账户 Long
bank 账户银行 String
customerId 关联客户 Long
  1. 设置关联属性:关联Customer的id属性。
  2. 根据业务需求:当删除客户时,同步删除客户扩展信息。设置关联删除策略:当删除Customer的记录时,校验CustomerExtendInfo有无关联记录,如果有,则删除Customer记录后,同时删除CustomerExtendInfo的关联记录。

image-20230605110848470

  1. 单击红框中按钮查看实体关系图,如下图所示。

    image-20221102152646508

# 一对多关系

  • 创建订单实体OrderInfo,实体属性如下表:
属性名称 属性标题 数据类型 是否必填
id 主键 默认Long 默认
createdTime 创建时间 默认DateTime 默认
updatedTime 更新时间 默认DateTime 默认
amount 金额 Double
remark 订单备注 String
address 地址 String
customerId 关联客户 Long
  • 设置关联属性:关联Customer的id属性;
  • 根据业务需求:当删除客户时,校验如果有订单的客户不允许删除。设置关联删除策略:当删除Customer的记录时,校验OrderInfo有无关联记录,如果有,则不允许删除Customer的记录。

image-20230605111427127

# 多对多关系

  1. 创建商品实体Product,实体属性如下表:
属性名称 属性标题 数据类型 是否必填
id 主键 默认Long 默认
createdTime 创建时间 默认DateTime 默认
updatedTime 更新时间 默认DateTime 默认
price 单价 Double
name 名称 Sting
  1. 创建中间表,订单商品实体OrderProductItem,实体属性如下表:
属性名称 属性标题 数据类型 是否必填
id 主键 默认Long 默认
createdTime 创建时间 默认DateTime 默认
updatedTime 更新时间 默认DateTime 默认
price 单价 Double
quantity 数量 Integer
total 小计 Double
productId 关联商品 Long
orderId 关联订单 Long
  1. 选择关联属性,设置关联删除策略,productId选择删除关联属性记录时,不可删除本实体关联的记录;order选择删除关联属性记录时,同时删除被本实体关联的记录。

image-20230605111612964

image-20230605111715051

最终生成的实体关系图如下:

image-20221103092801679

上次更新: 2023年06月26日