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

简介: 本文主要介绍一对一关系和无限主子表在crudapi系统中的应用。一对一关系是指关系数据库中两个表之间的一种关系。关系数据库中第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。

表关系高阶

在上一篇 表关系管理 中,介绍了订单中一对多、多对一、以及多对多关系,本文主要介绍一对一关系和无限主子表在crudapi系统中的应用。

概要

一对一

一对一关系是指关系数据库中两个表之间的一种关系。关系数据库中第一个表中的单个行只可以与第二个表中的一个行相关,且第二个表中的一个行也只可以与第一个表中的一个行相关。
在一对多关系中,外键建立在子表中;在一对一关系中,外键可以建在主表或者子表中,为了保持一致,crudapi系统中统一将一对一关系中外键也建立在子表中,这样的好处是如果将来需要解除表关系的时候,无需修改主表结构。

客户资料

客户customer主表中,通常存放基本信息,如果有更多资料可以考虑单独存放在客户资料customerProfile表中,它们之间可以用一对一关系实现。

客户和客户资料:一对一(主子方向)

customer
之前创建客户customer表保持不变

customerProfile
创建客户资料customerProfile表,主要包括客户编号字段、生日、性别、爱好等,其中客户编号customerId字段用于建立表关系

profileRelation
建立主子方向一对一关系,客户customer表的编号id字段,指向客户资料customerProfile的客户编号customerId字段,关系的英文名称profile用于查询关联对象的时候,设置导航属性名称为profile。

客户资料和客户:一对一(子主方向)

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

客户主子表级联保存

createCustomer
ui创建客户,同时输入子表客户资料信息,chrome打开网络请求记录,可以看到POST body如下:

{
    "name": "刘备",
    "mobile": "13699998888",
    "email": "liubei@crudapi.cn",
    "profile": {
        "name": "刘备资料",
        "birthday": "2021-02-14",
        "sex": "男",
        "hobby": "骑马"
    }
}

其中profile为客户资料信息,

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

直接操作客户资料

editCustomerProfile
也可以直接创建客户资料表,选择挂在指定客户下,可以达到同样的效果。

无限子表

通过设置表关系,一对多和一对一(主子方向)理论上可以无限关联下去,所有的表一次性级联保存,比如省市区通常可以达到3级子表,目录文件属于无限子表。

省市区三级子表

ssqGraph

省和市是一对多关系,市和区是一对多关系。

ssq
ui效果,江苏省包括南京和淮安两个城市,南京市又包括江宁区和雨花台区。

目录无限子表

一级目录下可以包括子目录和文件,如果是子目录,子目录可以继续包括子目录和文件
folder1
图目录无限子表-1

folder2
图目录无限子表-2

ui效果,子表包括目录和文件,还可以继续展开下去,由于屏幕大小的原因,这里就不一一展示了。

查询目录列表
folders

小结

本文介绍了一对一关系,包括主子方向和子主方向,加上一篇文章中一对多,多对一,多对多关系,到目前为止所有的表关系都实现了。crudapi系统通过配置的方式实现了对象之间的关联,无需编程实现了主子表CRUD操作。

附crudapi简介

本系统属于产品级的零代码平台,不同于自动代码生成器,不需要生成Controller、Service、Repository、Entity等业务代码,程序运行起来就可以使用,真正0代码,可以覆盖基本的和业务无关的CRUD RESTful API。

目录
相关文章
|
存储 索引
维度表和事实表的区别
转载:转载:https://blog.csdn.net/qq_56870570/article/details/118938411
4715 0
|
6月前
|
SQL C++
组合两个表(C++)
组合两个表(C++)
34 0
|
SQL 关系型数据库 MySQL
sql处理重复的列,更好理清分组和分区
sql处理重复的列,更好理清分组和分区
86 0
|
关系型数据库 MySQL 索引
新增数据时,MySQL索引树的自调整过程
刚开始你一个表建好后,就一个数据页,就是聚簇索引的一部分,而且还是空的。若你插入数据,就是直接往这数据页里插入,也没必要给他弄索引页
114 0
|
存储 SQL 关系型数据库
|
数据库 缓存 索引
关系数据库设计中,用中间表好还是直接设定主外键关联好?
有人会对数据库有这样的疑问: 因为大多数的数据库教程上都是告诉你关系数据库如何去创建1:1、1:N和N:M的数据库关系,但我发现很多开源产品中,并没有直接使用关系数据库的关系查询、关系删除等功能,而是直接在代码中对多个表的查询结果进行组合。
2449 0
|
数据库 索引
存在逻辑删除的表字段上建立唯一索引的巧办法 (逻辑删除与唯一索引)
设计数据库唯一索引时,经常会碰到唯一删除的键值,导致很难处理,这里就简单介绍一种巧办法,帮你快速解决该问题
1982 0
存在逻辑删除的表字段上建立唯一索引的巧办法 (逻辑删除与唯一索引)
|
关系型数据库 MySQL 索引
二十七、冗余和重复索引
二十七、冗余和重复索引
132 0
|
Java 数据库
不设外键:用程序来实现表之间的关联
Association 相信有很多同学都有使用过Hibernate框架的开发经验,尽管现在开发人员对Hibernate的褒贬不一,我们暂且不谈这个话题。
1756 1