使用 SQL Server 特性和功能

适用于: SQL Server Azure SQL 数据库

WideWorldImporters 在 OLTP 数据库中使用 SQL Server 特性和功能。

WideWorldImporters 旨在展示 SQL Server 的许多关键功能,包括 2016 SQL Server 中引入的最新功能。 下表列出了 SQL Server 的特性和功能。 每一行还介绍了如何在 WideWorldImporters 中使用这些功能。
 

SQL Server 特性或功能 在 WideWorldImporters 中使用
临时表 有许多临时表,包括所有查找样式引用表和主要实体,如 StockItems、Customers 和 Suppliers。 使用临时表可以方便地跟踪这些实体的历史记录。
对 JSON 的 AJAX 调用 应用程序经常使用 AJAX 调用来查询以下表:Persons、Customers、Suppliers 和 StockItems。 调用以 JSON 格式返回数据。 例如,请参阅存储过程 Website.SearchForCustomers
JSON 属性/值包 许多表具有保存 JSON 数据的列,用于扩展表中的关系数据。 例如,Application.SystemParameters 具有一个用于应用程序设置的列,Application.People 具有一个用于记录用户首选项的列。 这些表使用 nvarchar(max) 列来记录 JSON 数据,并通过使用内置函数 ISJSON 的 CHECK 约束来确保列值是有效的 JSON。
行级别安全性 (RLS) 行级别安全性 (RLS) 用于根据角色成员身份限制对 Customers 表的访问。 每个销售区域都有一个角色和一个用户。 若要在操作中了解 RLS 访问限制,请使用 sample-script.zip 中的相应脚本,这是示例发布的一部分。
实时运行分析 (完整版本的数据库)核心事务表 Sales.InvoiceLinesSales.OrderLines 都具有非聚集列存储索引,以支持在事务数据库中高效执行分析查询,同时对操作工作负载的影响最小。 在同一数据库中运行事务和分析也称为混合事务/分析处理 (HTAP)。 若要在操作中了解这一点,请使用 sample-script.zip 中的相应脚本,这是示例发布的一部分。
PolyBase 若要在操作中了解此 PolyBase,使用外部表以及托管在 Azure Blob 存储中的公共数据集,请使用 sample-script.zip 中的相应脚本,这是示例发布的一部分。
内存中 OLTP (完整版本的数据库)表类型都是内存优化的,因此表值参数 (TVP) 都受益于内存优化。

两个监视表 Warehouse.VehicleTemperaturesWarehouse.ColdRoomTemperatures 是内存优化表。 内存优化允许以比基于磁盘的传统表更高的速度填充 ColdRoomTemperatures 表。 VehicleTemperatures 表保存 JSON 有效负载,并适合扩展到 IoT 方案。 VehicleTemperatures 表进一步适用于涉及 EventHubs、流分析和 Power BI 的方案。

存储过程 Website.RecordColdRoomTemperatures 以本机方式编译,以进一步提高记录冷藏室温度的性能。

若要在操作中了解内存中 OLTP 的示例,请参阅 workload-drivers.zip 中的车辆位置工作负载驱动程序,这是示例发布的一部分。
聚集列存储索引 (完整版本的数据库)表 Warehouse.StockItemTransactions 使用聚集列存储索引。 预计此表中的行数会增大,聚集列存储索引会显著减小表的磁盘上的大小,并提高查询性能。 此表的修改是仅插入的(在联机工作负载中没有对此表进行更新/删除),并且聚集列存储索引可以很好地用于插入工作负载。
动态数据屏蔽 在数据库架构中,数据掩码已应用于 Purchasing.Suppliers 表中为供应商保留的银行详细信息。 非管理员员工将无法访问此信息。
Always Encrypted Always Encrypted 的演示包含在可下载的 samples.zip 中,这是示例发布的一部分。 该演示创建一个加密密钥、一个对敏感数据使用加密的表,以及一个将数据插入表的小型示例应用程序。
Stretch Database Warehouse.ColdRoomTemperatures 表已作为临时表实现,并在示例数据库的完整版本中进行了内存优化。 存档表基于磁盘,可以拉伸到 Azure。
全文索引 全文索引改进了对 People、Customers 和 StockItems 的搜索。 仅当在 SQL Server 实例上安装了全文索引时,才会将索引应用于查询。 非永久性计算列用于创建在 StockItems 表中编制全文索引的数据。

CONCAT 用于串联字段,以创建编制全文索引的 SearchData。
若要在示例中启用全文索引,请在数据库中执行以下语句:

EXECUTE [Application].[Configuration_ConfigureFullTextIndexing]

如果尚不存在全文目录,该过程会创建一个默认的全文目录,然后将搜索视图替换为这些视图的全文版本。

请注意,在 SQL Server 中使用全文索引需要在安装过程中选择“全文”选项。 Azure SQL 数据库不需要特定配置即可启用全文索引。
编制索引的持久化计算列 SupplierTransactions 和 CustomerTransactions 中使用的编制索引的持久化计算列。
检查约束 相对复杂的检查约束位于 Sales.SpecialDeals 中。 这可确保配置 DiscountAmount、DiscountPercentage 和 UnitPrice 中的一个且唯一一个。
唯一约束 Warehouse.StockItemStockGroups 设置多对多构造(和唯一约束)。
表分区 (完整版本的数据库)表 Sales.CustomerTransactionsPurchasing.SupplierTransactions 均使用分区函数 PF_TransactionDate 和分区架构 PS_TransactionDate 按年进行分区。 分区用于提高大型表的可管理性。
列表处理 提供了一个示例表类型 Website.OrderIDList。 它由示例过程 Website.InvoiceCustomerOrders 使用。 此过程使用公用表表达式 (CTE)、TRY/CATCH、JSON_MODIFY、XACT_ABORT、NOCOUNT、THROW 和 XACT_STATE 来演示处理订单列表(而不仅仅是单个订单)的能力,以最大限度地减少从应用程序到数据库引擎的往返。
GZip 压缩 Warehouse.VehicleTemperature 视图中,其表包含完整的传感器数据。 但是,当这些数据的保留时间超过几个月时,会对其进行压缩以节省空间。 COMPRESS 函数使用 GZip 压缩。

视图 Website.VehicleTemperatures 在检索以前压缩的数据时使用 DECOMPRESS 函数。
查询存储 数据库上启用了查询存储。 运行一些查询后,请执行以下步骤:

1. 在 Management Studio 中打开数据库。
2. 打开数据库下的“查询存储”节点。
3. 打开“资源使用排名靠前的查询”报表。 查看查询执行,并查看刚运行的查询的计划。
STRING_SPLIT Sales.Invoices 表中的 DeliveryInstructions 列具有逗号分隔的值,可用于演示 STRING_SPLIT。
审核 通过在数据库中运行以下语句,可以为此示例数据库启用 SQL Server 审核:

EXECUTE [Application].[Configuration_ApplyAuditing]

在 Azure SQL 数据库中,通过 Azure 门户启用审核。

涉及登录名、角色和权限的安全运营记录在启用了审核的所有系统上(包括标准版系统)。 将审核定向到应用程序日志,因为这在所有系统上都可用,不需要其他权限。 警告:为了提高安全性,应将其重定向到安全日志或重定向到安全文件夹中的文件。 提供了一个链接来描述所需的其他配置。

对于评估版/开发人员版/企业版系统,会审核对所有财务事务数据的访问。