
在 ABAP CDS 里看到composition时,如果只是把它理解成一种写法稍微特殊的association,很多语法规则都会显得很奇怪。为什么 child 一侧必须写association to parent,parent 一侧却写composition。为什么ON条件只出现在 child 一侧。为什么 cardinality 主要写在 parent 指向 child 的关系上。更容易踩坑的是,两个 CDS entity 互相引用时,为什么激活顺序还会影响语法检查。这些现象背后其实都指向同一个建模思想,composition描述的不是两个彼此独立实体之间的一般导航关系,而是一个具有所有权和存在依赖关系的整体结构。SAP 官方文档把 composition 明确定义为一种特殊的 CDS association。一个 composition 由一条 to-parent association 和一条 to-child association 共同组成,用来表达 composition child 对 composition parent 的存在依赖。SAP 官方给出的经典例子就是 Travel 和 Booking。一个 Booking 归属于某一个 Travel,Booking 不是脱离 Travel 独立存在的普通业务节点。删除对应 Travel 时,其 composition 范围内的 Booking 也属于这个业务对象生命周期的一部分。这和一般 association 的语义差别很大。普通 association 更接近