Mã thông tin đơn hàng Id, mã đơn hàng OrderID, mã sản phẩm SanPhamID, số lượng khách hàng mua SoLuong... R12: Giá sản phẩm trong tbl_Orders phải lớn hơn 0R13: đơn hàng phải phải có sản p
Trang 1Lập trình cơ sở dữ liệu
Trần Minh Châu - 1531101013 Ngô Hoàng Cường - 1531101014
Trang 2Chương 5: Tạo Stored Procedure
Chương 6: Tạo View
Chương 7: Tạo trigger
Trang 3CHƯƠNG 1 GIỚI THIỆU SƠ LƯỢC VỀ CƠ SỞ DỮ LIỆU
Cửa hàng A là một cửa hàng mới mở Để nâng cao chất lượng phục vụ, cửa hang này muốn xây dựng một trang web online của cửa hàng để giúp khách hàng dễ dàng cập nhật các sản phẩm mà shop có, cũng như là đặt hàng online.
Ngoài 9 bảng trên, CSDL của chúng ta còn có 5 stored procedure, 5 views và 5
triggers Tất cả sẽ được trình bày chi tiết trong các chương sau
Trang 4Bảng tbl_Categories:
Tân từ: Mỗi trang web đều phân loại những sản phẩm, thông tin theo nhiều lĩnh vực
và đây là nơi phân chia chúng Mã thể loại (Id), tên của thể loại (Ten)
Bảng tbl_Suppliers:
Trang 5Tân từ: Đây là nơi để ghi nguồn gốc xuất xứ của các loại sản phẩm hay còn gọi là nhà sản xuất Mã nhà sản xuất (Id), tên nhà sản xuất (Ten), email của nhà sản xuất (Mail) và số điện thoại (Sdt).
Bảng tbl_Products:
Tân từ: Quản lý danh sách sản phẩm Mã SP (Id), tên SP (Ten), Mô tả SP (TomTat), giá cả (Gia), ngày nhập hàng (NgayNhap), mã nhà sản xuất (NSX), mã phân loại (CategoriesID), số lượng (SoLuong), giảm giá (GiamGia)
Trang 6Bảng tbl_Orders:
Tân từ: đưa ra các thông về nơi giao hàng và thời gian tối đa để giao Mã đơn hàng (Id), mã khách hàng(KhachID), ngày đặt hàng (OrderDate), ngày tối đa để nhận hàng (RequireDate), người nhận (NguoiNhan), địa chỉ (DiaChi), ghi chú (TomTat), giá tiền của đơn hàng (Tien), trạng thái đã giao chưa (Stat)
Bảng tbl_OrderDetails:
Tân từ: thông tin về mặt hàng đc giao Mã thông tin đơn hàng (Id), mã đơn hàng (OrderID), mã sản phẩm (SanPhamID), số lượng khách hàng mua (SoLuong)
Trang 7Bảng tbl_Masters:
Tân từ: khá giống với bảng khách hàng đây là bảng dành cho những người quản lý web Tài khoản đăng nhập (TaiKhoan), mật khẩu đăng nhập (MatKhau), tên của chủ tài khoản (Ten), số điện thoại (Sdt), ngày sinh (NgaySinh)
Trang 8Mô hình quan hệ giữa các bảng trong cơ sở dữ liệu QuanLyTrangWebBanHang:
Trang 10CHƯƠNG 3
MÔ TẢ CÁC RÀNG BUỘC TOÀN VẸN
Ràng buộc liên bộ (ràng buộc về khóa chính):
R1 : TaiKhoan là khóa chính của bảng tbl_Customer
+ -(*)
R2 : Id là khóa chính của bảng tbl_Categories
Bối cảnh: tbl_Categories
Điều kiện: k1,k2tbl_Categories:k1k2 k1[Id]k2[Id]Tầm ảnh hưởng:
Trang 11R3 Thêm Xóa Sửatbl_Suppliers +
Trang 12121:stbl_Master
+ -(*)
R8: TaiKhoan là khóa chính của bảng tbl_MastersRole Bối cảnh: tbl_MastersĐiều kiện:
]TaiKhoan[
2]TaiKhoan[
121:sRoletbl_Master
+ -(*)
Trang 13R9: roleslà khóa chính của bảng tbl_ActionRoles
Bối cảnh: tbl_ActionRoles
Điều kiện:
]roles[2]roles[121:Rolestbl_Action
Ràng buộc về miền giá trị của thuộc tính:
R10: Trạng thái của đơn hàng phải là 1 (đã giao) hoặc 0 (chưa giao)Bối cảnh: tbl_Orders
Điều kiện: ntbl_Orders:n.Stat 1, }
Trang 14R12: Giá sản phẩm trong tbl_Orders phải lớn hơn 0
R13: đơn hàng phải phải có sản phẩm
Bối cảnh: tbl_Products, tbl_OrderDetails
Điều kiện: tbl_OrderDetails[SanPhamID]tbl_Products[Id]
- +[
SanPhamID]tbl_Products - + -(*)
R14:
Bối cảnh: tbl_Customer, tbl_Orders
Điều kiện: tbl_Orders[KhachID]tbl_Customer[TaiKhoan]
Tầm ảnh hưởng:
R14 Thêm Xóa Sửatbl_Orders + [KhachID] - +[ KhachID]
Trang 15tbl_Customer - + -(*)
R:15
Bối cảnh: tbl_Categories, tbl_Products
Điều kiện: tbl_Products[NSX]tbl_Categories[Id]
Tầm ảnh hưởng:
tbl_Products + [NSX] - +[ NSX]tbl_Categories - + -(*)
Trang 16CHƯƠNG 4 CÁC CÂU LỆNH TẠO CƠ SỞ DỮ LIỆU
Đầu tiên, ta dùng lệnh sau để tạo CSDL QuanLyTrangWebBanHang:
CREATE DATABASE QuanLyTrangWebBanHang
Sau khi đã có cơ sở dữ liệu, ta tiếp tục viết các lệnh sau để tạo 9 bảng của CSDL này:
tao bang tbl_Customer
create table tbl_Customer
(
TaiKhoan nvarchar(30) not null,
MatKhau varchar(12) not null,
Ten nvarchar(30) not null,
Sdt varchar(14) not null,
NgaySinh datetime not null,
primary key (TaiKhoan)
)
tao bang tbl_Categories
create table tbl_Categories
(
Id int IDENTITY(1,1) not null,
Ten nvarchar(30) not null,
primary key (Id)
)
tao bang tbl_Suppliers
create table tbl_Suppliers
(
Id nvarchar(50) not null,
Ten nvarchar(30) not null,
Mail nvarchar(30) not null,
Sdt varchar(14) not null,
Trang 17primary key (Id)
)
tao bang tbl_Products
create table tbl_Products
(
Id int IDENTITY(100000,1) not null,
Ten nvarchar(30) not null,
TomTat nvarchar(50) null,
Gia int not null,
NgayNhap datetime not null,
NSX nvarchar(50) not null,
CategoriesID int not null,
SoLuong int not null,
GiamGia float not null,
primary key (Id),
foreign key (CategoriesID) references tbl_Categories(Id),foreign key (NSX) references tbl_Suppliers(Id)
)
tao bang tbl_Orders
create table tbl_Orders
(
Id int IDENTITY(1000,1) not null,
KhachID nvarchar(30) not null,
OrderDate datetime not null,
RequireDate datetime null,
NguoiNhan nvarchar(30) not null,
DiaChi nvarchar(60) not null,
TomTat nvarchar(120) null,
Tien int not null,
Stat bit not null,
primary key (Id),
foreign key (KhachID) references tbl_Customer(TaiKhoan),)
tao bang tbl_OrderDetails
create table tbl_OrderDetails
(
Id int IDENTITY(100,1) not null,
OrdersID int not null,
SanPhamID int not null,
SoLuong int not null,
primary key (Id),
Trang 18foreign key (SanPhamID) references tbl_Products(Id),foreign key (OrdersID) references tbl_Orders(Id)
)
tao bang tbl_Masters
create table tbl_Masters
(
TaiKhoan nvarchar(30) not null,
MatKhau varchar(12) not null,
Ten nvarchar(30) not null,
Sdt varchar(14) not null,
NgaySinh datetime not null,
primary key (TaiKhoan)
)
tao bang tbl_ActionRoles
create table tbl_ActionRoles
(
roles char(5) not null,
name nvarchar(50) not null,
primary key (roles),
)
tao bang tbl_MastersRole
create table tbl_MastersRole
(
TaiKhoan nvarchar(30) not null,
roles char(5) not null,
primary key (TaiKhoan),
foreign key (TaiKhoan) references tbl_Masters(TaiKhoan),foreign key (roles) references tbl_ActionRoles(roles))
Trang 19Sau khi đã có cấu trúc của từng bảng, ta tiến hành chèn dữ liệu vào từng bảng:
chen du lieu vao bang tbl_Customer
insert into tbl_Customer(TaiKhoan,MatKhau,Ten,Sdt,NgaySinh)
values('clone10001@gmail.com','123456','ImCustomerA','1234567890',1992/5/23)insert into tbl_Customer(TaiKhoan,MatKhau,Ten,Sdt,NgaySinh)
values('clone10002@gmail.com','123456','ImCustomerB','1234567890',1992/5/23)insert into tbl_Customer(TaiKhoan,MatKhau,Ten,Sdt,NgaySinh)
values('clone10003@gmail.com','123456','ImCustomerC','1234567890',1992/5/23)insert into tbl_Customer(TaiKhoan,MatKhau,Ten,Sdt,NgaySinh)
values('clone10004@gmail.com','123456','ImCustomerD','1234567890',1992/5/23)insert into tbl_Customer(TaiKhoan,MatKhau,Ten,Sdt,NgaySinh)
values('clone10005@gmail.com','123456','ImCustomerE','1234567890',1992/5/23)
chen du lieu vao bang tbl_Categories
insert into tbl_Categories(Ten) values('Đồng hồ đeo tay')
insert into tbl_Categories(Ten) values('Máy tính xách tay')
insert into tbl_Categories(Ten) values('Điện thoại')
insert into tbl_Categories(Ten) values('Máy ảnh')
chen du lieu vao bang tbl_Masters
insert into tbl_Masters(TaiKhoan ,MatKhau ,Ten ,Sdt,NgaySinh) values
('administrator0001@gmail.com','AdDepTrai','WeAreAdminA','1234567890',1992/5/03)
insert into tbl_Masters(TaiKhoan ,MatKhau ,Ten ,Sdt,NgaySinh) values
('administrator0002@gmail.com','AdDepTrai','WeAreAdminB','1234567890',1991/5/13)
insert into tbl_Masters(TaiKhoan ,MatKhau ,Ten ,Sdt,NgaySinh) values
('administrator0003@gmail.com','AdDepTrai','WeAreAdminC','1234567890',1994/5/21)
insert into tbl_Masters(TaiKhoan ,MatKhau ,Ten ,Sdt,NgaySinh) values
('administrator0004@gmail.com','AdDepTrai','WeAreAdminD','1234567890',1992/2/23)
chen du lieu vao bang tbl_Suppliers
insert into tbl_Suppliers(Id,Ten ,Mail ,Sdt ) values
chen du lieu vao bang tbl_Products
insert into tbl_Products(Ten ,TomTat ,Gia ,NgayNhap ,NSX ,CategoriesID ,SoLuong ,GiamGia)values ('laptop1','Đây là laptop chắc vậy',1000,2020/1/1 ,'D',2,50,0)
Trang 20insert into tbl_Products(Ten ,TomTat ,Gia ,NgayNhap ,NSX ,CategoriesID ,SoLuong ,GiamGia)values ('laptop2','Đây là laptop real',500,2010/2/1 ,'D',2,10,0.10)
insert into tbl_Products(Ten ,TomTat ,Gia ,NgayNhap ,NSX ,CategoriesID ,SoLuong ,GiamGia)values ('Nikon XXX','Đây chắc chắn là siu phẩm máy
insert into
tbl_Orders(KhachID,OrderDate,RequireDate,NguoiNhan,DiaChi,TomTat,Tien,Stat) values ('clone10004',2020/1/1,'','ImCustomerD','adsfasf','',10000,1)
chen du lieu vao bang tbl_OrderDetails
insert into tbl_OrderDetails(OrdersID,SanPhamID,SoLuong) values (1000,100000,1)insert into tbl_OrderDetails(OrdersID,SanPhamID,SoLuong) values (1001,100002,2) chen du lieu vao bang tbl_ActionRoles
insert into tbl_ActionRoles(roles ,name )values ('ADMIN','Administrator')
insert into tbl_ActionRoles(roles ,name )values ('USER','User')
chen du lieu vao bang tbl_MastersRole
insert into tbl_MastersRole(TaiKhoan ,roles )
Trang 21CHƯƠNG 5 TẠO STORED PROCEDURE
1) Tạo thủ tục lưu trữ (SP) kiểm tra thông tin của khách hàng khi nhập tài khoản
create procedure ktCustomer
@TaiKhoan nvarchar ( 30 )
as
begin
select TaiKhoan , Ten , NgaySinh , Sdt from tbl_Customer
where @TaiKhoan = TaiKhoan
end
Ví dụ:
exec ktCustomer 'clone10004@gmail.com'
2) Kiểm tra hóa đơn cho shipper bằng cách nhập mã đơn hàng:
create procedure ktOrder
Trang 223) Kiểm tra đăng nhập khách hàng được không nếu đúng trả về 1 sai trả về 0
create procedure ktCheckLoginCus
IF EXISTS( SELECT * FROM tbl_Customer
WHERE @taikhoanCus = TaiKhoan AND
MatKhau = @matkhauCus )
RETURN 1 ELSE
RETURN 0 end
Ví dụ:
declare @intKqCus int
exec @intKqCus = ktCheckLoginCus 'clone10001@gmail.com' 123456 SELECT @intKqCus 'Ket qua Log In'
4) Kiểm tra đăng nhập của admin được không nếu đúng trả về 1 sai trả về 0
create procedure ktCheckLoginMaster
IF EXISTS( SELECT * FROM tbl_Masters
WHERE TaiKhoan = @taikhoanAdmin AND MatKhau =
@matkhauAdmin )
RETURN 1
ELSE
RETURN 0 end
Ví dụ:
declare @intKqMaster int
Trang 23exec @intKqMaster = ktCheckLoginMaster 'administrator0003@gmail.com'
, 'AdDepTrai'
SELECT @intKqMaster 'Ket qua Log In'
5) Đếm tổng sản phẩm có trong kho
create procedure ktSoLuongSP
@SoLuong int output
Trang 24CHƯƠNG 6 TẠO VIEW
1) Tạo view xem thông tin đơn hàng
create view vwDanhSachDonHang
inner join tbl_Customer on tbl_Orders KhachID = tbl_Customer TaiKhoan
inner join tbl_OrderDetails on tbl_Orders Id = tbl_OrderDetails OrdersID
inner join tbl_Products on tbl_Products Id = tbl_OrderDetails SanPhamID
2) Tạo view xem thông tin về sản phẩm
create view vwDanhSachSanPham
as
select tbl_Products Ten as
TenSP , tbl_Products TomTat , tbl_Products SoLuong , tbl_Suppliers Ten as
TenNSX , tbl_Products Gia , tbl_Products NgayNhap
from tbl_Products
inner join tbl_Suppliers on tbl_Products NSX = tbl_Suppliers Id
3) Tạo view xem thông tin về đơn hàng chưa giao
create view vwDanhSachDonHangChuaChuyen
inner join tbl_Customer on tbl_Orders KhachID = tbl_Customer TaiKhoan
inner join tbl_OrderDetails on tbl_Orders Id = tbl_OrderDetails OrdersID
inner join tbl_Products on tbl_Products Id = tbl_OrderDetails SanPhamID
where tbl_Orders Stat = 0
Trang 254) Tạo view cho biết danh sách các admin
create view vwDanhSachQuanTriVien
as
select tbl_Masters Ten , tbl_Masters NgaySinh , tbl_Masters Sdt ,
tbl_Masters TaiKhoan , tbl_ActionRoles name
from tbl_Masters
inner join tbl_MastersRole on tbl_MastersRole TaiKhoan = tbl_Masters TaiKhoan
inner join tbl_ActionRoles on tbl_MastersRole roles = tbl_ActionRoles roles
5) Cho biết về nhữn sản phẩm đang giảm giá
create view vwSanPhamGiamGia
as
select tbl_Products Ten as
TenSP , tbl_Products TomTat , tbl_Products SoLuong , tbl_Suppliers Ten as
TenNSX , tbl_Products Gia , tbl_Products GiamGia
from tbl_Products
inner join tbl_Suppliers on tbl_Products NSX = tbl_Suppliers Id
where tbl_Products GiamGia != 0
Trang 26CHƯƠNG 7 TẠO TRIGGER
1) Tạo trigger thỏa mãn điều kiện khi chỉnh sửa đơn hàng sẽ thay đổi những thông tin liên quan
CREATE TRIGGER ChinhSuaDonHang on tbl_Orders for update
set tk1 TaiKhoan = tk3 TaiKhoan
from tbl_Customer tk1 , deleted tk2 , inserted tk3
Trang 27update tk1
set tk1 KhachID = tk3 TaiKhoan
from tbl_Orders tk1 , deleted tk2 , inserted tk3
delete tbl_Products from tbl_Products t1 , deleted t2 where t1 Id = t2 Id
delete tbl_OrderDetails from tbl_OrderDetails t1 , deleted t2 where
t1 SanPhamID = t2 Id
5) Tạo trigger thỏa mãn điều kiện khi chỉnh sửa sản phẩm sẽ thay đổi những thôngtin liên quan
Trang 28CREATE TRIGGER ChinhSuaSP on tbl_Products for update as