适用于: 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.InvoiceLines 和 Sales.OrderLines 都具有非聚集列存储索引,以支持在事务数据库中高效执行分析查询,同时对操作工作负载的影响最小。 在同一数据库中运行事务和分析也称为混合事务/分析处理 (HTAP)。 若要在操作中了解这一点,请使用 sample-script.zip 中的相应脚本,这是示例发布的一部分。 |
PolyBase | 若要在操作中了解此 PolyBase,使用外部表以及托管在 Azure Blob 存储中的公共数据集,请使用 sample-script.zip 中的相应脚本,这是示例发布的一部分。 |
内存中 OLTP | (完整版本的数据库)表类型都是内存优化的,因此表值参数 (TVP) 都受益于内存优化。 两个监视表 Warehouse.VehicleTemperatures 和 Warehouse.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.CustomerTransactions 和 Purchasing.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 门户启用审核。 涉及登录名、角色和权限的安全运营记录在启用了审核的所有系统上(包括标准版系统)。 将审核定向到应用程序日志,因为这在所有系统上都可用,不需要其他权限。 警告:为了提高安全性,应将其重定向到安全日志或重定向到安全文件夹中的文件。 提供了一个链接来描述所需的其他配置。 对于评估版/开发人员版/企业版系统,会审核对所有财务事务数据的访问。 |