IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management | XML  >

DB2 SQL 与 XQuery 教程,附录: 附录 A

Aroma 数据库中的所有表以及表之间的关系

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论


级别: 中级

Pat Moffatt (pmoffatt@ca.ibm.com), 信息管理程序经理, IBM Academic Initiative, IBM
Bruce Creighton (bcreight@ca.ibm.com), 技能划分规划师, IBM
Jessica Cao (jcao@ca.ibm.com), 训练工具开发人员, IBM

2006 年 10 月 26 日

附录 A 描述 Aroma 数据库中的所有表,该数据库由两种模式组成:一种是用于零售信息的简单的星型模式,另一种是用于采购信息的多星型模式。本附录属于 DB2 SQL 与 XQuery 教程 系列。

关于本附录

附录 A 描述 Aroma 数据库中的所有表,该数据库由两种模式组成 —— 一种是用于零售信息的简单的星型模式,另一种是用于采购信息的多星型模式。

本文中大部分例子都使用零售模式中的表。只有一些需要更灵活的模式用于适当演示的例子才使用到采购表。





回页首


连接到数据库

在使用 SQL 查询或操纵数据之前,需要连接到一个数据库。CONNECT 语句将一个数据库连接与一个用户名相关联。

如果您使用本指南作为学校课程的一部分,那么可以向老师询问要连接到的数据库的名称。对于本系列,数据库名为 aromadb。

要连接到 aromadb 数据库,可以在 DB2 命令行处理器中输入以下命令:

		
		CONNECT TO aromadb USER userid USING password

注意用老师告诉您的用户 ID 和密码替换 "userid" 和 "password"。如果不需要用户 ID 和密码,那么只需使用以下命令:

		
		CONNECT TO aromadb

如果看到下面的消息,则说明您已经建立一个成功的连接:

		
		Database Connection Information
		Database server      = DB2/NT 9.0.0
		SQL authorization ID = USERID
		Local database alias = AROMADB

建立连接后,就可以开始使用数据库了。





回页首


Aroma 数据库:零售模式

本指南中的大多数例子都使用基本 Aroma 数据库中的数据,这个数据库用于跟踪 Aroma Coffee and Tea Company 拥有的各家商店每日的零售数据。图 1 阐释了这种基本模式。


图 1. 基本模式
基本模式

在这个图中,鸡爪状的连线表示两个表之间一对多的关系。例如,每个不同的值在 Period 表的 Perkey 列中只能出现一次,但是在 Sales 表中可以出现多次。

基本 aroma 模式

下列表组成了基本 Aroma 数据库:


Period定义时间段,例如天、月和年
Class定义在零售店出售的产品的类别
Product定义在零售店出售的各种产品,包括散装的和有包装的咖啡和茶,以及咖啡机
Market定义地理上的商业市场
Store定义 Aroma Coffee and Tea Company 拥有和运营的各家商店
Promotion定义针对不同产品的促销活动的类型、期限和价值
Sales包含一定时间段内 Aroma 产品在不同商店内的销售数据
Gold包含购买了促销卡的客户

Period、Class、Product、Market、Store、Promotion 和 Gold 表都是典型的业务维。这些表都比较小,其中包含用户所熟悉的描述性数据。

Sales 表则是事实表的一个很好的例子。它包含数千行记录,查询通过连接到 Sales 表所引用的维表来访问该表庞大的附加信息。





回页首


Class 和 Product 表中的示例数据

查询

SELECT * FROM aroma.class;


结果

ClasskeyClass_TypeClass_Desc
1 Bulk_beans Bulk coffee products
2 Bulk_tea Bulk tea products
3 Bulk_spice Bulk spices
4 Pkg_coffee Individually packaged coffee products
5 Pkg_tea Individually packaged tea products
6 Pkg_spice Individually packaged spice products
7 Hardware Coffee mugs, teapots, spice jars, espresso machines
8 Gifts Samplers, gift boxes, and baskets
12 Clothing T-shirts and caps


查询

SELECT * FROM aroma.product;


结果

ClasskeyProdkeyProd_NamePkg_Type
1 0 Veracruzano No pkg
1 1 Xalapa Lapa No pkg
1 10 Colombiano No pkg
1 11 Expresso XO No pkg
1 12 La Antigua No pkg
1 20 Lotta Latte No pkg
1 21 Cafe Au Lait No pkg
1 22 NA Lite No pkg
1 30 Aroma Roma No pkg
1 31 Demitasse Ms No pkg
2 0 Darjeeling Number 1 No pkg
2 1 Darjeeling Special No pkg
2 10 Assam Grade A No pkg
...

Class 和 Product 表

Product 表描述 Aroma 数据库中定义的产品。Class 表描述那些产品属于哪些类别。


列描述:Class 表
列名内容
classkey整数,明确标识 Class 表中的一行。classkey 是主键
class_type字符串,标识一组产品
class_desc字符串,描述一组产品


列描述:Product 表
列名内容
classkey对 Class 表的外键引用
prodkey整数,由 Classkey 值组成,标识 Product 表中的一行。Classkey/prodkey 是由两列组成的主键
prod_name字符串,标识一种产品。本数据库包含 59 种产品。完整填充了数据的数据库还将包含更多的产品。虽然有些 Aroma 产品有相同的名称,但是属于不同的类别,有不同的包装类型
pkg_type字符串,标识每种产品的包装类型





回页首


store 和 market 表中的示例数据

查询

SELECT * FROM aroma.market;


结果

MktkeyHQ_CityHQ_StateDistrictRegion
1AtlantaGAAtlantaSouth
2MiamiFLAtlantaSouth
3New OrleansLANew OrleansSouth
4HoustonTXNew OrleansSouth
5New YorkNYNew YorkNorth
...


查询

SELECT * FROM aroma.store;


结果

StorekeyMktkeyStore_TypeStore_NameStreetCityStateZip
114SmallRoasters, Los Gatos1234 University AveLos GatosCA95032
214LargeSan Jose Roasting Company5678 Bascom AveSan JoseCA95156
314MediumCupertino Coffee Supply987 DeAnza BlvdCupertinoCA97865
43MediumMoulin Rouge Roasting898 Main StreetNew OrleansLA70125
510SmallMoon Pennies98675 University AveDetroitMI48209
69SmallThe Coffee Club9865 Lakeshore BlvdChicagoIL06060
...

Market 和 Store 表

Store 表定义 Aroma Coffee and Tea Company 拥有的商店。Market 表描述每家商店属于美国的哪一块市场。每块市场由一个主要的大城市标识。Market 表与 Class 表一样,是一个外部表。


列描述:Market 表
列名内容
Mktkey整数,标识 Market 表中的一行。Mktkey 是主键
hq_city字符串,标识一个城市。Market 表定义了 17 个城市。完整填充了数据的数据库可能包含数千个城市
State字符串,标识一个州
District字符串,基于主要大城市标识一个地区。完整的数据库将包含国家和地区或其他地理上的维
Region字符串,标识一个区域。Market 表只为美国定义了四个区域。一个完整的数据库将包括很多个区域,每个区域可能包括更多的地区


列描述:Store 表
列名内容
storekey整数,标识 Store 表中的一行。Storekey 是主键
Mktkey对 Market 表的外键引用
store_type字符串,标识商店的规模
store_name字符串,标识商店的名称
street, city, state, zip标识每家商店的地址的列





回页首


Period 表中的示例数据

查询

SELECT * FROM aroma.period;


结果

Perkey Date Day Week Month Qtr Year
1 2004-01-01 TH 1 JAN Q1_04 2004
2 2004-01-02 FR 1 JAN Q1_04 2004
3 2004-01-03 SA 1 JAN Q1_04 2004
4 2004-01-04 SU 2 JAN Q1_04 2004
5 2004-01-05 MO 2 JAN Q1_04 2004
6 2004-01-06 TU 2 JAN Q1_04 2004
7 2004-01-07 WE 2 JAN Q1_04 2004
8 2004-01-08 TH 2 JAN Q1_04 2004
9 2004-01-09 FR 2 JAN Q1_04 2004
10 2004-01-10 SA 2 JAN Q1_04 2004
11 2004-01-11 SU 3 JAN Q1_04 2004
12 2004-01-12 MO 3 JAN Q1_04 2004
13 2004-01-13 TU 3 JAN Q1_04 2004
14 2004-01-14 WE 3 JAN Q1_04 2004
15 2004-01-15 TH 3 JAN Q1_04 2004
16 2004-01-16 FR 3 JAN Q1_04 2004
17 2004-01-17 SA 3 JAN Q1_04 2004
18 2004-01-18 SU 4 JAN Q1_04 2004
19 2004-01-19 MO 4 JAN Q1_04 2004
20 2004-01-20 TU 4 JAN Q1_04 2004
...

Period 表

Period 表定义 2004 年、2005 年和 2006 年第一季度的每天、每周、每月、每个季度和每年时间期限。


列描述
列名内容
Perkey整数,标识 Period 表中的一行。Perkey 是主键
Date标识从 1998 年 1 月 1 日到 2000 年 3 月 31 日这期间每一天的日期值
Day一周内各天的字符串缩写
Week整数,用数字标识每一年中的每个星期(从 1 到 53,每个星期从周日开始)
Month每个月的名称的字符串缩写
Qtr惟一地标识每个季度的字符串(例如 Q1_98、Q3_99)
Year整数,标识年份





回页首


Promotion 表中的示例数据


查询

SELECT * FROM aroma.promotion;


结果

PromokeyPromo_TypePromo_DescValueStart_DateEnd_Date
01No promotion0.009999-01-019999-01-01
1100Aroma catalog coupon1.002004-01-012004-01-31
2100Aroma catalog coupon1.002004-02-012004-02-29
3100Aroma catalog coupon1.002004-03-012004-03-31
4100Aroma catalog coupon1.002004-04-012004-04-30
5100Aroma catalog coupon1.002004-05-012004-05-31
6100Aroma catalog coupon1.002004-06-012004-06-30
7100Aroma catalog coupon1.002004-07-012004-07-31
8100Aroma catalog coupon1.002004-08-012004-08-31
9100Aroma catalog coupon1.002004-09-012004-09-30
10100Aroma catalog coupon1.002004-10-012004-10-31
11100Aroma catalog coupon1.002004-11-012004-11-30
12100Aroma catalog coupon1.002004-12-012004-12-31
13100Aroma catalog coupon1.002005-01-012005-01-31
14100Aroma catalog coupon1.002005-02-012005-02-28
15100Aroma catalog coupon1.002005-03-012005-03-31
16100Aroma catalog coupon1.002005-04-012005-04-30
17100Aroma catalog coupon1.002005-05-012005-05-31
18100Aroma catalog coupon1.002005-06-012005-06-30
19100Aroma catalog coupon1.002005-07-012005-07-31
20100Aroma catalog coupon1.002005-08-012005-08-31
...

Promotion 表

Promotion 表是一个维表,描述在不同时期针对不同产品的促销活动。Promotion 表有时也称为条件表,因为这种表表明在什么条件下出售产品。


列描述
列名内容
promokey整数,标识 Promotion 表中的一行。Promokey 是主键
promo_type整数,用数字(或代码)标识促销活动
promo_desc字符串,描述促销类型
value十进制数,表示促销的价值,例如减免的价钱或一张优惠券的价值
start_date, end_date表示促销活动起止时间的日期值





回页首


Sales 表中的示例数据


查询

SELECT * FROM aroma.sales;


结果

PerkeyClasskeyProdkeyStorekeyPromokeyQuantityDollars
22011168 34.00
241211169 60.75
2111111640 270.00
2230111616 36.00
2522111611 30.25
2130111630 187.50
2110111625 143.75
24102012 87.00
24112014 115.50
22222018 58.50
2402017 136.00
2502013 74.75
24302014 101.50
22102018 63.00
21223011 99.00
2646306 36.00
25123010 40.00
21113036 279.00
2513011 132.00
25103012 48.00
...


Sales 表

由多个列组成的主键

Sales 表包含一个由多个列组成的主键:它的 5 个列中的每个列都是对另一个表的主键的外键引用:

perkey, classkey, prodkey, storekey, promokey

这个主键将 Sales 表的数据链接到 Period、Product、Store 和 Promotion 维。

整个教程系列随处可见 Sales 表与其他表联结的例子。



列描述
列名内容
perkey对 Period 表的外键引用
classkey对 Class 表的外键引用
prodkey对 Product 表的外键引用
storekey对 Store 表的外键引用
promokey对 Promotion 表的外键引用
quantity整数,表示总销售量(每天)
dollars十进制数,表示总销售额(每天)





回页首


Gold 表中的示例数据

注意:读者在 Aroma 数据库初始化的时候在该数据库中找不到这个表。该表是由读者在本系列的第 6 部分,Data Definition Language and Control Language(developerWorks,2006 年 8 月)创建的。

下面的结果表显示了这个表在经过第 6 部分 “The INSERT Statement” 小节之后的样子。


查询

SELECT * FROM aroma.gold;


结果

Card_idStorekeyFnameLnameEmailStatus
11AdaAlexandercoffee_lover@hotmail.comActive
21BenBowmanmmmcoffee@yahoo.comActive
31CynthiaCheniheartcoffee@gmail.comActive
41DavidDoylecoffee_maniac@msn.comActive
51EmilyEnrightcupAday@hotmail.comActive
61FrankFreemancoffee_addict@gmail.comActive

Gold 表

Gold 表包含关于购买了促销卡的客户的信息。


列描述
列名内容
card_id用一个惟一卡号标识客户的 SMALLINT 值
storekey对 Store 表的外键引用
fname存储客户名字的字符串
lname存储客户姓氏的字符串
email存储客户电子邮箱地址的字符串
status存储客户状态的字符串





回页首


Aroma 数据库的采购模式

本教程中的一些例子用到了用于跟踪 Aroma Coffee and Tea Company 从其供应商那里收到的产品订单的表。这个采购模式使用与零售模式相同的 Product、Class 和 Period 维,但是有它自己的两个维:Deal 和 Supplier。Line_Items 和 Orders 表都包含事实,但在查询中 Orders 表还可以作为 Line_Items 表所引用的一个维表。

图 2 说明了采购模式中的表。


图 2. 采购模式中的表
采购模式中的表

多星型模式

Line_Items 和 Orders 表的主键并不与它们各自的一组维表外键相匹配。任意给定的维表主键的组合可能指向它们的事实表中的多个行。这种类型的表称作多星型 事实表或数据列表(data list)

例如,Orders 表中有多份订单号都可以引用同一组 Supplier、Deal 和 Period 特征:


Order_NoPerkeySupkeyDealkey
369981710070
370081710070

采购表

采购模式中包含与 Sales 表中存储的类似的事实,即价格和数量。价格是支付给供应商的整份订单或订单中特定种类产品的价钱。数量则是所订购的产品的单位数量。

可以用这个模式来问一些关于 Aroma Coffee and Tea Company 采购历史的有趣的问题,例如,哪些供应商在哪些产品上给予了最惠待遇,或者哪些供应商在结算订单方面保持着最佳记录。

Aroma Coffee and Tea Company 在它的所有商店出售相同的产品,并通过它的供应商进行采购。因此,可以编写跨这两个模式的查询来比较采购情况和销售情况,从而计算出简单的利润率。

下列表组成了 Aroma 数据库的采购模式:


Period定义时间段,例如天、月和年
Class定义产品的类别,
Product定义各种产品,包括在零售店出售的产品和从供应商那里采购的产品
Supplier定义 Aroma Coffee and Tea Company 向其采购产品的供应商
Deal定义供应商为采购提供的折扣优惠
Line_Items包含关于产品订单中产品的详细信息,包括每份订单上每种产品的价格和数量
Orders包含关于产品订单的信息,例如每份订单的全价和所订购产品的类型

Supplier 和 Deal 表是采购模式特有的,它们被 Orders 表所引用。


提示:采购模式只包含 2000 年第一季度的数据。





回页首


Supplier 和 Deal 表中的示例数据


查询

SELECT * FROM aroma.supplier;


结果

SupkeyTypeNameStreetCityStateZip
1001Coffee/teaCB Imports100 Church StreetMountain ViewCA94001
1002TeaTea Makers, Inc.1555 Hicks Rd.San JoseCA95124
...


查询

SELECT * FROM aroma.deal;


结果

DealkeyDeal_TypeDeal_DescDiscount
01000No deal0.00
1100Orders over $10,000100.00
2100Orders over $20,000500.00
3100Supplier catalog coupon50.00
4100Supplier catalog coupon100.00
37200Supplier coffee special75.00
38200Supplier coffee special50.00
39200Supplier tea special40.00
40200Supplier tea special20.00


supplier 和 deal 表


列描述:Supplier 表
列名内容
supkey整数,标识 Supplier 表中的一行。Supkey 是主键
type字符串,表明所供应产品的类型
name字符串,标识供应商的名称
street, city, state, zip标识供应商所在地址的列


列描述:Deal 表
列名内容
dealkey整数,标识 Deal 表中的一行。Dealkey 是主键
deal_type整数,标识优惠的类型(一个代码号)
deal_desc字符串,描述优惠的类型
discount十进制数值,表明应用于一份订单的优惠的价钱

共享的维

采购模式与零售模式共享 Period、Product 和 Class 这几个表。

就像单独查询零售模式和采购模式一样,还可以提出一些有趣的涉及到这两个模式中的表的问题。例如,可以联结 Sales 和 Line_Items 表,来比较采购产品的数量与售出产品的数量。这样的查询使用共享的维来包含产品和时期。





回页首


Orders 和 Line_Items 表中的示例数据


查询

SELECT * FROM aroma.orders;


结果

Order_NoPerkeySupkeyDealkeyOrder_TypeOrder_DescClose_DatePrice
3600731100137CoffeeWhole coffee b2006-01-071200.46
3601732100137CoffeeWhole coffee b2006-01-071535.94
360273310010TeaLoose tea, bul2006-01-07780.00
3603740100139TeaLoose tea, bul2006-01-21956.45
360474410050SpicePre-packed spi2006-01-16800.66
360576810032CoffeeWhole-bean and2006-02-1225100.00
360677510032CoffeeWhole-bean and2006-02-1925100.00
360778210032CoffeeWhole-bean and2006-02-2525100.00
360878910032CoffeeWhole-bean and2006-03-0330250.00
360979610032CoffeeWhole-bean and2006-03-1525100.00
...


查询

SELECT * FROM aroma.line_items;


结果

Order_NoLine_ItemPerkeyClasskeyProdkeyReceive_DateQtyPrice
36001731112006-01-0740180.46
360027312102006-01-0750300.00
360037312112006-01-0780240.00
360047312122006-01-07150240.00
360057311202006-01-0760240.00
36011732102006-01-0760240.00
36012732112006-01-0760240.00
360137321102006-01-0760240.00
360147321112006-01-0760240.00
360157321122006-01-0760240.00
360167321312006-01-0770335.94
36021733202006-01-0870130.00
36022733212006-01-0870130.00
...


Orders 和 Line_Items 表

Orders 和 Line_Items 表包含采购事实。


列描述:Orders 表
列名内容
order_no整数,惟一标识 Orders 表中的一行。Order_No 是主键
perkey对 Period 表的外键引用
supkey对 Supplier 表的外键引用
dealkey对 Deal 表的外键引用
order_type字符串,定义所订购产品的类型
order_desc字符串,描述订单的类型
close_date日期值,标识订单被完成或结算的时间
price十进制数值,表明订单的全价


列描述:Line_Items 表
列名内容
order_no整数,惟一标识 Orders 表中的一行。Order_No 是主键
line_item整数,用数字标识订单中列出的每样产品
perkey对 Period 表的外键引用
classkey对 Class 表的外键引用
prodkey对 Product 表的外键引用
receive_date日期值,标识收到所订购产品的时间
quantity整数,标识所订购的每一样产品的数量
price十进制数值,表明一样产品的价格


参考资料

学习

获得产品和技术
  • 下载 DB2 Express-C,这是一款用于应用程序开发和部署的免费数据服务器。

  • 用可直接从 developerWorks 下载的 IBM 试用软件 构建您的下一个开发项目。


讨论


作者简介

Pat Moffatt 是 IBM Academic Initiative 的信息管理程序经理。通过 Academic Initiative 计划,她确保能通过提供适当的 Information Management 资源,帮助教员将 Information Management 软件整合到他们的课程当中。


Bruce Creighton 是 Information Management Education Planning and Development 部门的一名技能划分规划师(Skills Segment Planner)。在这个职位上,他规划在教育内容中的投资,并在 IBM 可以获得回报的领域与出于技能发展的考虑而提供免费教育的领域之间取得平衡。


Jessica Cao 是 McMaster 大学文理和计算机科学专业的学生。她期望在 2009 年 4 月完成她的双学位学业。Jessica 目前在 IBM 多伦多实验室的 DB2 Information Management Skills Channel Planning and Enablement Program 工作,发挥她在编程、编辑和写作方面的兴趣。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

将您的建议发给我们或者通过参加讨论与其他人分享您的想法.







回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款