表關系高階
在上一篇 表關系管理 中,介紹了訂單中一對多、多對一、以及多對多關系,本文主要介紹一對一關系和無限主子表在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。
官網地址:https://crudapi.cn
測試地址:https://demo.crudapi.cn/crudapi/login