ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-04-07 17:54:17  阅读:172  来源: 互联网

标签:关系 customer 客户 级联 一对一 主子 客户资料 子表


表关系高阶

在上一篇 表关系管理 中,介绍了订单中一对多、多对一、以及多对多关系,本文主要介绍一对一关系和无限主子表在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操作。

附demo演示

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

标签:关系,customer,客户,级联,一对一,主子,客户资料,子表
来源: https://blog.51cto.com/15149911/2690583

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有