订单和产品的多对多表关系在crudapi系统零代码实现

简介: 在上一篇序列号管理中,产品和销售订单都是孤立的单表,本文通过crudapi中表关系(relation)管理将多个表连接起来,形成一个整体。表与表之间的关系(relation),分成三种。一对一(one-to-one):一种对象与另一种对象是一一对应关系,比如一个学生只能在一个班级。一对多(one-to-many):一种对象可以属于另一种对象的多个实例,比如一张唱片包含多首歌。多对多(many-to-many):两种对象彼此都是"一对多"关系,比如一张唱片包含多首歌,同时一首歌可以属于多张唱片。

表关系管理

在上一篇 序列号管理 中,产品和销售订单都是孤立的单表,本文通过crudapi中表关系(relation)管理将多个表连接起来,形成一个整体。

概要

关系类型

表与表之间的关系(relation),分成三种。
一对一(one-to-one):一种对象与另一种对象是一一对应关系,比如一个学生只能在一个班级。
一对多(one-to-many):一种对象可以属于另一种对象的多个实例,比如一张唱片包含多首歌。
多对多(many-to-many):两种对象彼此都是"一对多"关系,比如一张唱片包含多首歌,同时一首歌可以属于多张唱片。

订单

完整订单主要有4个表组成:销售订单主表(salesOrder),订单行(salesOrderLine),产品(product),客户(customer),他们之间的关系如下:

订单和客户:多对一

customer
首先创建客户表,主要有编号ID、手机、邮箱、会员卡号等字段

salesOrder
销售订单表添加客户编号字段,用于建立表关系

customerRelation
建立多对一关系,销售订单salesOrder表的customerId客户编号字段,指向客户customer的编号id字段,关系的英文名称customer用于查询关联对象的时候,设置导航属性名称为customer, 在查询订单的时候,通过customerId查询出customer对象,salesOrder对象格式如下:

{
    "id": 4,
    "name": "足球 跑鞋订单",
    "createdDate": 1613182392000,
    "orderNo": "SO20210213101311719",
    "productPrice": 380,
    "expressFee": 10,
    "totalPrice": 390,
    "customerId": 2,
    "customer": {
        "id": 2,
        "name": "关羽"
    }
}

订单和订单行:一对多

salesOrderLine
首先创建订单行表,主要有编号ID、订单编号、产品编号、单价、数量、小计等字段。

salesOrderLinesRelation
建立一对多关系,销售订单salesOrder表的编号id字段,指向订单行salesOrderLine的订单编号salesOrderId字段,关系的英文名称salesOrderLines用于查询关联对象的时候,设置导航属性名称为salesOrderLines, 内容为数组。

订单行和产品:多对一

product
产品表保持之前不变,主要有编号ID、订单编号、产品编号、单价、数量、小计等字段。

productRelation
建立多对一关系,订单行salesOrderLine表的productId产品编号字段,指向产品product的编号id字段,关系的英文名称product用于查询关联对象的时候,设置导航属性名称为product, 在查询订单行的时候,通过productId查询出product对象。

完整关系图

relationGraph
订单salesOrder和产品product是多对多关系,通过订单行salesOrderLine这个中间表建立连接,实际是由“一对多”和“多对一”两个关系合并而成,设置完全部关系后,salesOrder对象格式如下:

{
    "id": 4,
    "name": "足球 跑鞋订单",
    "createdDate": 1613182392000,
    "orderNo": "SO20210213101311719",
    "productPrice": 380,
    "expressFee": 10,
    "totalPrice": 390,
    "customerId": 2,
    "customer": {
        "id": 2,
        "name": "关羽"
    },
    "salesOrderLines": [{
        "id": 1,
        "name": "2个足球",
        "createdDate": 1613182392000,
        "salesOrderId": 4,
        "productId": 5,
        "unitPrice": 58,
        "quantity": 2,
        "subTotal": 116,
        "product": {
            "id": 5,
            "name": "足球"
        }
    }, {
        "id": 2,
        "name": "3双跑鞋",
        "createdDate": 1613182392000,
        "lastModifiedDate": 1613190617000,
        "salesOrderId": 4,
        "productId": 4,
        "unitPrice": 88,
        "quantity": 3,
        "subTotal": 264,
        "product": {
            "id": 4,
            "name": "跑鞋"
        }
    }]
}

验证

创建订单

createSalesOrder
ui创建订单,支持主子表级联合保存,客户和产品可以通过select控件选择。

查询订单详情

getSalesOrder

小结

本文介绍了订单中一对多,多对一关系,通过配置的方式实现了对象之间的关联,无需编程实现了主子表CRUD操作,后续详细介绍所有的关系类型。

附crudapi简介

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

目录
相关文章
|
3月前
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
66 4
|
4月前
|
存储 SQL NoSQL
仓储设计实现问题之在仓储实体转移模式下处理聚合实体的删除如何解决
仓储设计实现问题之在仓储实体转移模式下处理聚合实体的删除如何解决
|
4月前
|
Java
Java数组的2个小案例(杨辉三角分析和商品管理增删改查)
Java数组的2个小案例(杨辉三角分析和商品管理增删改查)
51 4
|
5月前
|
开发框架 前端开发 JavaScript
ABP框架中一对多,多对多关系的处理以及功能界面的处理(2)
ABP框架中一对多,多对多关系的处理以及功能界面的处理(2)
|
5月前
|
开发框架 前端开发 JavaScript
ABP框架中一对多,多对多关系的处理以及功能界面的处理(1)
ABP框架中一对多,多对多关系的处理以及功能界面的处理(1)
|
5月前
领域驱动设计问题之将多个服务类都直接修改单据实体的状态如何解决
领域驱动设计问题之将多个服务类都直接修改单据实体的状态如何解决
|
5月前
|
开发者
领域驱动设计问题之单据字段的管理可能是一个问题如何解决
领域驱动设计问题之单据字段的管理可能是一个问题如何解决
|
5月前
|
移动开发
交易链路设计原则&模式问题之在订单管理系统中,doOp接口实现多种按钮操作,如何解决
交易链路设计原则&模式问题之在订单管理系统中,doOp接口实现多种按钮操作,如何解决
|
SQL 物联网 数据库
关系模型知识点总结(2)—— 关系完整性约束&关系操作基础
关系模型应提供定义和检验这类完整性机制,以便用统一的系统方法处理他们,而不需要由应用程序承担
336 0
关系模型知识点总结(2)—— 关系完整性约束&关系操作基础
|
数据库 缓存 索引
关系数据库设计中,用中间表好还是直接设定主外键关联好?
有人会对数据库有这样的疑问: 因为大多数的数据库教程上都是告诉你关系数据库如何去创建1:1、1:N和N:M的数据库关系,但我发现很多开源产品中,并没有直接使用关系数据库的关系查询、关系删除等功能,而是直接在代码中对多个表的查询结果进行组合。
2465 0

热门文章

最新文章