Hệ thống Quản lý Sản phẩm – Bài thực hành
1. Tạo cơ sở dữ liệu
-
Tạo cơ sở dữ liệu với tên
ProductManagementSystem -
Sử dụng cơ sở dữ liệu vừa tạo
2. Tạo bảng
tblUser – bảng lưu thông tin người dùng
-
UserID: INT, NOT NULL
-
UserName: NVARCHAR(50)
tblOrder – bảng lưu thông tin đơn hàng
-
OrderID: INT, NOT NULL
-
UserID: INT, NOT NULL
-
OrderDate: DATETIME
tblProduct – bảng lưu thông tin sản phẩm
-
ProductID: INT, NOT NULL
-
ProductName: NVARCHAR(50)
-
Quantity: INT
-
Price: MONEY
-
Description: NTEXT
tblOrderDetail – bảng lưu thông tin chi tiết đơn hàng
-
OrderID: INT, NOT NULL
-
ProductID: INT, NOT NULL
-
Quantity: INT
-
Price: MONEY
3. Tạo Index và thay đổi bảng
-
Tạo Clustered Index:
-
CI_tblUser_UserID trên
tblUser(UserID)
-
-
Xóa clustered index vừa tạo.
-
Alter table
tblUser, thêm cột[BirthDate]với kiểu dữ liệu DATETIME.
Ràng buộc DEFAULT
-
DF_tblOrder_OrderDate → Bảng: tblOrder, Cột: OrderDate, Giá trị mặc định: GETDATE()
Khóa chính (PRIMARY KEY)
-
PK_tblUser → tblUser(UserID)
-
PK_tblOrder → tblOrder(OrderID)
-
PK_tblProduct → tblProduct(ProductID)
-
PK_tblOrderDetail → tblOrderDetail(OrderID, ProductID)
Khóa ngoại (FOREIGN KEY)
-
FK_tblOrder_tblUser → tblOrder(UserID) → tblUser(UserID)
-
FK_tblOrderDetail_tblOrder → tblOrderDetail(OrderID) → tblOrder(OrderID)
-
FK_tblOrderDetail_tblProduct → tblOrderDetail(ProductID) → tblProduct(ProductID)
Ràng buộc CHECK
-
CK_tblOrder_OrderDate → tblOrder(OrderDate), điều kiện: OrderDate nằm trong khoảng từ ‘2000-01-01’ đến ngày hiện tại
Ràng buộc UNIQUE
-
UN_tblUser_UserName → tblUser(UserName)
5. Thêm dữ liệu
tblUser:
-
stevejobs – 1996-08-28
-
billgates – 1998-06-18
-
larry – 1997-05-25
-
mark – 1984-03-27
-
dell – 1955-08-15
-
eric – 1955-07-28
tblOrder:
-
(UserID=2, 2002-12-01)
-
(UserID=3, 2000-03-02)
-
(UserID=2, 2004-08-03)
-
(UserID=1, 2001-05-12)
-
(UserID=4, 2002-10-04)
-
(UserID=6, 2002-03-08)
-
(UserID=5, 2002-05-02)
tblProduct:
-
Asus Zen – 2 – 10 – "See what others can’t see."
-
BPhone – 10 – 20 – "The first flat-design smartphone in the world."
-
iPhone – 13 – 300 – "The only thing that’s changed is everything."
-
XPéria – 7 – 80 – "The world’s first 4K smartphone."
-
Galaxy Note – 12 – 120 – "Created to reflect your desire."
tblOrderDetail:
-
(1,1,10,10)
-
(1,2,4,20)
-
(2,3,5,50)
-
(3,4,6,80)
-
(4,2,21,120)
-
(5,2,122,300)
6. Các thao tác Query
-
Cập nhật [Price] trong bảng [tblProduct] giảm 10%, với điều kiện [ProductID] = 3.
-
Hiển thị dữ liệu từ 4 bảng tblUser, tblOrder, tblOrderDetail, tblProduct gồm:
(UserName, OrderID, OrderDate, Quantity, Price, ProductName)
7. View
-
Tạo view tên
[view_Top2Product]để hiển thị 2 sản phẩm bán chạy nhất.
8. Thủ tục (Procedure)
Tạo thủ tục tên [sp_TimSanPham] với tham số:
-
@GiaMua MONEY (giá tối đa để lọc sản phẩm)
-
@count INT OUTPUT (tổng số bản ghi tìm thấy)
Thực thi [sp_TimSanPham] với @GiaMua = 50.
9. Trigger
Tạo trigger cho sự kiện UPDATE tên [TG_tblProduct_Update] để kiểm tra giá trị cột [Price] trong bảng tblProduct.
-
Nếu Price < 10 → rollback và in ra thông báo: “You don’t update price less than 10”.
Xóa trigger này.
10. Trigger
Tạo trigger cho sự kiện UPDATE tên [TG_tblUser_Update] để kiểm tra giá trị cột [UserName] trong bảng tblUser.
-
Nếu cột UserName bị cập nhật → rollback và in ra thông báo: “You don’t update the column UserName”.