零程式碼實現一對一表關係和無限主子表級聯儲存
表關係高階
在上一篇中,介紹了訂單中一對多、多對一、以及多對多關係,本文主要介紹一對一關係和無限主子表在crudapi系統中的應用。
概要
一對一
一對一關係是指關聯式資料庫中兩個表之間的一種關係。關聯式資料庫中第一個表中的單個行只可以與第二個表中的一個行相關,且第二個表中的一個行也只可以與第一個表中的一個行相關。
在一對多關係中,外來鍵建立在子表中;在一對一關係中,外來鍵可以建在主表或者子表中,為了保持一致,crudapi系統中統一將一對一關係中外來鍵也建立在子表中,這樣的好處是如果將來需要解除表關係的時候,無需修改主表結構。
客戶資料
客戶customer主表中,通常存放基本資訊,如果有更多資料可以考慮單獨存放在客戶資料customerProfile表中,它們之間可以用一對一關係實現。
客戶和客戶資料:一對一(主子方向)
之前建立客戶customer表保持不變
建立客戶資料customerProfile表,主要包括客戶編號欄位、生日、性別、愛好等,其中客戶編號customerId欄位用於建立表關係
建立主子方向一對一關係,客戶customer表的編號id欄位,指向客戶資料customerProfile的客戶編號customerId欄位,關係的英文名稱profile用於查詢關聯物件的時候,設定導航屬性名稱為profile。
客戶資料和客戶:一對一(子主方向)
建立子主方向一對一關係,客戶資料customerProfile的客戶編號customerId欄位,指向客戶customer表的編號id欄位,關係的英文名稱customer用於查詢關聯物件的時候,設定導航屬性名稱為customer,和之前訂單和客戶多對一關係有點類似,關聯物件都是customer物件,不過那個時候多個訂單可以關聯同一個客戶,現在一個客戶資料只能關聯一個客戶。
客戶主子表級聯儲存
ui建立客戶,同時輸入子表客戶資料資訊,chrome開啟網路請求記錄,可以看到POST body如下:
{
"name": "劉備",
"mobile": "13699998888",
"email": "liubei@crudapi.cn",
"profile": {
"name": "劉備資料",
"birthday": "2021-02-14",
"sex": "男",
"hobby": "騎馬"
}
}
其中profile為客戶資料資訊,
查詢客戶詳情,發現客戶和客戶資料資訊一次性儲存成功!上一篇文章中,銷售訂單和訂單行是一對多主子關係,
子表是陣列形式,在一對一主子關係中子表是物件形式,在資料庫中表現形式是相同的,外來鍵都是建在子表中。
直接操作客戶資料
也可以直接建立客戶資料表,選擇掛在指定客戶下,可以達到同樣的效果。
無限子表
透過設定表關係,一對多和一對一(主子方向)理論上可以無限關聯下去,所有的表一次性級聯儲存,比如省市區通常可以達到3級子表,目錄檔案屬於無限子表。
省市區三級子表
省和市是一對多關係,市和區是一對多關係。
ui效果,江蘇省包括南京和淮安兩個城市,南京市又包括江寧區和雨花臺區。
目錄無限子表
一級目錄下可以包括子目錄和檔案,如果是子目錄,子目錄可以繼續包括子目錄和檔案
圖目錄無限子表-1
圖目錄無限子表-2
ui效果,子表包括目錄和檔案,還可以繼續展開下去,由於螢幕大小的原因,這裡就不一一展示了。
查詢目錄列表
小結
本文介紹了一對一關係,包括主子方向和子主方向,加上一篇文章中一對多,多對一,多對多關係,到目前為止所有的表關係都實現了。crudapi系統透過配置的方式實現了物件之間的關聯,無需程式設計實現了主子表CRUD操作。
附demo演示
本系統屬於產品級的零程式碼平臺,不同於自動程式碼生成器,不需要生成Controller、Service、Repository、Entity等業務程式碼,程式執行起來就可以使用,真正0程式碼,可以覆蓋基本的和業務無關的CRUD RESTful API。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1916/viewspace-2796648/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關係等級儲存問題
- 記MyBaits-Plus 實現選單的無限層關係AI
- 主表子表動態欄位儲存實現方式總結
- MyBatis實現一對一關聯對映MyBatis
- mysql 無限級分類實現思路MySql
- SAP Spartacus 的 TMS 和 Event Service 實現的關聯關係
- mybatis關聯關係對映MyBatis
- JPA(3) 表關聯關係(多對一、一對多、多對多、一對一)
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- PHP無限級評論回覆功能實現PHP
- 10行程式碼實現頁面無限滾動行程
- 從零實現 k-v 儲存引擎儲存引擎
- Verilog程式碼和FPGA硬體的對映關係(五)FPGA
- Verilog程式碼和FPGA硬體的對映關係(四)FPGA
- Hibernate 的關聯關係對映
- 計算機儲存器容量和定址能力的關係計算機
- 冰河,能不能講講如何實現MySQL資料儲存的無限擴容?MySql
- EF Code First中的主外來鍵約定和一對一、一對多關係的實現
- kubernetes儲存類與PV與PVC關係及實踐
- 高效能無限級分類實現思路
- 90行程式碼,15個元素實現無限滾動行程
- Java中各程式碼層級的關係Java
- [小技巧]Laravel 關聯儲存Laravel
- RocketMQ 多級儲存設計與實現MQ
- MySQL如何實現萬億級資料儲存?MySql
- 200 行程式碼實現基於 Paxos 的 KV 儲存行程
- MyBatis初級實戰之五:一對一關聯查詢MyBatis
- 小程式無限層級路由方案路由
- GoldenGate使用SQLEXEC和GETVAL實現碼錶關聯GoSQL
- 小紅書如何應對萬億級社交網路關係挑戰?圖儲存系統 REDtao 來了!
- Laravel核心程式碼學習 — 模型關聯底層程式碼實現Laravel模型
- Laravel核心程式碼學習 -- 模型關聯底層程式碼實現Laravel模型
- 無需編寫程式碼,API業務流程測試,零程式碼實現API
- 線性表的順序儲存C++程式碼實現C++
- Qt啟動子程式,子程式關閉時通知主程式,實現主程式對子程式的管理QT
- MyBatis初級實戰之六:一對多關聯查詢MyBatis
- Spring Boot 入門系列(二十八) JPA 的實體對映關係,一對一,一對多,多對多關係對映!Spring Boot
- 【資料結構】二叉樹(順序儲存、鏈式儲存)的JAVA程式碼實現資料結構二叉樹Java