製品シナリオ

このトピックでは、AdventureWorks サンプル データベースで表される製品情報、製品関連のテーブルの一覧、および共通のテーブル リレーションシップを示すサンプル クエリの詳細について説明します。

製品の概要

自転車製造会社である Adventure Works Cycles には、次の 4 つの製品ラインがあります。

  • Adventure Works Cycles 社で製造する自転車

  • ホイール、ペダル、またはブレーキの組み立て品などの自転車の交換部品

  • Adventure Works Cycles の顧客への再販用として仕入先から購入する自転車用衣料品

  • Adventure Works Cycles の顧客への再販用として仕入先から購入する自転車用付属品

製品テーブル

次の表に、製品関連のテーブルに格納されるデータの簡単な説明を示します。

Schema.Table

格納されるデータの内容

コメント

Production.BillOfMaterials

自転車および自転車の部分組み立て品の製造に使用されるすべての部品の一覧。

ProductAssemblyID 列は親製品 (主要製品) を表し、ComponentID は親の組み立てに使用する子部品 (個々の部品) を表します。

Production.Culture

ローカライズされた製品説明で使用されている言語。

製品説明は、アラビア語、英語、フランス語、ヘブライ語、簡体字中国語、およびタイ語で表示できます。

Production.Location

製品や部品の在庫が保管されている Adventure Works Cycles 内の場所の一覧。たとえば塗料は、倉庫内の塗料保管場所と、自転車フレームの塗装を行う塗装部門製造作業センターに保管されています。

 

Production.Product

Adventure Works Cycles で販売している製品、および Adventure Works Cycles 製自転車や自転車部品の製造に使用される製品の情報。

FinishedGoodsFlag 列は、製品が販売対象かどうかを示します。販売対象外の製品は、販売対象製品の部品です。たとえば、自転車は販売対象となりますが、自転車フレームの製造に使用される金属板は販売の対象になりません。

Production.ProductCategory

製品の最も一般的な分類。バイクや付属品などがこれに当たります。

 

Production.ProductCostHistory

製品のコストの履歴。

 

Production.ProductDescription

各言語で記述された製品の詳細な説明。

製品説明は、アラビア語、英語、フランス語、ヘブライ語、簡体字中国語、およびタイ語で表示できます。

Production.ProductInventory

製品の場所別の在庫レベル。上記の「Production.Location」を参照してください。

 

Production.ProductListPriceHistory

製品の表示価格の履歴。

 

Production.ProductModel

製品に関連付けられている製品モデル。Mountain-100 や LL Touring Frame などがこれに当たります。

CatalogDescription 列には、追加の製品情報が xml データ型で格納されます。Instructions 列には、製品の製造手順書が xml データ型で格納されます。

ProductModelProductDescriptionCulture

製品モデル、製品説明、および説明のローカライズ言語の相互参照。

 

Production.ProductPhoto

Adventure Works Cycles で販売されている製品の画像。

画像は、varbinary(max) データ型で格納されます。

Production.ProductReview

Adventure Works Cycles 製品の顧客レビュー。

 

Production.ProductSubcategory

製品カテゴリのサブカテゴリ。たとえば、Bike カテゴリのサブカテゴリは、Mountain、Road、Touring などになります。

 

次のクエリを使用し、製品データを表示することによって、製品テーブルのリレーションシップについて詳細に理解することができます。

A. カテゴリ、サブカテゴリ、およびモデル別の製品の表示

次の例では、カテゴリ、サブカテゴリ、およびモデル別にすべての製品が一覧表示されます。分類されていない製品は、表示されません。すべての製品を表示対象とするには、ProductCategory の結合を完全結合に変更します。

USE AdventureWorks;
GO
SELECT PC.Name AS Category, PSC.Name AS Subcategory,
    PM.Name AS Model, P.Name AS Product
FROM Production.Product AS P
    FULL JOIN Production.ProductModel AS PM ON PM.ProductModelID = P.ProductModelID
    FULL JOIN Production.ProductSubcategory AS PSC ON PSC.ProductSubcategoryID = P.ProductSubcategoryID
    JOIN Production.ProductCategory AS PC ON PC.ProductCategoryID = PSC.ProductCategoryID
ORDER BY PC.Name, PSC.Name ;
GO

B. 製品モデル別の製品説明の表示

製品説明は、製品モデルごとに作成されます。各説明は複数の言語で表示できます。次の例では、各製品の説明が各言語で表示されます。

注意注意

複雑なスクリプトや東アジア言語などの一部の言語を適切に表示するには、補足言語サポート ファイルのインストールが必要になる場合があります。これらのファイルをインストールするには、Windows の地域と言語のオプションに関するドキュメントを参照してください。

USE AdventureWorks;
GO
SELECT PM.ProductModelID, PM.Name AS [Product Model], Description, PL.CultureID, CL.Name AS Language
FROM Production.ProductModel AS PM 
    JOIN Production.ProductModelProductDescriptionCulture AS PL 
        ON PM.ProductModelID = PL.ProductModelID
    JOIN Production.Culture AS CL ON CL.CultureID = PL.CultureID
    JOIN Production.ProductDescription AS PD 
        ON PD.ProductDescriptionID = PL.ProductDescriptionID
ORDER BY PM.ProductModelID ;
GO

C. 1 つにまとめられた、親製品に関する単一レベル部品表の表示

次の例では、特定の親製品 (ProductAssemblyID) の製造に使用される部品がすべて表示されます。

USE AdventureWorks;
GO
WITH Parts(AssemblyID, ComponentID, PerAssemblyQty, EndDate, ComponentLevel) AS
(
    SELECT b.ProductAssemblyID, b.ComponentID, b.PerAssemblyQty,
        b.EndDate, 0 AS ComponentLevel
    FROM Production.BillOfMaterials AS b
    WHERE b.ProductAssemblyID = 800
          AND b.EndDate IS NULL
    UNION ALL
    SELECT bom.ProductAssemblyID, bom.ComponentID, p.PerAssemblyQty,
        bom.EndDate, ComponentLevel + 1
    FROM Production.BillOfMaterials AS bom 
        INNER JOIN Parts AS p
        ON bom.ProductAssemblyID = p.ComponentID
        AND bom.EndDate IS NULL
)
SELECT AssemblyID, ComponentID, Name, PerAssemblyQty, EndDate,
        ComponentLevel 
FROM Parts AS p
    INNER JOIN Production.Product AS pr
    ON p.ComponentID = pr.ProductID
ORDER BY ComponentLevel, AssemblyID, ComponentID;
GO