適用対象:SQL Server
Azure SQL Database
WideWorldImporters データベースには、販売と購入に関するすべてのトランザクション情報と毎日のデータのほか、車両と冷却室のセンサー データが含まれています。
スキーマ
WideWorldImporters では、データの格納、ユーザーによるデータへのアクセス方法の定義、データ ウェアハウスの開発と統合のためのオブジェクトの提供など、さまざまな目的でスキーマを使用します。
データ スキーマ
これらのスキーマにはデータが含まれます。 多くのテーブルが他のすべてのスキーマで必要になり、アプリケーション スキーマに配置されます。
[スキーマ] | 説明 |
---|---|
アプリケーション | アプリケーション全体のユーザー、連絡先、パラメーター。 このスキーマには、複数のスキーマで使用されるデータを含む参照テーブルも含まれています |
購入 | 仕入先からの在庫品目の購入と、仕入先に関する詳細。 |
Sales | 小売顧客への在庫品目の販売と、顧客と販売員に関する詳細。 |
倉庫 | 在庫品目の在庫とトランザクション。 |
セキュリティで保護されたアクセスのスキーマ
これらのスキーマは、データ テーブルに直接アクセスできない外部アプリケーション用に使用されます。 外部アプリケーションによって使用されるビューとストアド プロシージャが含まれています。
[スキーマ] | 説明 |
---|---|
Web サイト | 会社の Web サイトからデータベースにアクセスする場合は、必ずこのスキーマを使用します。 |
Reports | Reporting Services レポートからデータベースにアクセスする場合は、必ずこのスキーマを使用します。 |
PowerBI | Power BI ダッシュボードからエンタープライズ ゲートウェイを介してデータベースにアクセスする場合は、必ずこのスキーマを使用します。 |
Reports スキーマと PowerBI スキーマは、サンプル データベースの最初のリリースでは使用されません。 ただし、このデータベースに基づいて構築されたすべての Reporting Services と Power BI のサンプルでは、これらのスキーマを使用することをお勧めします。
開発スキーマ
特殊な目的のスキーマです
[スキーマ] | 説明 |
---|---|
統合 | データ ウェアハウス統合に必要なオブジェクトとプロシージャ (つまり、WideWorldImportersDW データベースへのデータの移行)。 |
シーケンス | アプリケーション内のすべてのテーブルで使用されるシーケンスを保持します。 |
Tables
データベース内のすべてのテーブルは、データ スキーマ内にあります。
アプリケーション スキーマ
パラメーターと人 (ユーザーと連絡先) の詳細と、共通の参照テーブル (他の複数のスキーマに共通) です。
テーブル | 説明 |
---|---|
SystemParameters | システム全体の構成可能なパラメーターが含まれます。 |
People | アプリケーションを使用するすべての人と、Wide World Importers が顧客組織で取引する人のユーザー名と連絡先情報が含まれます。 このテーブルには、スタッフ、顧客、仕入先、その他のあらゆる連絡先が含まれます。 システムまたは Web サイトを使うアクセス許可が付与されている人の場合は、その情報にログインの詳細が含まれます。 |
市町村 | システムには多くの住所が格納されています (人の住所、顧客組織の配送先住所、仕入先の集荷住所など)。住所が格納されるたびに、このテーブル内の都市への参照があります。 また、都市ごとの空間位置もあります。 |
StateProvinces | 都市は州の一部です。 このテーブルには、それらの詳細が含まれています (各州の境界を記述する空間データなど)。 |
国 | 州は国/地域の一部です。 このテーブルには、それらの詳細が含まれています (各国/地域の境界を記述する空間データなど)。 |
DeliveryMethods | 在庫品目を配送するための選択肢です (トラック/バン、郵便、集荷、宅配便など) |
PaymentMethods | 支払いの選択肢です (現金、小切手、EFT など) |
TransactionTypes | 顧客、仕入先、または在庫の取引の種類です (請求書、訂正票など) |
購入スキーマ
仕入先の詳細と在庫品目購入の詳細です。
テーブル | 説明 |
---|---|
Suppliers | 仕入先 (組織) のメイン エンティティ テーブルです |
SupplierCategories | 仕入先のカテゴリです (ノベルティ、おもちゃ、衣類、包装など) |
SupplierTransactions | 仕入先に関連するすべての金融取引です (請求書、支払い) |
PurchaseOrders | 仕入先注文書の詳細です |
PurchaseOrderLines | 仕入先注文書の明細行です |
販売スキーマ
顧客、販売員、在庫品目の販売に関する詳細です。
テーブル | 説明 |
---|---|
顧客 | 顧客 (組織または個人) のメイン エンティティ テーブルです |
CustomerCategories | 顧客のカテゴリです (ノベルティ ストア、スーパーマーケットなど) |
BuyingGroups | 顧客組織は、より大きな購買力を持つグループの一部である場合があります |
CustomerTransactions | 顧客に関連するすべての金融取引です (請求書、支払い) |
SpecialDeals | 特別価格です。 固定価格、ドル単位の割引、または割引率などが含まれます。 |
注文 | 顧客注文の詳細です |
OrderLines | 顧客注文の明細行です |
Invoices | 顧客請求書の詳細です |
InvoiceLines | 顧客請求書の明細行です |
ウェアハウス スキーマ
在庫品目、保有、取引の詳細です。
テーブル | 説明 |
---|---|
StockItems | 在庫品目のメイン エンティティ テーブルです |
StockItemHoldings | 在庫品目の非テンポラル列です。 頻繁に更新される列です。 |
StockGroups | 在庫品目を分類するためのグループです (ノベルティ、おもちゃ、食用ノベルティなど) |
StockItemStockGroups | どの在庫品目がどの在庫グループに含まれるか (多対多) |
色 | 在庫品目は色を持つことができます (省略可能) |
PackageTypes | 在庫品目をパッケージ化する方法です (箱、カートン、パレット、kg など) |
StockItemTransactions | すべての在庫品目のすべての移動をカバーする取引です (入庫、販売、損金処理) |
VehicleTemperatures | 車両冷却装置の定期的に記録される温度です |
ColdRoomTemperatures | 冷却室の冷却装置の定期的に記録される温度です |
設計上の考慮事項
データベース設計は主観的であり、データベースを設計する正しい方法、間違った方法というものはありません。 このデータベースのスキーマとテーブルは、お客様が独自のデータベースを設計するために役立つアイデアを示しています。
スキーマの設計
WideWorldImporters では、そのデータベース システムを簡単に理解し、データベースの原則を示すことができるように、いくつかのスキーマを使用しています。
可能であれば、データベースでは通常まとめて照会されるテーブルを同じスキーマに配置して、結合の複雑さを最小限に抑えます。
データベース スキーマは、別のデータベース WWI_Preparation 内の一連のメタデータ テーブルに基づいてコード生成されています。 これは WideWorldImporters に、高度な設計の整合性、名前付けの整合性、完全性をもたらします。 スキーマの生成方法について詳しくは、ソース コード wide-world-importers/wwi-database-scripts を参照してください
テーブル設計
- 結合を簡単にするために、すべてのテーブルに単一列の主キーがあります。
- すべてのスキーマ、テーブル、列、インデックス、CHECK 制約には、オブジェクトまたは列の目的を識別するために使用できる Description 拡張プロパティがあります。 メモリ最適化テーブルは、現在拡張プロパティをサポートしていないため、その例外です。
- 左側のコンポーネントが同じである別の非クラスター化インデックスがない限り、すべての外部キーに自動的にインデックスが作成されます。
- テーブルの自動番号付けは、シーケンスに基づいています。 これらのシーケンスは、リンク サーバーや同様の環境間では IDENTITY 列よりも簡単に使用できます。 メモリ最適化テーブルでは IDENTITY 列が使用されます (SQL SERVER 2016 ではサポートされていないため)。
- 次のテーブルには、1 つのシーケンス (TransactionID) が使用されます: CustomerTransactions、SupplierTransactions、StockItemTransactions。 これは、一連のテーブルが 1 つのシーケンスを持つ方法を示しています。
- 一部の列には、適切な既定値があります。
セキュリティ スキーマ
セキュリティ上、WideWorldImporters では、外部アプリケーションがデータ スキーマに直接アクセスすることはできません。 WideWorldImporters では、アクセスを分離するために、データを保持せず、ビューとストアド プロシージャが含まれるセキュリティアクセス スキーマを使用します。 外部アプリケーションでは、セキュリティ スキーマを使用して、表示が許可されているデータを取得します。 これにより、ユーザーは、セキュリティで保護されたアクセスのスキーマ内のビューとストアド プロシージャのみを実行できます
たとえば、このサンプルには Power BI ダッシュボードが含まれています。 外部アプリケーションは、Power BI スキーマに対する読み取り専用アクセス許可を持つユーザーとして、Power BI ゲートウェイからこれらの Power BI ダッシュボードにアクセスします。 読み取り専用アクセス許可の場合、ユーザーに必要なのは Power BI スキーマに対する SELECT および EXECUTE アクセス許可のみです。 WWI のデータベース管理者は、必要に応じてこれらのアクセス許可を割り当てます。
ストアド プロシージャ
ストアド プロシージャはスキーマで整理されています。 ほとんどのスキーマは、構成またはサンプルの目的で使用されます。
Website
スキーマには、Web フロントエンドで使用できるストアド プロシージャが含まれています。
Reports
スキーマと PowerBI
スキーマは、レポート サービスと Power BI のためのものです。 サンプルの拡張機能では、レポートの目的でこれらのスキーマを使用することが推奨されます。
Web サイト スキーマ
これらは、Web フロントエンドなどのクライアント アプリケーションで使用されるプロシージャです。
プロシージャ | パーパス |
---|---|
ActivateWebsiteLogon | (Application.People の) 人が Web サイトにアクセスできるようにします。 |
ChangePassword | ユーザーのパスワードを変更します (外部認証メカニズムを使用していないユーザー用)。 |
InsertCustomerOrders | 1 つ以上の顧客注文 (注文明細行を含む) を挿入できます。 |
InvoiceCustomerOrders | 請求する注文の一覧を受け取り、請求書を処理します。 |
RecordColdRoomTemperatures | センサー データのリストをテーブル値パラメーター (TVP) として受け取り、そのデータを Warehouse.ColdRoomTemperatures テンポラル テーブルに適用します。 |
RecordVehicleTemperature | JSON 配列を受け取り、それを使用して Warehouse.VehicleTemperatures を更新します。 |
SearchForCustomers | 名前または名前の一部 (会社名または人物名) で顧客を検索します。 |
SearchForPeople | 名前または名前の一部で人を検索します。 |
SearchForStockItems | 名前または名前の一部、またはマーケティング コメントで在庫品目を検索します。 |
SearchForStockItemsByTags | タグで在庫品目を検索します。 |
SearchForSuppliers | 名前または名前の一部 (会社名または人物名) で仕入先を検索します。 |
統合スキーマ
このスキーマのストアド プロシージャは、ETL プロセスによって使用されます。 ETL パッケージに必要な期間について、さまざまなテーブルから必要なデータを取得します。
DataLoadSimulation スキーマ
販売と購入を挿入するワークロードをシミュレートします。 メイン ストアド プロシージャは PopulateDataToCurrentDate
です。これは、現在の日付までのサンプル データを挿入するために使用されます。
プロシージャ | パーパス |
---|---|
Configuration_ApplyDataLoadSimulationProcedures | データ読み込みシミュレーションに必要なプロシージャを再作成します。 これは、データを現在の日付に更新するために必要です。 |
Configuration_RemoveDataLoadSimulationProcedures | データ シミュレーションの完了後にプロシージャを再度削除します。 |
DeactivateTemporalTablesBeforeDataLoad | すべてのテンポラル テーブルのテンポラルの性質を削除し、必要に応じてトリガーを適用して、sys-temporal テーブルで許可されているよりも早い日付に適用されたかのように変更できるようにします。 |
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 | 次のシーケンス値の位置を、同じシーケンスを使用するテーブル内の値を超える位置に変更する場合に使用されます (シーケンスに相当する ID 列の DBCC CHECKIDENT と同様ですが、複数のテーブルにまたがる可能性があります)。 |