[FileMaker] Self-Join 和 Cartesian-Join 的同時應用

Self-Join 做 Relationship 關係連結,是很方便的一個技巧,以下這個例子,會使用 Self-Join + Cartesian-Join 的技巧,在同一個頁面,透過 Portal 來「呈現」所有資料,同時也可以對當前的這筆 Record 記錄做編輯。

螢幕快照 2018-01-03 下午5.25.54.png
圖片來源  http://rong120.pixnet.net

假設今天想要做一個「50藍茶飲」的產品頁面,嘗試用最簡單的方式初始設計,部分想法先具象化再逐步調整方案,以達到原本的目標。

新增 Field 欄位:id, name, price, note,分別是主鍵序號、產品名稱、價格、備註。

螢幕快照 2018-01-03 下午5.15.38.png

大致安排 Layout 版面上的欄位:主鍵序號、產品名稱、價格、備註

螢幕快照 2018-01-03 下午5.23.22.png

這時候我們是一個產品一個產品輸入,我們想要同時也看到其他「已經輸入」過的產品。

這時候就可以利用 Portal 入口,Portal 的功能非常重要,能讓我們在一個頁面呈現另一個 Table Occurrence (以下簡稱 TO) 的資料

但是這時候我們的資料庫裡面只有一個 TO,這時候要使用 Self-Join 的方式,在Relationship Graph 關係圖裡面複製一個 Product 的 TO,命名為:Product_All

Product 與 Product_All 兩個 TO 之間先用 id [=] id 關係連接

螢幕快照 2018-01-03 下午5.37.58.png

進入 Layout Mode,在左方新增一個 Portal,同樣命名為 Product_All

在這個 Portal 中新增欄位 Produce_All::name

表示我們要從 Product_All 這個 TO 取得 name 產品名稱資料,呈現在目前的 Layout 上

螢幕快照 2018-01-03 下午11.18.38.png

螢幕快照 2018-01-03 下午11.17.40.png

可以看到左方 Portal 中顯示了 1 筆產品名稱的資料,但實際上我已經先輸入了 13 筆飲料記錄,預期的結果應該是 Portal 中顯示 13 筆資料才對啊,怎麼會這樣呢?

螢幕快照 2018-01-03 下午11.21.27.png

問題出在 Relationship 關係,原本的關係為 Product 與 Product_All 兩個 TO 之間用 id [=] id 關係連接,id 完全相等的才會出現,所以只會有一筆資料,改成 id [x] id 的 Cartesian-Join 即可改善。

Cartesian-Join 可以交叉取得兩邊 TO 的資料,這樣設定以後,從任何一邊的 TO 都能取得另一個 TO 的所有資料。

螢幕快照 2018-01-05 上午11.37.08.png

點擊關係之間的 [=] 等號,改成 [x],點選 Change,OK,OK

螢幕快照 2018-01-03 下午11.32.08.png

Portal 出現所有輸入過的產品資料

螢幕快照 2018-01-03 下午11.36.23.png

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s