首页 > 数据库 >SAP CDS view 定义的数据库视图和传统 SQL 语句定义视图的区别

SAP CDS view 定义的数据库视图和传统 SQL 语句定义视图的区别

时间:2023-07-29 17:24:22浏览次数:35  
标签:定义 SQL 视图 语法 CDS SAP view

SAP CDS (Core Data Services) 是 SAP HANA 数据模型开发的一种技术。它提供了一种领域特定的语言,用于定义数据模型,以及对数据进行查询、转换和展示。与传统的 SQL(Structured Query Language)相比,SAP CDS view 语法具有许多独特的特点和优势。在本文中,我将详细比较 SAP CDS view 语法与标准 SQL 语法,并通过举例来解释它们之间的区别。

1. 定义数据模型的语法

SAP CDS view 语法

SAP CDS view 使用 define view 关键字来定义数据模型。它是一种声明性语言,允许开发人员在数据模型中指定字段、数据关系、聚合等。CDS view 语法使用 as select from 结构来指定查询,通过 SELECT 语句来选择数据字段。

标准 SQL 语法

标准 SQL 语法使用 CREATE VIEW 语句来创建视图。它也是一种声明性语言,允许定义视图的字段和查询条件。SQL 视图通常使用 SELECT 语句来定义其结构。

2. 字段定义和数据类型

SAP CDS view 语法

在 SAP CDS view 中,字段的定义需要使用数据类型,并且 CDS 提供了丰富的数据类型来满足不同的需求,例如,IntegerStringDecimal 等。CDS 还支持自定义的数据类型。

标准 SQL 语法

在标准 SQL 中,字段定义也需要指定数据类型,常见的数据类型包括 intvarchardecimal 等。

示例 - 定义一个简单的员工信息视图

SAP CDS view 语法示例:
define view EmployeeView as select from Employees {
    key EmployeeID,
    FirstName,
    LastName,
    DateOfBirth,
    Salary
}
标准 SQL 语法示例:
CREATE VIEW EmployeeView AS
SELECT EmployeeID,
       FirstName,
       LastName,
       DateOfBirth,
       Salary
FROM Employees;

3. 数据关联和外键

SAP CDS view 语法

在 SAP CDS view 中,可以使用关键字 associationon 来定义数据关联。它允许将不同实体之间的关系建模,并可以通过外键进行连接。CDS view 还可以指定关联的多样性,如 one-to-oneone-to-manymany-to-many

标准 SQL 语法

标准 SQL 通常使用 JOIN 关键字来进行数据表的连接操作。

示例 - 定义一个包含部门信息的员工视图

SAP CDS view 语法示例:
define view EmployeeWithDepartment as select from Employees
association [0..1] to Departments on $projection.DepartmentID = Departments.DepartmentID {
    key EmployeeID,
    FirstName,
    LastName,
    DateOfBirth,
    Salary,
    Departments.DepartmentName
}
标准 SQL 语法示例:
CREATE VIEW EmployeeWithDepartment AS
SELECT E.EmployeeID,
       E.FirstName,
       E.LastName,
       E.DateOfBirth,
       E.Salary,
       D.DepartmentName
FROM Employees E
LEFT JOIN Departments D ON E.DepartmentID = D.DepartmentID;

4. 聚合和计算字段

SAP CDS view 语法

SAP CDS view 支持在视图中进行聚合操作,如 sumcount 等,并且可以在视图中添加计算字段,这些字段在查询时动态计算得出。

标准 SQL 语法

标准 SQL 也支持聚合函数和计算字段的使用,可以通过 GROUP BY 子句来实现聚合操作。

示例 - 定义一个包含部门员工数量的部门视图

SAP CDS view 语法示例:
define view DepartmentWithEmployeeCount as select from Departments {
    key DepartmentID,
    DepartmentName,
    @ObjectModel.count.association('Employees') as EmployeeCount
}
标准 SQL 语法示例:
CREATE VIEW DepartmentWithEmployeeCount AS
SELECT D.DepartmentID,
       D.DepartmentName,
       COUNT(E.EmployeeID) as EmployeeCount
FROM Departments D
LEFT JOIN Employees E ON D.DepartmentID = E.DepartmentID
GROUP BY D.DepartmentID, D.DepartmentName;

5. 数据权限控制

SAP CDS view 语法

SAP CDS view 允许开发人员在数据模型中定义数据权限。这些权限可以限制用户对数据的访问,从而增强数据安全性。

标准 SQL 语法

标准 SQL 通常使用数据库系统提供的访问控制机制(如表级权限、行级权限)来实现数据权限控制。

示例 - 定义仅显示薪水小于等于 5000 的员工信息的视图

SAP CDS view 语法示例:
define view LowSalaryEmployees as select from Employees {
    key EmployeeID,
    FirstName,
    LastName,
    DateOfBirth,
    Salary
}
where Salary <= 5000;
标准 SQL 语法示例:
CREATE VIEW LowSalaryEmployees AS
SELECT EmployeeID,
       FirstName,
       LastName,
       DateOfBirth,
       Salary
FROM Employees
WHERE Salary <= 5000;

6. 扩展和继承

SAP CDS view 语法

SAP CDS view 支持对已有视图进行扩展和继承。通过扩展,可以在现有视图的基础上添加新的字段或重新定义字段的属性。通过继承,可以创建一个新的视图,继承并复用已有视图的结构和属性。

标准 SQL 语法

标准 SQL 中通常没有直接的语法来实现视图的扩展和继承。通常需要手动编写 SQL 语句来实现

类似的效果。

示例 - 定义扩展了 EmployeeView 的视图,新增了一个新的字段

SAP CDS view 语法示例:
extend view ExtendedEmployeeView with {
    bonusAmount : Salary * 0.1 as currency
}
in projection;
标准 SQL 语法示例:
-- 假设 ExtendedEmployeeView 是 EmployeeView 的扩展
CREATE VIEW ExtendedEmployeeView AS
SELECT EmployeeID,
       FirstName,
       LastName,
       DateOfBirth,
       Salary,
       Salary * 0.1 as bonusAmount
FROM EmployeeView;

7. 数据源和适配器

SAP CDS view 语法

SAP CDS view 允许将数据源和适配器抽象出来,使开发人员能够根据需要切换数据源或适配器,而不必修改 CDS 视图的定义。

标准 SQL 语法

标准 SQL 中通常直接指定表名或视图名作为数据源,适配器一般由数据库系统自身提供,不可随意更改。

示例 - 定义一个使用适配器的视图

SAP CDS view 语法示例:
@AccessControl.authorizationCheck: #CHECK
@AccessControl.authorizationCheck: #NOT_REQUIRED
@VDM.viewType: #BASIC
define view EmployeeWithAuthorizationCheck as select from Employees {
    key EmployeeID,
    FirstName,
    LastName,
    DateOfBirth,
    Salary
}
标准 SQL 语法示例:
-- 数据源直接指定为 Employees 表,适配器由数据库系统自身提供
CREATE VIEW EmployeeWithAuthorizationCheck AS
SELECT EmployeeID,
       FirstName,
       LastName,
       DateOfBirth,
       Salary
FROM Employees;

总结

SAP CDS view 语法与标准 SQL 语法在很多方面都有相似之处,都可以用于定义数据模型和视图,以及对数据进行查询和操作。然而,SAP CDS view 语法在某些方面提供了更高级的功能和更灵活的特性,如数据关联、聚合、计算字段、数据权限控制等。同时,它还支持对数据模型进行扩展和继承,以及在数据源和适配器方面提供了更强的抽象能力。这使得 SAP CDS view 成为了 SAP HANA 数据模型开发中的一种重要技术,为开发人员提供了更好的开发体验和更高的开发效率。

虽然 SAP CDS view 在 SAP HANA 等 SAP 平台上具有很高的适用性和优势,但在其他数据库系统中可能无法直接使用。因此,在选择使用 SAP CDS view 还是标准 SQL 时,需要根据具体的业务场景和技术需求来进行权衡和选择。

标签:定义,SQL,视图,语法,CDS,SAP,view
From: https://www.cnblogs.com/sap-jerry/p/17590146.html

相关文章

  • MYSQL的安全模式:sql_safe_updates介绍
    查看当前mysqlsession会话下的sql_safe_updatesselect@@sql_safe_updates;查看全局的配置参数sql_safe_updatesselect@@global.sql_safe_updates set[global]sql_safe_updates=1; 在update操作中:当where条件中列(column)没有索引可用且无limit限制时会拒绝更新。whe......
  • PythonNote042---pymysql使用
      简单介绍pymysql的一些操作,增改删查增先建表,再写数据至表中除查询操作外,增改删都需要commit操作,具体原理看ref.1importpandasaspdimportpymysqlimporttimeimportwarningswarnings.filterwarnings("ignore")建表con=pymysql.connect(host='localhost',......
  • electron的electron-packager打包运行和electron-builder生产安装包过程,学透 Electron
    electron的electron-packager打包运行和electron-builder生产安装包过程开发electron客户端程序,打包是绕不开的问题。macOS应用构建,看似近在咫尺,实则坑坑致命。场景:mac笔记本打包,以及生产出可交付的软件安装包,如何避坑,如何理解app的产生过程!!!!可以按照我测试的路程来配置环境。包......
  • mysql之find_in_Set函数
    1.语法#查询出在list中包含column2的所有行。此处list可以是字段或常量selectcolumn1fromtable_namewhereFIND_IN_SET(column2,list)2.与in的区别in后面只能跟常量,find_in_set()函数可以使用常量或字段。in是完全匹配,find_in_set()函数是精确匹配,字段值以英文”,”分隔。3.举......
  • 如何在 SAP Fiori Elements 应用的 manifest.json 里定义注解
    在SAPFioriElements应用中,manifest.json文件是应用的主要配置文件,其中定义了应用的元数据、模型、服务等信息。其中,dataSources区域负责描述应用使用的数据源,比如OData服务或者其他类型的后端服务。在dataSources区域的settings字段中,我们可以定义annotations,它们是......
  • python requests.session() 不使用session的cookie 自定义cookie
      req=requests.Request('GET',"https://xxxx.gif",headers=headers)#清空cookiesreq.cookies={}#发送请求session.send(req.prepare(),timeout=30,verify=Fa......
  • SQL去重
    1.使用Distinct去重selectname,telfromuserinfo;selectdistinctname,telfromuserinfo;这样会出现多个字段同时去重的情况,比如上述情况,无法获取当用户表中的去重用户名,当用户名重复并电话号码重复时,Distinct才会判定为重复数据。2.使用GroupBy去重selectname,telfromu......
  • MySQL 8.1正式发行!有哪些值得关注的新功能?
    千呼万唤始出来的新版本MySQL8.1及MySQL8.0.34于2023年7月18日正式发行。从此,MySQL将开启创新版和稳定版同时发行的阶段。MySQL8.1是MySQL的首个创新版,该版本主要增加了如下功能: 捕捉EXPLAINFORMAT=JSON输出,为EXPLAINFORMAT=JSON增加INTO选项,可以将JSON格式的输......
  • 给PHP 8和MySQL 8添加到环境变量-ThinkPHP8知识详解
    在PHPenv安装的时候,环境变量默认的PHP版本是7.4的,MySQL的版本是5.7的,要想使用ThinkPHP8来开发,就必须修改环境变量,本文就详细讲解了如果修改PHP和MySQL的环境变量。1、添加网站启动phpenv,网站,添加网站,域名,根目录,端口,PHP版本都设置好,如图:打开的网站,虽然显示的是php8.0的信息,实际上环......
  • MySQL 8.1正式发行!有哪些值得关注的新功能?
    千呼万唤始出来的新版本MySQL8.1及MySQL8.0.34于2023年7月18日正式发行。从此,MySQL将开启创新版和稳定版同时发行的阶段。MySQL8.1是MySQL的首个创新版,该版本主要增加了如下功能: 捕捉EXPLAINFORMAT=JSON输出,为EXPLAINFORMAT=JSON增加INTO选项,可以将JSON格式的输......