零代码实现一对一表关系和无限主子表级联保存

表关系高阶
在上一篇表关系管理中 , 介绍了订单中一对多、多对一、以及多对多关系 , 本文主要介绍一对一关系和无限主子表在crudapi系统中的应用 。
概要
一对一
一对一关系是指关系数据库中两个表之间的一种关系 。 关系数据库中第一个表中的单个行只可以与第二个表中的一个行相关 , 且第二个表中的一个行也只可以与第一个表中的一个行相关 。
在一对多关系中 , 外键建立在子表中;在一对一关系中 , 外键可以建在主表或者子表中 , 为了保持一致 , crudapi系统中统一将一对一关系中外键也建立在子表中 , 这样的好处是如果将来需要解除表关系的时候 , 无需修改主表结构 。
客户资料
客户customer主表中 , 通常存放基本信息 , 如果有更多资料可以考虑单独存放在客户资料customerProfile表中 , 它们之间可以用一对一关系实现 。
客户和客户资料:一对一(主子方向)
零代码实现一对一表关系和无限主子表级联保存

之前创建客户customer表保持不变
零代码实现一对一表关系和无限主子表级联保存

创建客户资料customerProfile表 , 主要包括客户编号字段、生日、性别、爱好等 , 其中客户编号customerId字段用于建立表关系
零代码实现一对一表关系和无限主子表级联保存

建立主子方向一对一关系 , 客户customer表的编号id字段 , 指向客户资料customerProfile的客户编号customerId字段 , 关系的英文名称profile用于查询关联对象的时候 , 设置导航属性名称为profile 。
客户资料和客户:一对一(子主方向)
零代码实现一对一表关系和无限主子表级联保存

建立子主方向一对一关系 , 客户资料customerProfile的客户编号customerId字段 , 指向客户customer表的编号id字段 , 关系的英文名称customer用于查询关联对象的时候 , 设置导航属性名称为customer , 和之前订单和客户多对一关系有点类似 , 关联对象都是customer对象 , 不过那个时候多个订单可以关联同一个客户 , 现在一个客户资料只能关联一个客户 。
客户主子表级联保存
零代码实现一对一表关系和无限主子表级联保存

ui创建客户 , 同时输入子表客户资料信息 , chrome打开网络请求记录 , 可以看到POSTbody如下:
【零代码实现一对一表关系和无限主子表级联保存】{
"name":"刘备",
"mobile":"13699998888",
"profile":{
"name":"刘备资料",
"birthday":"2021-02-14",
"sex":"男",
"hobby":"骑马"
}
}
其中profile为客户资料信息 ,
零代码实现一对一表关系和无限主子表级联保存

查询客户详情 , 发现客户和客户资料信息一次性保存成功!上一篇文章中 , 销售订单和订单行是一对多主子关系 ,
子表是数组形式 , 在一对一主子关系中子表是对象形式 , 在数据库中表现形式是相同的 , 外键都是建在子表中 。
直接操作客户资料
零代码实现一对一表关系和无限主子表级联保存

也可以直接创建客户资料表 , 选择挂在指定客户下 , 可以达到同样的效果 。
无限子表
通过设置表关系 , 一对多和一对一(主子方向)理论上可以无限关联下去 , 所有的表一次性级联保存 , 比如省市区通常可以达到3级子表 , 目录文件属于无限子表 。
省市区三级子表
零代码实现一对一表关系和无限主子表级联保存