Hướng dẫn SQL & XQuery cho IBM DB2, Jessica Cao, Chuyên viên phát triển các công cụ đào tạo, IBM Tóm tắt: Phụ lục A mô tả tất cả các bảng trong cơ sở dữ liệu Aroma, bao gồm hai lược đồ:
Trang 1Hướng dẫn SQL & XQuery cho IBM DB2,
Jessica Cao, Chuyên viên phát triển các công cụ đào tạo, IBM
Tóm tắt: Phụ lục A mô tả tất cả các bảng trong cơ sở dữ liệu Aroma, bao gồm hai
lược đồ: một lược đồ hình sao đơn giản cho các thông tin bán lẻ và một lược đồ nhiều hình sao (multistar) cho các thông tin mua hàng Phụ lục này nằm trong loạt bài hướng dẫn về SQL & XQuery cho IBM DB2
V ề phụ lục này
Phụ lục A mô tả tất cả các bảng trong cơ sở dữ liệu Aroma, bao gồm hai lược đồ: một lược đồ hình sao đơn giản cho các thông tin bán lẻ và một lược đồ nhiều hình sao (multistar) cho các thông tin mua hàng
Hầu hết các thí dụ trong bài viết này sử dụng các bảng trong lược đồ bán lẻ Các bảng mua hàng được sử dụng trong một vài ví dụ yêu cầu một lược đồ linh hoạt hơn để minh hoạ phù hợp
Kết nối tới cơ sở dữ liệu
Bạn cần phải kết nối đến một cơ sở dữ liệu trước khi bạn có thể sử dụng câu lệnh SQL để truy vấn hoặc thao tác với các dữ liệu Câu lệnh CONNECT kết hợp một kết nối cơ sở dữ liệu với một tên người sử dụng
Bạn hãy hỏi giảng viên hướng dẫn của bạn về tên cơ sở dữ liệu mà bạn cần phải kết nối tới Đối với loạt bài hướng dẫn này, tên cơ sở dữ liệu là aromadb
Trang 2Để kết nối vào cơ sở dữ liệu aromadb, hãy gõ nhập lệnh sau đây tại trình xử lý dòng lệnh DB2:
CONNECT TO aromadb USER userid USING password
Thay thế userid và password bằng mã nhận dạng ID người sử dụng và mật khẩu
mà bạn nhận được từ giảng viên hướng dẫn Nếu không yêu cầu phải có ID người
sử dụng và mật khẩu, thì bạn chỉ cần sử dụng câu lệnh sau:
CONNECT TO aromadb
Thông điệp sau cho biết bạn đã thực hiện thành công kết nối:
Database Connection Information
Database server = DB2/NT 9.0.0
SQL authorization ID = USERID
Local database alias = AROMADB
Một khi bạn đã được kết nối, bạn có thể bắt đầu sử dụng cơ sở dữ liệu
Cơ sở dữ liệu Aroma: lược đồ bán lẻ
Hầu hết các ví dụ trong tài liệu hướng dẫn này được dựa trên dữ liệu của cơ sở dữ liệu Aroma cơ bản, cơ sở dữ liệu này theo dõi việc bán lẻ hàng hàng ngày tại các
Trang 3cửa hàng của công ty Aroma Coffee and Tea Hình 1 minh hoạ lược đồ cơ bản này
Hình 1 Lược đồ cơ bản
Các hình chân chim trong lược đồ này biểu thị mối quan hệ một - nhiều giữa hai bảng Ví dụ, mỗi giá trị phân biệt trong cột Perkey của bảng Period có thể chỉ xảy
ra một lần trong bảng đó, nhưng xảy ra nhiều lần trong bảng Sales
Lược đồ Aroma cơ bản
Các bảng sau đây tạo thành cơ sở dữ liệu Aroma cơ bản:
Period Định nghĩa các khoảng thời gian như ngày, tháng, và năm
Class Định nghĩa lớp các sản phẩm bán tại cửa hàng bán lẻ
Product Định nghĩa các sản phẩm riêng biệt bán tại cửa hàng bán lẻ, bao gồm cà
phê và trà dạng đóng gói và dạng để rời, máy pha cà phê
Trang 4Market Định nghĩa thị trường của doanh nghiệp theo vùng địa lý
Store Định nghĩa các cửa hàng bán lẻ riêng biệt thuộc sở hữu và vận hành bởi
công ty Aroma Coffee and Tea
Promotion Định nghĩa các loại hình, khoảng thời gian và trị giá của các chương
trình khuyến mãi trên các sản phẩm khác nhau
Sales Chứa số doanh thu bán hàng cho các sản phẩm của Aroma trong các
khoảng thời gian tại các cửa hàng khác nhau
Gold Chứa danh sách khách hàng đã mua các loại thẻ khuyến mãi
Các bảng Period (thời kỳ), Class (lớp sản phẩm), Product (sản phẩm), Market (thị trường), Store (cửa hàng bán lẻ), Promotion (khuyến mãi) và Gold (khách hàng vàng) là những ví dụ về những bảng chiều (dimensions) của hoạt động kinh doanh tiêu biểu Chúng nhỏ và chứa các dữ liệu mô tả quen thuộc với người sử dụng
Bảng Sales là một ví dụ tốt về một bảng sự kiện Nó chứa hàng ngàn hàng, và các thông tin bổ xung thêm rộng rãi của nó được truy cập trong các truy vấn bằng các phép nối tới các bảng chiều mà nó tham chiếu
Trang 53 Bulk_spice Các gia vị rời
4 Pkg_coffee Các sản phẩm cà phê đóng gói riêng biệt
5 Pkg_tea Các sản phẩm chè đóng gói riêng biệt
6 Pkg_spice Các sản phẩm gia vị đóng gói riêng biệt
7 Hardware Chén cà phê, chén chè, lọ gia vị, máy pha
cà phê espresso
8 Gifts Các mẫu thêu, hộp quà tặng, giỏ quà
12 Clothing Áo T-shirts và mũ vải
Truy vấn
SELECT * FROM aroma.product;
Trang 7Tên cột Nội dung
classkey Kiểu số nguyên (integer), là mã định danh một hàng trong bảng Class
Classkey là khóa chính
class_type Chuỗi ký tự là mã định danh một nhóm sản phẩm
class_desc Chuỗi ký tự mô tả một nhóm sản phẩm
Mô tả cột: Bảng Product
Tên cột Nội dung
classkey Tham chiếu khóa ngoài tới bảng Class
prodkey
Kiểu số nguyên (integer), kết hợp với một giá trị của Classkey làm mã định danh một hàng trong bảng Product Classkey/prodkey là khóa chính gồm hai cột
prod_name Chuỗi ký tự là mã định danh một sản phẩm Cơ sở dữ liệu chứa 59 sản
phẩm Một cơ sở dữ liệu điền đầy đủ dữ liệu sẽ có nhiều sản phẩm hơn
Trang 8nữa Mặc dù một số sản phẩm của Aroma có cùng tên, chúng thuộc các lớp khác nhau và có kiểu đóng gói khác nhau
pkg_type Chuỗi ký tự là mã định danh một kiểu đóng gói cho mỗi sản phẩm
Mktkey HQ_City HQ_State District Region
Trang 9
Truy vấn
SELECT * FROM aroma.store;
Kết quả
Storekey MktkeyStore_Type Store_Name Street City State Zip
1 14 Small Roasters, Los
Gatos
1234 University Ave
Los Gatos CA 95032
San Jose Roasting Company
5678 Bascom Ave San Jose CA 95156
Coffee Supply
987 DeAnza Blvd Cupertino CA 97865
Roasting
898 Main Street
New Orleans LA 70125
98675 University Ave
Detroit MI 48209
Trang 106 9 Small The Coffee Club
9865 Lakeshore Blvd
hq_city Chuỗi ký tự là mã định danh một thành phố Bảng Market định nghĩa 17
thành phố Một cơ sở dữ liệu đầy đủ có thể có hàng ngàn thành phố
State Chuỗi ký tự là mã định danh một bang
District
Chuỗi ký tự là mã định danh một hạt được dựa trên thành phố thủ phủ Một cơ sở dữ liệu toàn cầu sẽ chứa tên các quốc gia hoặc đất nước hay khu vực địa lý khác
Region
Chuỗi ký tự là mã định danh một vùng Bảng Market chỉ định nghĩa 4 vùng trên toàn lãnh thổ Mỹ Một cơ sở dữ liệu toàn diện sẽ bao gồm nhiều vùng và có thể nhiều hạt trong một vùng
Trang 11Mô tả Cột: Bảng Store
Tên cột Nội dung
storekey Kiểu số nguyên (integer), là mã định danh một hàng trong bảng
Store Storekey là khóa chính
Mktkey Tham chiếu khóa ngoài tới bảng Market
store_type Chuỗi ký tự xác định một cửa hàng theo kích cỡ
store_name Chuỗi ký tự xác định một cửa hàng theo tên
street, city, state,
zip Các cột xác định địa chỉ của mỗi cửa hàng
Trang 12Perkey Date Day Week Month Qtr Year
Trang 14ngày 31 tháng Ba, 2000
Day Chuỗi ký tự viết tắt của các ngày trong tuần
Week Kiểu số nguyên (integer), xác định mỗi tuần của năm theo số thứ tự của
tuần (Tuần số 1 đến tuần số 53, mỗi tuần mới bắt đầu vào ngày chủ nhật)
Month Chuỗi ký tự viết tắt tên của mỗi tháng
Qtr Chuỗi ký tự xác định duy nhất mỗi quý (ví dụ, Q1_98, Q3_99)
Year Kiểu số nguyên (integer), xác định một năm
Trang 151.00
2004-08-01
2004-08-31
Trang 169 100
Aroma catalog coupon
Trang 17coupon
Aroma catalog coupon
đó hàng hóa được bán
Mô tả cột
Tên cột Nội dung
promokey Kiểu số nguyên (integer), là mã định danh một hàng trong bảng
Promotion Promokey là khóa chính
promo_type Kiểu số nguyên (integer), là mã định danh chương trình khuyến
mãi (mã số khuyến mãi)
Trang 18promo_desc Chuỗi ký tự mô tả các loại hình khuyến mãi
value
Số thập phân, biểu diễn giá trị tính bằng đô-la của chương trình khuyến mãi, ví dụ như giảm giá hoặc giá trị của một phiếu giảm giá
Trang 20Bảng Sales chứa một khoá chính gồm nhiều phần: Mỗi một cột trong năm cột của
nó là tham chiếu khóa ngoài tới một khóa chính của một bảng khác:
perkey, classkey, prodkey, storekey, promokey
Khóa chính này liên kết các dữ liệu của bảng Sales tới các bảng chiều Period, Product, Store và Promotion
Các phép nối tới bảng Sales được hiển thị trong các ví dụ trong suốt loạt bài hướng dẫn này
Mô tả cột
Tên cột Nội dung
perkey Tham chiếu khóa ngoài tới bảng Period
Trang 21classkey Tham chiếu khóa ngoài tới bảng Class
prodkey Tham chiếu khóa ngoài tới bảng Product
storekey Tham chiếu khóa ngoài tới bảng Store
promokey Tham chiếu khóa ngoài tới bảng Promotion
quantity Kiểu số nguyên (integer), biểu diễn tổng số lượng bán ra (theo ngày)
dollars Số thập phân, là số tiền bán hàng tính bằng đô la (theo ngày)
Dữ liệu mẫu của bảng Gold
Lưu ý: Các học viên sẽ không tìm thấy bảng này trong cơ sở dữ liệu Aroma sau
khi khởi tạo Nó được dự tính là do học viên tạo ra tại phần 6 Ngôn ngữ định nghĩa và kiểm soát dữ liệu của loạt bài hướng dẫn này (developerWorks, tháng Tám năm 2006)
Bảng kết quả dưới đây hiển thị bảng ta sẽ có sau mục "Câu lệnh INSERT" thuộc phần 6
Truy vấn
SELECT * FROM aroma.gold;
Trang 22Kết quả
Card_id Storekey Fname Lname Email Status
1 1 Ada Alexander coffee_lover@hotmail.comActive
2 1 Ben Bowman mmmcoffee@yahoo.com Active
3 1 Cynthia Chen iheartcoffee@gmail.com Active
4 1 David Doyle coffee_maniac@msn.com Active
5 1 Emily Enright cupAday@hotmail.com Active
6 1 Frank Freeman coffee_addict@gmail.com Active
Bảng Gold
Bảng Gold chứa các thông tin về khách hàng đã mua thẻ khuyến mãi
Mô tả cột
Tên cột Nội dung
card_id Kiểu SMALLINT, xác định khách hàng bằng một số thẻ duy nhất
storekey Tham chiếu khóa ngoài tới bảng Store
Trang 23fname Chuỗi ký tự chứa tên của khách hàng
lname Chuỗi ký tự chứa họ của khách hàng
email Chuỗi ký tự chứa địa chỉ email của khách hàng
status Chuỗi ký tự chứa các thông tin về tình trạng của khách hàng
Lược đồ mua hàng của cơ sở dữ liệu Aroma
Một số ví dụ trong loạt bài hướng dẫn này dựa trên các bảng được sử dụng để theo dõi các đơn hàng mà công ty Aroma Coffee and Tea nhận được từ các nhà cung cấp Lược đồ mua hàng này cũng sử dụng chính các bảng chiều Product, Class, và Period như lược đồ bán lẻ, nhưng nó có thêm hai bảng riêng của mình: Deal (các giao dịch) và Supplier (Nhà cung cấp) Cả hai bảng Line_Items và Orders (Các đơn hàng) chứa các sự kiện, nhưng bảng Orders cũng có thể được truy vấn như là một bảng chiều, tham chiếu bởi bảng Line_Items
Hình 2 minh hoạ các bảng trong lược đồ mua hàng
Trang 24Hình 2 Các bảng trong lược đồ mua hàng
Lược đồ nhiều hình sao
Các khóa chính của bảng Line_Items và bảng Orders không khớp với bộ khóa ngoài của các bảng chiều tương ứng Bất cứ tổ hợp đã cho nào các khóa chính của bảng chiều đều có thể trỏ đến nhiều hơn một hàng trong các bảng sự kiện này
Loại bảng này được biết đến như là bảng sự kiện nhiều hình sao hoặc là danh sách các dữ liệu
Ví dụ: Nhiều mã số đơn hàng trong bảng Order có thể tham chiếu đến cùng một bộ các đặc điểm trong các bảng Supplier, Deal và Period:
Order_No Perkey Supkey Dealkey
Các bảng mua hàng
Trang 25Lược đồ mua hàng chứa cùng loại sự kiện giống như các sự kiện được lưu giữ trong các bảng Sales, đó là các mục giá cả và số lượng Mục giá cả là giá trị tính bằng đô la số tiền đã trả cho nhà cung cấp đối với toàn bộ đơn hàng hoặc một sản phẩm cụ thể trong đơn hàng Mục số lượng là số đơn vị sản phẩm đã đặt hàng
Bạn có thể sử dụng lược đồ này để đặt các câu hỏi thú vị về lịch sử mua hàng của công ty Aroma Coffee and Tea, ví dụ, nhà cung cấp nào cho giá tốt nhất và với sản phẩm nào, hoặc nhà cung cấp nào đạt mức cao nhất khi kết toán các đơn đặt hàng
Công ty Aroma Coffee and Tea bán cùng các sản phẩm tại các cửa hàng của mình
mà nó đặt hàng thông qua các nhà cung cấp Vì thế, bạn có thể viết các truy vấn bắc qua cả hai lược đồ để so sánh những cái đã được đặt mua với những cái đã được bán hoặc để tính toán các biên độ lợi nhuận đơn giản
Các bảng sau đây tạo nên lược mua hàng của cơ sở dữ liệu Aroma:
Period Xác định các khoảng thời gian như ngày, tháng, năm
Class Xác định các lớp sản phẩm, được bán tại cửa hàng bán lẻ và được đặt
Line_Items Chứa các thông tin chi tiết trên một dòng mục hàng trong các đơn đặt
hàng, bao gồm cả giá cả và số lượng của mỗi mục hàng trên mỗi đơn
Trang 26đặt hàng
Orders Chứa thông tin về các đơn hàng mua sản phẩm, chẳng hạn như tổng giá
của từng đơn hàng và các loại sản phẩm được đặt hàng
Các bảng Supplier và Deal chỉ dành cho lược đồ mua hàng và được bảng Orders tham chiếu
Lời nhắc: Lược đồ mua hàng chỉ chứa
dữ liệu cho quý đầu tiên của năm 2000
Trang 271001 Coffee/teaCB Imports 100 Church
Street
Mountain View CA 94001
1002 Tea
Tea Makers, Inc
3 100 Supplier catalog coupon 50.00
4 100 Supplier catalog coupon 100.00
Trang 2837 200 Supplier coffee special 75.00
38 200 Supplier coffee special 50.00
Bảng Supplier và Deal
Mô tả cột: Bảng Supplier
Tên cột Nội dung
supkey Kiểu số nguyên (Integer), là mã định danh một hàng trong bảng
Supplier Supkey là khóa chính
type Chuỗi ký tự cho biết kiểu sản phẩm được cung cấp
name Chuỗi ký tự xác định các nhà cung cấp theo tên
street, city,
state, zip Các cột xác định địa chỉ của nhà cung cấp
Mô tả cột: Bảng Deal
Trang 29Tên cột Nội dung
dealkey Kiểu số nguyên (Integer), là mã định danh một hàng trong bảng Deal
Dealkey là khóa chính
deal_type Kiểu số nguyên (Integer), là mã định danh loại hình giao dịch (mã số
giao dịch)
deal_desc Chuỗi ký tự mô tả loại hình giao dịch
discount Giá trị dạng số thập phân, cho biết số tiền giảm giá tính bằng đô la áp
dụng cho một đơn đặt hàng
Các bảng chiều được chia sẻ chung
Lược đồ mua hàng chia sẻ chung các bảng Period, Product và Class với lược đồ bán lẻ
Cũng như khi bạn truy vấn lược đồ bán lẻ và lược đồ mua hàng một cách độc lập, bạn có thể đưa ra một số câu hỏi thú vị liên quan các bảng từ cả hai lược đồ Ví dụ, bạn có thể làm phép nối các bảng Sales và Line_Items để so sánh số lượng của sản phẩm đã đặt mua với số lượng của sản phẩm đã bán Một truy vấn như vậy sử dụng các bảng chiều chung để ràng buộc các sản phẩm và các thời kỳ
Dữ liệu mẫu của các bảng Orders và Line_Items
Truy vấn
Trang 30SELECT * FROM aroma.orders;
Trang 32Tên cột Nội dung
order_no Kiểu số nguyên (Integer) là mã định danh một hàng trong bảng Order
Order_No là khóa chính
Trang 33perkey Tham chiếu khóa ngoài tới bảng Period
supkey Tham chiếu khóa ngoài tới bảng Supplier
dealkey Tham chiếu khóa ngoài tới bảng Deal
order_type Chuỗi ký tự xác định loại sản phẩm theo đơn hàng
order_desc Chuỗi ký tự mô tả loại hình của đơn hàng
close_date Giá trị ngày tháng, xác định thời gian đơn hàng đã hoàn thành hoặc
chấm dứt
price Giá trị số thập phân, cho biết tổng giá của đơn hàng
Mô tả cột: Bảng Line_Items
Tên cột Nội dung
order_no Kiểu số nguyên (Integer) là mã định danh một hàng trong bảng
Orders Order_No là khóa chính
line_item Kiểu số nguyên (Integer) là mã số của mỗi mục được liệt kê trong đơn
hàng
perkey Tham chiếu khóa ngoài tới bảng Period
classkey Tham chiếu khóa ngoài tới bảng Class
Trang 34prodkey Tham chiếu khóa ngoài tới bảng Products
receive_date Giá trị ngày tháng, xác định khi nào mục sản phẩm được tiếp nhận
quantity Kiểu số nguyên (Integer), cho biết số lượng của sản phẩm được đặt
hàng cho mỗi mục sản phẩm
price Giá trị số thập phân cho biết chi phí của một dòng mục hàng