生产方案

本主题详细介绍了 AdventureWorks 示例数据库中的 Adventure Works Cycles 生产信息、一些与生产相关的表以及说明常用表关系的示例查询。

生产概述

在 AdventureWorks 示例数据库中,假定表支持下面典型的生产区:

  • 生产过程:

    • 物料清单:列出在其他产品中使用或包含的产品。

    • 工作订单:按生产车间安排的生产顺序。

    • 位置:定义主要的生产区和库存区(例如,用于框架成型、油漆、装配的区域)。

    • 生产车间使用的产品生产和装配说明。

  • 产品库存:某个产品在仓库或生产区中的实际位置和可用数量。

  • 工程文档:自行车或自行车组件的技术规范和维护文档。

生产表

下表简要说明了生产表中存储的数据。

Schema.Table

包含以下内容

注释

Production.BillOfMaterials

用于制造自行车和自行车部件的所有组件的列表。

物料清单结构本身是一种嵌套结构,指示父级产品和构成该产品的组件之间的关系。例如,如果父级产品是自行车,则第一级组件可能是车轮部件。而车轮部件又具有自己的组件(例如,反光罩、轮圈、轮辐、轮胎和内胎)。

ProductAssemblyID 列表示父产品(即主产品),ComponentID 表示用于构成父部件的子零件(即单个零件)。

BOM_Level 列指示ComponentID 相对于 ProductAssemblyID 的级别。在前面的示例中,车轮部件的 BOM_Level 为 1,车轮部件的组件的 BOM_Level 为 2,依此类推。

Production.Document

工程规范和其他技术文档。

DocumentSummary 列使用 varchar(max) 数据类型。Document 列使用 varbinary(max) 数据类型。

Production.Illustration

自行车生产图。

这些图呈现在 ProductModel 表中的生产说明内。该列使用 xml 数据类型。

Production.Location

Adventure Works Cycles 中的一系列库存区和生产区,产品和零件作为库存存放在这些区域中或者是在这些区域中进行生产。例如,油漆既贮藏在仓库的 Paint Storage 处,又储藏在制造中心 Paint Shop(自行车骨架在这里上漆)。

 

Production.Product

由 Adventure Works Cycles 销售或用来制造 Adventure Works Cycles 自行车和自行车组件的各种产品的信息。

FinishedGoodsFlag 列指示产品是否可供出售。不供出售的产品是出售产品的组件。例如,可以出售一辆自行车,但不会出售用于制造自行车的金属材料。

Production.ProductInventory

按地点统计的产品库存量。请参阅前面介绍的 Production.Location

 

Production.ProductModel

与产品关联的产品型号。例如,Mountain-100 或 LL Touring Frame。

CatalogDescription 列包含 xml 数据类型的附加产品信息。Instructions 列通过使用 xml 数据类型给出产品生产说明。

Production.ScrapReason

生产过程中拒绝自行车或自行车零件的常见原因列表。例如,在“上漆”生产车间,废弃未上漆好的自行车框架的原因是“上漆失败”。

WorkOrderRouting 表按产品跟踪废弃产品的数量以及废弃的原因。

需要根据问题的严重程度,对产品进行修理或替换,然后才可以将产品移交到下一个生产车间。

Production.WorkOrder

定义为了满足当前和未来销售的需要而必须生产的产品及其数量。

 

Production.WorkOrderRouting

每一工作订单的详细信息,包括在生产或装配过程中产品经历的生产车间的顺序。例如,自行车手柄在“框架成型”生产车间生产。生产出来后,再将它们移交到“框架焊接”生产车间进行其他作业,然后移送到“装配”生产车间将其装配到自行车框架上。

 

示例

您可以使用下列查询来查看生产和产品数据,并熟悉生产表关系。

A. 查看父级产品的多级别物料清单列表

下面的示例显示了用于创建特定父产品的所有组件: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

B. 查看产品库存

下面的示例列出了相应库存位置处各种产品的库存数量。一种产品可以存放在多个位置。

USE AdventureWorks;
GO
SELECT P.Name AS Product, L.Name AS [Inventory Location],
    SUM(PI.Quantity)AS [Qty Available]
FROM Production.Product AS P
    JOIN Production.ProductInventory AS PI ON P.ProductID = PI.ProductID
    JOIN Production.Location AS L ON PI.LocationID = L.LocationID
GROUP BY P.Name, L.Name
ORDER BY P.Name ;
GO

C. 按产品查看工作订单

下面的示例列出了“山地自行车”子类别 (1)、“平地自行车”子类别 (2) 和“旅行登山车”子类别 (3) 中产品的所有工作订单。

USE AdventureWorks;
GO
SELECT WorkOrderID, P.Name AS Product, OrderQty, DueDate
FROM Production.WorkOrder W 
    JOIN Production.Product P ON W.ProductID = P.ProductID
WHERE P.ProductSubcategoryID IN (1, 2, 3)
ORDER BY P.Name, DueDate ;
GO