SAP CDS view里,什么时候用left join,什么时候用association
看這個例子View: I_SalesContractItemFlfmtCube
有的地方用的left join, 有的地方用的association,有什么guideline規定何時何處用哪一種技術么?
看這個幫助文檔:
http://help.sap.com/hana/SAP_HANA_Core_Data_Services_CDS_Reference_en.pdf
Association它指明了兩個View之間的關系,如果一個View A中定義了Association到另外一個View B時,View A可以把這個Association作為一種特殊類型的字段暴露在selection list里面,那么當上層的另一個View C使用到View A時,他可以通過View A中暴露的這個Association去取View B中的字段。
也就是說只有當View C會用到View B中的字段時,在Runtime的時候View A就會去做left outer join到View B,當上層的View沒有用到View B中的字段時,View A就不會Join View B。這樣就能提升了View的性能,因為如果直接使用left outer join,那么View A就肯定會join View B,不管上層會不會用到View B中的字段。Association在底層應該也是用left outer join實現的。
如果兩個View中的字段是在Business Logic中是必定會用到的,那么就用Join;如果只是提供一個額外連接,但上層用戶有需要時自行去取這些字段,那么就用Association。
我的理解是通過association暴露出來的字段是一種lazy join的behavior,只有當field真正被另一個view用到的時候才會去做join。
本質上,所有的association在runtime時都會被interpret為left out join,當然前提是這個association你在runtime的時候用到了。
從基本規則而言,如果你需要target table/view的(一個或多個)字段直接暴露在當前定義的view里,那么使用join,而如果只是想暴露一個接口,為上層提供resource,那么使用association。
既然說到left out join,我們就不得不提到,left out to one join, 這里的to one會在runtime時根據消費的情況決定是否這個join會真正被執行。比如當target table/view 的字段在消費時(比如在ABAP動態或靜態代碼里)沒有用到,那么這個join會被by pass掉。
前面說association在runtime時也是LOJ,因此,截圖里的[0…1]其實也是被被翻譯成To one。當然還有[1…1]也是。其效果類似。
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
總結
以上是生活随笔為你收集整理的SAP CDS view里,什么时候用left join,什么时候用association的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TCL华星携多款产品亮相CITE2023
- 下一篇: Kubernetes本地集群和Googl