表關系管理
在上一篇
序列号管理中,産品和銷售訂單都是孤立的單表,本文通過crudapi中表關系(relation)管理将多個表連接配接起來,形成一個整體。
概要
關系類型
表與表之間的關系(relation),分成三種。
一對一(one-to-one):一種對象與另一種對象是一一對應關系,比如一個學生隻能在一個班級。
一對多(one-to-many):一種對象可以屬于另一種對象的多個執行個體,比如一張唱片包含多首歌。
多對多(many-to-many):兩種對象彼此都是"一對多"關系,比如一張唱片包含多首歌,同時一首歌可以屬于多張唱片。
訂單
完整訂單主要有4個表組成:銷售訂單主表(salesOrder),訂單行(salesOrderLine),産品(product),客戶(customer),他們之間的關系如下:
訂單和客戶:多對一

首先建立客戶表,主要有編号ID、手機、郵箱、會員卡号等字段
銷售訂單表添加客戶編号字段,用于建立表關系
建立多對一關系,銷售訂單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": "關羽"
}
}
訂單和訂單行:一對多
首先建立訂單行表,主要有編号ID、訂單編号、産品編号、單價、數量、小計等字段。
建立一對多關系,銷售訂單salesOrder表的編号id字段,指向訂單行salesOrderLine的訂單編号salesOrderId字段,關系的英文名稱salesOrderLines用于查詢關聯對象的時候,設定導航屬性名稱為salesOrderLines, 内容為數組。
訂單行和産品:多對一
産品表保持之前不變,主要有編号ID、訂單編号、産品編号、單價、數量、小計等字段。
建立多對一關系,訂單行salesOrderLine表的productId産品編号字段,指向産品product的編号id字段,關系的英文名稱product用于查詢關聯對象的時候,設定導航屬性名稱為product, 在查詢訂單行的時候,通過productId查詢出product對象。
完整關系圖
訂單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": "跑鞋"
}
}]
}
驗證
建立訂單
ui建立訂單,支援主子表級聯合儲存,客戶和産品可以通過select控件選擇。
查詢訂單詳情
小結
本文介紹了訂單中一對多,多對一關系,通過配置的方式實作了對象之間的關聯,無需程式設計實作了主子表CRUD操作,後續詳細介紹所有的關系類型。
附crudapi簡介
本系統屬于産品級的零代碼平台,不同于自動代碼生成器,不需要生成Controller、Service、Repository、Entity等業務代碼,程式運作起來就可以使用,真正0代碼,可以覆寫基本的和業務無關的CRUD RESTful API。