2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > SAP CDS view里 什么时候用left join 什么时候用association

SAP CDS view里 什么时候用left join 什么时候用association

时间:2020-01-14 14:46:30

相关推荐

SAP CDS view里 什么时候用left join 什么时候用association

看这个例子View: I_SalesContractItemFlfmtCube

有的地方用的left join, 有的地方用的association,有什么guideline规定何时何处用哪一种技术么?

看这个帮助文档:

/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的原创文章,请关注公众号"汪子熙":

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。