零程式碼實現一對一表關係和無限主子表級聯儲存

kboypkb發表於2021-09-09

表關係高階

在上一篇中,介紹了訂單中一對多、多對一、以及多對多關係,本文主要介紹一對一關係和無限主子表在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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章