美文网首页SAP
什么是 SAP CDS view 的 join on deman

什么是 SAP CDS view 的 join on deman

作者: _扫地僧_ | 来源:发表于2023-08-23 09:11 被阅读0次

    SAP CDS view 里借助 path expression 技术,我们可以实现 join on demand 的场景。

    如下图所示:


    Join on demand是SAP CDS (Core Data Services)视图的一个重要特性,它允许您在CDS视图中实现延迟连接,从而优化查询性能。通过在需要时执行连接操作,而不是在每次查询时都执行连接,可以减少数据库的负担,提高查询性能。

    在SAP CDS视图中,通常会涉及到多个实体(表)之间的连接操作,例如INNER JOIN、LEFT OUTER JOIN等。在传统的连接方式中,连接操作会在查询开始时立即执行,这可能会导致不必要的开销,特别是在某些查询中可能并不需要连接的情况下。

    使用Join on demand特性,可以将连接操作推迟到实际需要时再执行。这意味着如果您的查询不需要连接的数据,连接操作就不会发生,从而提高了查询的效率。

    以下是一个简单的示例,演示了如何在SAP CDS视图中使用Join on demand

    假设我们有两个实体(表):SalesOrderCustomer。我们希望创建一个CDS视图,显示销售订单信息及其关联的客户信息。我们可以使用Join on demand来实现这一点。

    首先,定义SalesOrder实体:

    entity SalesOrder {
      key SalesOrderID : UUID;
      CustomerID : UUID;
      OrderDate : Date;
      // ... other fields
    };
    

    然后,定义Customer实体:

    entity Customer {
      key CustomerID : UUID;
      Name : String;
      // ... other fields
    };
    

    接下来,创建一个CDS视图,使用Join on demand来连接SalesOrderCustomer

    @AbapCatalog.sqlViewName: 'Z_CDS_SalesOrderWithCustomer'
    @AccessControl.authorizationCheck: #NOT_REQUIRED
    @EndUserText.label: 'Sales Order with Customer'
    define view SalesOrderWithCustomer as select from SalesOrder
      association [0..1] to Customer as _Customer on $projection.CustomerID = _Customer.CustomerID
    {
      key SalesOrder.SalesOrderID,
      SalesOrder.OrderDate,
      _Customer.Name as CustomerName
    };
    

    在上面的代码中,我们使用了association来定义SalesOrderCustomer之间的连接。关键是,我们在连接上使用了[0..1],这表示在查询时仅在需要时才执行连接操作,而不是立即执行。这就是Join on demand的关键部分。

    通过这种方式,当我们查询SalesOrderWithCustomer视图时,连接操作将会根据需要来执行,而不会在每次查询时都执行,从而提高了查询性能。

    总而言之,Join on demand是SAP CDS视图中的一个重要特性,它通过延迟连接操作的执行来优化查询性能。这在处理大量数据和复杂查询时特别有用,可以减少数据库负担,提高查询效率。通过合理使用Join on demand,您可以在CDS视图中实现更高效的数据模型和查询。

    相关文章

      网友评论

        本文标题:什么是 SAP CDS view 的 join on deman

        本文链接:https://www.haomeiwen.com/subject/mgufmdtx.html