AdventureWorks 案例研究
介绍:
Adventure Works Cycles,AdventureWorks 示例数据库所基于的虚构公司,是一家大型跨国生产公司。公司生产金属和复合材料的自行车,产品远销北美、欧洲和亚洲市场。公司总部设在华盛顿州的伯瑟尔市,拥有 299 名雇员,而且拥有多个活跃在世界各地的地区性销售团队。
在 2000 年,Adventure Works Cycles 购买了位于墨西哥的小型生产厂 Importadores Neptuno。Importadores Neptuno 为 Adventure Works Cycles 产品生产多种关键子组件。这些子组件将被运送到伯瑟尔市进行最后的产品装配。2001 年,Importadores Neptuno 转型成为专注于旅行登山车系列产品的制造商和销售商。
实现一个成功的财务年度之后,Adventure Works Cycles 希望通过以下方法扩大市场份额:专注于向高端客户提供产品、通过外部网站扩展其产品的销售渠道、通过降低生产成本来削减其销售成本。
现状:
今天,企业在北美、欧洲和亚洲(自行车行业)商业市场已经拥有市场地位。而且,它销售备用部件给不同国家的其他自行车制造商。公司已经在中国上海建立了另外一个制造厂。
Adventure Works 通过372个地区销售办公室运作,并且在全球雇佣了12,000名员工。
企业通过包括四大运营部门:制造、销售、人力资源和购买。考虑所有部门维护和共享大量信息,管理层决定在Bothell维护一个公共数据库。
Peter Greb,Adventure Works的IT顾问,决定实现Sql Server 2005以维护这个数据库。数据库分析组研究了Adventure Works的每个部门使用的信息并且为名为Adventure Works的数据库创建了一个设计。
数据库设计包括五个架构:销售、产品、人力资源、人和购买。每个架构包含特定的运营部门的数据库对象。如下表所示:
架构 |
运营部门 |
Sales |
销售和市场 |
Production |
制造 |
HumanResources |
人力资源 |
Purchase |
购买和提供商 |
Person |
不属于任何部门。它包含数据库对象以维护所有运行部门的人的联系详情。 |
未来计划:
随着竞争的增长,Adventure Works的管理层想在下两个财年增加30%的利润。对于它,管理层正在开拓新市场和扩展现有市场的份额的可能性。
为了支持未来的共同目标,IT部门创建了下面的目标:
² 使数据库对全球不同地点的各种办公室可用。
² 提供高可用性的数据库服务器
² 维护日常备份并且对任何数据损失提供支持
² 提供数据库服务器的安全以便在公司的不同等级的用户有不同服务数据的等级。所有用户不应该能够浏览或修改所有数据。
---***************************************五大架构****************************---
Person架构
HumanResources架构:
Purchaing架构:
Sales架构:
Production架构:
AdventureWorks 中的架构
在 Microsoft SQL Server 2005 中,架构与用户是分开的:作为数据库主体,用户拥有架构,而对象则包含在架构中。有关详细信息,请参阅用户架构分离。
下表说明 AdventureWorks 中所使用的架构并列出每个架构中典型的表。
架构 |
包含相关对象 |
示例 |
HumanResources |
Adventure Works Cycles 的雇员。 |
Employee 表 Department 表 |
Person |
各个客户、供应商和雇员的名称和地址。 |
Contact 表 Address 表 StateProvince 表 |
Production |
由 Adventure Works Cycles 生产和销售的产品。 |
BillOfMaterials 表 Product 表 WorkOrder 表 |
Purchasing |
从其采购零件和产品的供应商。 |
PurchaseOrderDetail 表 PurchaseOrderHeader 表 Vendor 表 |
Sales |
与客户和销售相关的数据。 |
Customer 表 SalesOrderDetail 表 SalesOrderHeader 表 |
HumanResources架构:
Employee表
列 |
数据类型 |
为空性 |
说明 |
EmployeeID |
int |
非空 |
雇员行的主键。 |
NationalIDNumber |
nvarchar(15) |
非空 |
唯一的国家/地区标识号(例如身份证号码)。 |
ContactID |
int |
非空 |
标识 Contact 表中的雇员。指向 Contact.ContactID 的外键。 |
LoginID |
nvarchar(256) |
非空 |
网络登录。 |
ManagerID |
int |
空 |
雇员的上司。指向 Employee.EmployeeID 的外键。 |
Title |
nvarchar(50) |
非空 |
职位(例如买方代表或销售代表)。 |
BirthDate |
datetime |
非空 |
出生日期。 |
MaritalStatus |
nchar(1) |
非空 |
M = 已婚 S = 未婚 |
Gender |
nchar(1) |
非空 |
M = 男 F = 女 |
HireDate |
datetime |
非空 |
雇佣雇员的日期。 |
SalariedFlag |
Flag(用户定义类型) bit |
非空 |
工作分类。 0 = 计时,可以集体讨价。 1 = 月薪,不能集体讨价。 |
VacationHours |
smallint |
非空 |
假期可持续的小时数。 |
SickLeaveHours |
smallint |
非空 |
病假可持续的小时数。 |
CurrentFlag |
Flag(用户定义类型) bit |
非空 |
0 = 非活动 1 = 活动 |
rowguid |
uniqueidentifier ROWGUIDCOL |
非空 |
唯一标识行的 ROWGUIDCOL 号。用于支持合并复制示例。 |
ModifiedDate |
datetime |
非空 |
行的上次更新日期和时间。 |
Department表
列 |
数据类型 |
为空性 |
说明 |
DepartmentID |
smallint |
非空 |
Department 行的主键。 |
Name |
Name(用户定义类型) nvarchar(50) |
非空 |
部门名称。 |
GroupName |
Name(用户定义类型) nvarchar(50) |
非空 |
部门所属的组名称。 |
ModifiedDate |
datetime |
非空 |
行的上次更新日期和时间。 |
EmployeeDepartmentHistory 表
列 |
数据类型 |
为空性 |
说明 |
EmployeeID |
int |
非空 |
雇员标识号。指向 Employee.EmployeeID 的外键。 |
DepartmentID |
smallint |
非空 |
雇员现在所在或原来所在的部门。指向 Department.DepartmentID 的外键。 |
ShiftID |
tinyint |
非空 |
分配给雇员的工作轮班时间(例如,白班、晚班或夜班)。指向 Shift.ShiftID 的外键。 |
Startdate |
datetime |
非空 |
雇员在部门中开始工作的日期。 |
EndDate |
datetime |
空 |
雇员离开部门的日期。 空 = 当前部门 |
ModifiedDate |
datetime |
非空 |
行的上次更新日期和时间。 |