WideWorldImporters 数据库包含销售和购买的所有交易信息和每日数据,以及车辆和冷藏室的传感器数据。
架构
WideWorldImporters 将架构用于不同的目的,例如存储数据、定义用户访问数据的方式以及为数据仓库开发和集成提供对象。
数据架构
这些架构包含数据。 所有其他架构都需要许多表,并且这些表位于应用程序架构中。
架构 | 说明 |
---|---|
应用程序 | 应用程序范围内的用户、联系人和参数。 此架构还包含引用表,其中包含多个架构使用的数据 |
购买 | 从供应商处购买的库存物料以及供应商的详细信息。 |
销售 | 向零售客户销售库存物料,以及有关客户和销售人员的详细信息。 |
仓库 | 库存物料盘存和交易。 |
安全访问架构
这些架构用于不允许直接访问数据表的外部应用程序。 它们包含外部应用程序使用的视图和存储过程。
架构 | 说明 |
---|---|
网站 | 从公司网站对数据库的所有访问都通过此架构进行。 |
报表 | 从 Reporting Services 报表对数据库的所有访问都通过此架构进行。 |
PowerBI | 通过企业网关从 Power BI 仪表板对数据库的所有访问都通过此架构进行。 |
示例数据库的初始版本中不使用报表和 PowerBI 架构。 但是,建议在此数据库之上构建的所有 Reporting Services 和 Power BI 示例都使用这些架构。
开发架构
特殊用途架构
架构 | 说明 |
---|---|
集成 | 数据仓库集成(即,将数据迁移到 WideWorldImportersDW 数据库)所需的对象和过程。 |
序列 | 保存应用程序中所有表使用的序列。 |
表
数据库中的所有表都位于数据架构中。
应用程序架构
参数和人员(用户和联系人)的详细信息,以及通用引用表(多个其他模式通用)。
表 | 说明 |
---|---|
SystemParameters | 包含系统范围的可配置参数。 |
People | 包含用户名、联系人信息,适用于使用该应用程序的所有人员,以及 Wide World Importers 在客户组织中处理的人员。 此表包括员工、客户、供应商和任何其他联系人。 对于已被授予使用系统或网站的权限的人员,该信息包括登录详细信息。 |
城市 | 系统中存储了许多地址,包括人员、客户组织送货地址、供应商的取件地址等。每当存储地址时,此表中都有对城市的引用。 每个城市还有一个空间位置。 |
StateProvinces | 城市是州或省的一部分。 此表包含这些内容的详细信息,其中包括描述每个州或省边界的空间数据。 |
国家/地区 | 州或省是国家/地区的一部分。 此表包含这些内容的详细信息,其中包括描述每个国家/地区边界的空间数据。 |
DeliveryMethods | 交付库存物料的选项(例如,卡车/面包车、邮寄、皮卡、快递等) |
PaymentMethods | 付款选项(例如,现金、支票、EFT 等) |
TransactionTypes | 客户、供应商或股票交易的类型(例如,发票、贷方通知单等) |
购买架构
供应商和库存物料购买的详细信息。
表 | 说明 |
---|---|
Suppliers | 供应商(组织)的主实体表 |
SupplierCategories | 供应商类别(例如,新奇品、玩具、服装、包装等) |
SupplierTransactions | 与供应商相关的所有财务交易(发票、付款) |
PurchaseOrders | 供应商采购订单的详细信息 |
PurchaseOrderLines | 供应商采购订单中的详细信息行 |
销售架构
客户、销售人员以及库存物料销售的详细信息。
表 | 说明 |
---|---|
客户 | 客户(组织或个人)的主实体表 |
CustomerCategories | 客户类别(例如,新奇品商店、超市等) |
BuyingGroups | 客户组织可以是具有更大购买力的群体的一部分 |
CustomerTransactions | 与客户相关的所有财务交易(发票、付款) |
SpecialDeals | 特价。 这可以包括固定价格、美元折扣或折扣百分比。 |
订单 | 客户订单的详细信息 |
OrderLines | 客户订单的详细信息行 |
发票 | 客户发票的详细信息 |
InvoiceLines | 客户发票的详细信息行 |
仓库架构
股票项目、持有量和交易的详细信息。
表 | 说明 |
---|---|
StockItems | 库存物料的主实体表 |
StockItemHoldings | 库存物料的非临时列。 这些列经常更新。 |
StockGroups | 用于分类库存物料的组(例如,新奇品、玩具、可食用的新奇品等) |
StockItemStockGroups | 哪些库存物料属于哪些库存组(多对多) |
颜色 | 库存物料可以(选择)具有颜色 |
PackageTypes | 库存物料的包装方式(例如,盒子、纸箱、托盘、公斤等) |
StockItemTransactions | 涵盖所有库存物料的所有变动(收货、销售、核销)的交易 |
VehicleTemperatures | 定期记录的车辆冷却器温度 |
ColdRoomTemperatures | 定期记录的冷藏室冷却器温度 |
设计注意事项
数据库设计是主观的,设计数据库的方式没有正确与错误之分。 此数据库中的架构和表显示了如何设计自己的数据库的想法。
架构设计
WideWorldImporters 使用一些架构,以便轻松理解数据库系统并演示数据库原则。
数据库尽可能将通常一起查询的表并置到同一架构中,以最大程度地降低联接复杂性。
数据库架构是基于另一个数据库 WWI_Preparation 中的一系列元数据表的代码生成的。 这为 WideWorldImporters 提供了高度的设计一致性、命名一致性和完整性。 有关如何生成架构的详细信息,请参阅源代码:wide-world-importers/wwi-database-scripts
表设计
- 为了简化联接,所有表都具有单列主键。
- 所有架构、表、列、索引和检查约束都具有 Description 扩展属性,可用于标识对象或列的用途。 内存优化表是一个例外,因为它们当前不支持扩展属性。
- 除非有另一个具有相同左侧组件的非聚集索引,否则会自动为所有外键编制索引。
- 表中的自动编号基于序列。 与 IDENTITY 列相比,这些序列更易于跨链接服务器和类似的环境使用。 内存优化表使用 IDENTITY 列,因为它们在 SQL Server 2016 中不支持。
- 单个序列 (TransactionID) 用于以下表:CustomerTransactions、SupplierTransactions 和 StockItemTransactions。 这演示了一组表如何具有单个序列。
- 某些列具有适当的默认值。
安全架构
出于安全原因,WideWorldImporters 不允许外部应用程序直接访问数据架构。 为了隔离访问,WideWorldImporters 使用不保存数据但包含视图和存储过程的安全访问架构。 外部应用程序使用安全架构来检索允许其查看的数据。 这样,用户只能运行安全访问架构中的视图和存储过程
例如,此示例包括 Power BI 仪表板。 外部应用程序以对 Power BI 架构具有只读权限的用户身份从 Power BI 网关访问这些 Power BI 仪表板。 对于只读权限,用户只需要对 Power BI 架构具有 SELECT 和 EXECUTE 权限。 WWI 的数据库管理员根据需要分配这些权限。
存储过程
存储过程按架构进行组织。 大多数架构用于配置或示例目的。
Website
架构包含可由 Web 前端使用的存储过程。
Reports
和 PowerBI
架构适用于报表服务和 Power BI。 建议示例的任何扩展将这些架构用于报告目的。
网站架构
这些是客户端应用程序(如 Web 前端)使用的过程。
过程 | 用途 |
---|---|
ActivateWebsiteLogon | 允许用户(来自 Application.People )访问网站。 |
ChangePassword | 更改用户的密码(对于未使用外部身份验证机制的用户)。 |
InsertCustomerOrders | 允许插入一个或多个客户订单(包括订单行)。 |
InvoiceCustomerOrders | 获取要开票的订单列表并处理发票。 |
RecordColdRoomTemperatures | 采用传感器数据列表作为表值参数 (TVP),并将数据应用于 Warehouse.ColdRoomTemperatures 临时表。 |
RecordVehicleTemperature | 获取 JSON 数组,并使用它来更新 Warehouse.VehicleTemperatures 。 |
SearchForCustomers | 按名称或名称的一部分(公司名称或人员姓名)搜索客户。 |
SearchForPeople | 按姓名或姓名的一部分搜索人员。 |
SearchForStockItems | 按名称或名称的一部分或市场营销评论搜索库存物料。 |
SearchForStockItemsByTags | 按标记搜索库存物料。 |
SearchForSuppliers | 按名称或名称的一部分(公司名称或人员姓名)搜索供应商。 |
集成架构
此架构中的存储过程由 ETL 进程使用。 在 ETL 包所需的时间范围内,它们从各种表中获取所需的数据。
DataLoadSimulation 架构
模拟插入销售和购买的工作负载。 主存储过程是 PopulateDataToCurrentDate
,用于插入当前日期前的示例数据。
过程 | 用途 |
---|---|
Configuration_ApplyDataLoadSimulationProcedures | 重新创建数据加载模拟所需的过程。 这是提供当前日期前的数据所必需的。 |
Configuration_RemoveDataLoadSimulationProcedures | 这会在数据模拟完成后再次删除过程。 |
DeactivateTemporalTablesBeforeDataLoad | 删除所有临时表的时态性质,并在适用的情况下应用触发器,以便可以像在 sys 临时表允许的更早的日期应用这些更改一样。 |
PopulateDataToCurrentDate | 用于提供当前日期前的数据。 应在从初始备份还原数据库后,在任何其他配置选项之前运行。 |
ReactivateTemporalTablesAfterDataLoad | 重新建立临时表,包括检查数据一致性。 (删除关联的触发器)。 |
应用程序架构
这些过程用于配置示例。 它们用于将企业版功能应用到示例的标准版,以及添加审核和全文索引。
过程 | 用途 |
---|---|
AddRoleMemberIfNonexistent | 如果成员尚未在角色中,则向该角色添加成员 |
Configuration_ApplyAuditing | 添加审核。 服务器审核适用于标准版数据库;为企业版添加了其他数据库审核。 |
Configuration_ApplyColumnstoreIndexing | 将列存储索引应用于 Sales.OrderLines 和 Sales.InvoiceLines ,并相应地重新编制索引。 |
Configuration_ApplyFullTextIndexing | 将全文索引应用于 Application.People 、Sales.Customers 、Purchasing.Suppliers 和 Warehouse.StockItems 。 将 Website.SearchForPeople 、Website.SearchForSuppliers 、Website.SearchForCustomers 、Website.SearchForStockItems 、Website.SearchForStockItemsByTags 替换为使用全文索引的替换过程。 |
Configuration_ApplyPartitioning | 将表分区应用于 Sales.CustomerTransactions 和 Purchasing.SupplierTransactions ,并重新排列适合的索引。 |
Configuration_ApplyRowLevelSecurity | 应用行级别安全性,按销售区域相关角色筛选客户。 |
Configuration_ConfigureForEnterpriseEdition | 应用列存储索引、全文、内存中、polybase 和分区。 |
Configuration_EnableInMemory | 添加内存优化文件组(在 Azure 中不工作时),将 Warehouse.ColdRoomTemperatures 、Warehouse.VehicleTemperatures 替换为内存中等效项,并迁移数据,使用内存优化等效项重新创建 Website.OrderIDList 、Website.OrderList 、Website.OrderLineList 、Website.SensorDataList 表类型,删除并重新创建使用这些表类型的过程 Website.InvoiceCustomerOrders Website.InsertCustomerOrders 、和 Website.RecordColdRoomTemperatures 。 |
Configuration_RemoveAuditing | 删除审核配置。 |
Configuration_RemoveRowLevelSecurity | 删除行级别安全配置(这是更改关联表所必需的)。 |
CreateRoleIfNonexistent | 创建数据库角色(如果尚不存在)。 |
序列架构
在数据库中配置序列的过程。
过程 | 用途 |
---|---|
ReseedAllSequences | 为所有序列调用过程 ReseedSequenceBeyondTableValue。 |
ReseedSequenceBeyondTableValue | 用于将下一个序列值重新定位到使用相同序列的任何表中的值之外。 (如 DBCC CHECKIDENT 用于等同于序列但可能跨多个表的标识列)。 |