表關系高階
在上一篇
表關系管理中,介紹了訂單中一對多、多對一、以及多對多關系,本文主要介紹一對一關系和無限主子表在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": "[email protected]",
"profile": {
"name": "劉備資料",
"birthday": "2021-02-14",
"sex": "男",
"hobby": "騎馬"
}
}
其中profile為客戶資料資訊,
查詢客戶詳情,發現客戶和客戶資料資訊一次性儲存成功!上一篇文章中,銷售訂單和訂單行是一對多主子關系,
子表是數組形式,在一對一主子關系中子表是對象形式,在資料庫中表現形式是相同的,外鍵都是建在子表中。
直接操作客戶資料
也可以直接建立客戶資料表,選擇挂在指定客戶下,可以達到同樣的效果。
無限子表
通過設定表關系,一對多和一對一(主子方向)理論上可以無限關聯下去,所有的表一次性級聯儲存,比如省市區通常可以達到3級子表,目錄檔案屬于無限子表。
省市區三級子表
省和市是一對多關系,市和區是一對多關系。
ui效果,江蘇省包括南京和淮安兩個城市,南京市又包括江甯區和雨花台區。
目錄無限子表
一級目錄下可以包括子目錄和檔案,如果是子目錄,子目錄可以繼續包括子目錄和檔案
圖目錄無限子表-1
圖目錄無限子表-2
ui效果,子表包括目錄和檔案,還可以繼續展開下去,由于螢幕大小的原因,這裡就不一一展示了。
查詢目錄清單
小結
本文介紹了一對一關系,包括主子方向和子主方向,加上一篇文章中一對多,多對一,多對多關系,到目前為止所有的表關系都實作了。crudapi系統通過配置的方式實作了對象之間的關聯,無需程式設計實作了主子表CRUD操作。
附crudapi簡介
本系統屬于産品級的零代碼平台,不同于自動代碼生成器,不需要生成Controller、Service、Repository、Entity等業務代碼,程式運作起來就可以使用,真正0代碼,可以覆寫基本的和業務無關的CRUD RESTful API。