Self-Join 做 Relationship 關係連結,是很方便的一個技巧,以下這個例子,會使用 Self-Join + Cartesian-Join 的技巧,在同一個頁面,透過 Portal 來「呈現」所有資料,同時也可以對當前的這筆 Record 記錄做編輯。
圖片來源 http://rong120.pixnet.net
假設今天想要做一個「50藍茶飲」的產品頁面,嘗試用最簡單的方式初始設計,部分想法先具象化再逐步調整方案,以達到原本的目標。
新增 Field 欄位:id, name, price, note,分別是主鍵序號、產品名稱、價格、備註。
大致安排 Layout 版面上的欄位:主鍵序號、產品名稱、價格、備註
這時候我們是一個產品一個產品輸入,我們想要同時也看到其他「已經輸入」過的產品。
這時候就可以利用 Portal 入口,Portal 的功能非常重要,能讓我們在一個頁面呈現另一個 Table Occurrence (以下簡稱 TO) 的資料
但是這時候我們的資料庫裡面只有一個 TO,這時候要使用 Self-Join 的方式,在Relationship Graph 關係圖裡面複製一個 Product 的 TO,命名為:Product_All
Product 與 Product_All 兩個 TO 之間先用 id [=] id 關係連接
進入 Layout Mode,在左方新增一個 Portal,同樣命名為 Product_All
在這個 Portal 中新增欄位 Produce_All::name
表示我們要從 Product_All 這個 TO 取得 name 產品名稱資料,呈現在目前的 Layout 上
可以看到左方 Portal 中顯示了 1 筆產品名稱的資料,但實際上我已經先輸入了 13 筆飲料記錄,預期的結果應該是 Portal 中顯示 13 筆資料才對啊,怎麼會這樣呢?
問題出在 Relationship 關係,原本的關係為 Product 與 Product_All 兩個 TO 之間用 id [=] id 關係連接,id 完全相等的才會出現,所以只會有一筆資料,改成 id [x] id 的 Cartesian-Join 即可改善。
Cartesian-Join 可以交叉取得兩邊 TO 的資料,這樣設定以後,從任何一邊的 TO 都能取得另一個 TO 的所有資料。
點擊關係之間的 [=] 等號,改成 [x],點選 Change,OK,OK
Portal 出現所有輸入過的產品資料