Tải bản đầy đủ (.pdf) (15 trang)

bai tap lon mon quan ly ban hang dien tu sql server

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (162.2 KB, 15 trang )

1

MỤC LỤC:
BẢNG PHÂN CÔNG:...........................................................................................................2
1.

Phân tích bài toán.........................................................................................................3
1.1.

Xác định kiểu thực thể........................................................................................3

1.2.

Xác định liên kết và kiểu kiên kết.....................................................................3

1.3.

Mô hình quan hệ...................................................................................................3

-

Quy tắc 3: chuyển các liên kết 1-n........................................................................3

- Mô hình quan hệ...........................................................................................................4
2.

Thực hành trong SQL server.......................................................................................4
PHẦN 1 : TẠO VIEW CHO BẢNG */..................................................................8
PHẦN 2 : TẠO PROCEDURE CHO CÁC BẢNG */...............................................10
PHẦN 3 : TẠO TRIGGER */....................................................................................12
PHẦN 4 : PHÂN QUYỀN VÀ BẢO MẬT CHO CSDL */......................................13



3.

TOÀN BỘ CODE CỦA BÀI.....................................................................................14


2

BẢNG PHÂN CÔNG

Sinh viên
Trần Thanh Hải
Đình Văn Hiếu

Phân công
Tạo bản, Nhập dữ liệu
Phần 4
Phần 3

Vũ Thế Hiếu

Phần 1

Phạm Văn Hoàng

Phần 2


3


1.

Phân tích bài toán

1.1. Xác định kiểu thực thể

-

Chủ cửa hàng không phải là kiểu thực thể vì đây là kiểu thực thể duy nhất.
Nhân viên của hàng chỉ thuộc một bộ phận và một bộ phận có nhiều nhân viên.
Mỗi sản phẩm thuộc 1 loại sản phẩm và một loại sản phẩm có thể có nhiều sản
phẩm.
Mỗi hóa đơn do 1 nhân viên lập, một nhân viên có thể lập nhiểu hóa đơn.
Mỗi hóa đơn được lập cho 1 khách hàng, một khách hàng có thể có nhi ều hóa
đơn.
Chi tiết hóa đơn có thông tin của sản phẩm trong hóa đơn.
Nhanvien ( Manv, hoten, ngaysinh, GT, diachi)
Khachhang (makh, tenkh, diachi, dienthoai, email)
Sanpham ( masp, tensp, donvi, dongia)
Hoadon (mahd, ngaylap)
CT_hoadon(mahd, soluong, giamgia)
Phongban (maPB, tenPB)

1.2. Xác định liên kết và kiểu kiên kết

Nhanvien
nhanvien
sanpham
khachhang có
CT_hoadon


thuộc phongban : n -1
lập
hoadon
:1–n
thuộc loaisanpham : n – 1
hoadon
:1–n
có info sản phẩm
:1–n

1.3. Mô hình quan hệ

-

-

Quy tắc 1: chuyển liên thực thể mạnh
(1) Nhanvien ( Manv, hoten, ngaysinh, GT, diachi)
(2) Khachhang (makh, tenkh, diachi, dienthoai, email)
(3) Sanpham (masp, tensp, donvi, dongia,MLSP)
(4) loaisp
(maloaisp, tenloaisp)
(5) Hoadon
(mahd, ngaylap)
(6) CT_hoadon
(mahd, soluong, giamgia)
(7) Phongban (maPB, tenPB,sonv)

Quy tắc 3: chuyển các liên kết 1-n

(1.1) Nhanvien( Manv, hoten, ngaysinh, GT, diachi)
(4.1) loaisp
(maloaisp, tenloaisp, masp)
(5.1) Hoadon (mahd, ngaylap)


4

(5.2) Hoadon (mahd, ngaylap)
(6.1) CT_hoadon
(mahd, masp, soluong, giamgia)
=>
(1.1) Nhanvien( Manv, hoten, ngaysinh, GT, diachi)
(2) Khachhang (makh, tenkh, diachi, dienthoai, email)
(3) Sanpham (masp, tensp, donvi, dongia,MLSP)
(4.1) loaisp
(maloaisp, tenloaisp, masp)
(5.2) Hoadon (mahd, ngaylap, manv, makh)
(6.1) CT_hoadon
(mahd,masp, soluong, giamgia)
(7) Phongban (maPB, tenPB,sonv)
- Mô hình quan hệ

2. Thực hành trong SQL server
--Tạo cơ sở dữ liệu-CREATE DATABASE BanHangDienTu;
use
BanHangDienTu;
--Tạo bảng-Create table phongban
(
mapb

varchar(9) primary key,
tenpb
nvarchar(20),
soluongnv
int
)


5

Create table loaisp
(
maloaisp varchar(9) primary key,
tenloaisp nvarchar(20)
)
Create table khachhang
(
makh
varchar(9) not null primary key,
tenkh
nvarchar(30),
diachi_kh
nvarchar(30),
sdt
varchar(12),
email
varchar(30)
);
Create table nhanvien
(

manv
varchar(9) not null primary key,
tennv
nvarchar(30),
ngaysinh smalldatetime,
gioitinh nvarchar(3) check (gioitinh in('Nam',N'Nữ')),
diachi
nvarchar(30),
mapb
varchar(9) references phongban(mapb)
);
Create table sanpham
(
masp
varchar(9) primary key,
tensp
nvarchar(20),
donvi
nvarchar(20),
dongia
float,
maloaisp varchar(9) references loaisp(maloaisp)
);
Create table hoadon
(
mahd
varchar(9) not null primary key,
ngaylap
smalldatetime,
manv

varchar(9) references nhanvien(manv),
makh
varchar(9) references khachhang(makh),
giamgia
float
);
Create table CT_hoadon
(
mahd
varchar(9) not null references hoadon(mahd),
masp
varchar(9) not null references sanpham(masp),
soluong
int,
primary key(mahd,masp)
);
--Thêm trường soluongnv vào bảng phongban-Alter table phongban
Add soluongnv int
--Sửa tennv có 30 ký tự-Alter table nhanvien
Alter column tennv nvarchar(30)


6

--Đặt mặc định cho số trường nhân viên là 0-Alter table phongban
Add constraint df_soluongnv default 0 for soluongnv
--Đặt mặc định cho trường giảm giá là 0-Alter table hoadon
Add constraint df_giamgia default 0 for giamgia
--Thêm dữ liệu cho bảng phongban-Insert into phongban
Values ('PB01',N'Kế Toán','')

Insert into phongban
Values ('PB02',N'Kinh Doanh','')
Insert into phongban
Values ('PB03',N'Bán Hàng','')
--Xóa trường mapb-Delete from phongban
Where mapb='PB01'
--Chèn dữ liệu vào bảng khachhang-Insert into khachhang
Values ('KH01',N'Trần Diệu Linh',N'Hà Nội','086433545','')
Insert into khachhang
Values ('KH02',N'Nguyễn Quốc Đạt',N'Thái Nguyên','086433567','')
Insert into khachhang
Values ('KH03',N'Nguyễn Mai Anh',N'Hà Nội','0864445545','')
Insert into khachhang
Values ('KH04',N'Vũ Mạnh Toàn',N'Hà Nội','0864335456','')
Insert into khachhang
Values ('KH05',N'Dương Lam An',N'Hải Phòng','086433455','')
--Chèn dữ liệu vào bảng nhanvien-Insert into nhanvien
Values('NV01',N'Nguyễn Anh Tuấn','02/7/1996',N'Nam',N'Hà Nội','PB01')
Insert into nhanvien
Values('NV02',N'Nguyễn Minh Anh','02/12/1993',N'Nữ',N'Hải Phòng','PB01')
Insert into nhanvien
Values('NV03',N'Vũ Mạnh Tiền','12/24/1998',N'Nam',N'Hà Nội','PB02')
Insert into nhanvien
Values('NV04',N'Trần Ngọc Huyền','11/28/1997',N'Nữ',N'Thái Nguyên','PB03')


7

--Chèn dữ liệu vào bảng maloaisp-Insert into loaisp
Values('MLSP01','SmartPhone')

Insert into loaisp
Values('MLSP02','TV')
--Xóa nhanvien-Delete from nhanvien
Where manv='NV02'
--Chèn dữ liệu vào bảng sanpham-Insert into sanpham
Values('SP01','Samsung galaxy S1',N'Cái','2100000','MLSP01')
Insert into sanpham
Values('SP02','Samsung galaxy S2',N'Cái','800000','MLSP01')
Insert into sanpham
Values('SP03','LG 113',N'Cái','4500000','MLSP02')
--Chèn dữ liệu vào bảng hoadon-Insert into hoadon
Values('HD01','12/10/1996','NV01','KH01','')
Insert into hoadon
Values ('HD02','3/6/2016','NV02','KH02','')
Insert into hoadon
Values ('HD03','3/11/2016','NV03','KH03','')
Insert into hoadon
Values ('HD04','3/26/2016','NV04','KH04','')
--Xóa mahd-Delete from hoadon
Where mahd='HD04'
--Chèn dữ liệu vào bảng CT_hoadon-Insert into CT_hoadon
Values('HD01','SP01','2')
Insert into CT_hoadon
Values('HD04','SP02','2')
Insert into CT_hoadon
Values('HD03','SP03','22')
--Xóa mahd trong CT_hoadon-Delete from CT_hoadon
Where mahd='HD04'
--TEST-Select * from phongban
Select * from loaisp

Select * from khachhang
Select * from nhanvien
Select * from sanpham


8

Select * from hoadon
Select * from CT_hoadon

/*

PHẦN 1 : TẠO VIEW CHO BẢNG */

--**Tạo view tính tuổi của nhân viên**-Create view tuoinv(manv,tennv,tuoi)
As
Select manv,tennv,year(getdate())-year(ngaysinh) as tuoi
From nhanvien
--Test tuoinv-Select * From tuoinv

--**Tạo view tính tổng tiền**-create view tt (masp,tensp,mahd,tongtien)
As
Select
sanpham.masp,sanpham.tensp,CT_hoadon.mahd,sum(dongia*soluong)
From
sanpham,CT_hoadon
Where
sanpham.masp=CT_hoadon.masp
Group by
sanpham.masp,sanpham.tensp,CT_hoadon.mahd

--Truy xuất view tongtien-Select * from tt


9

--**Tạo view lấy ra nhanvien co diachi ở "Ha Noi"**-Create view diachihanoi(manv,tennv,diachi)
As
Select manv,tennv,diachi
From
nhanvien
Where
diachi like N'Hà%'
--Truy xuất-Select * From diachihanoi

--**View lấy ra khachhang có email**-Create view emailkhachhang(makh,tenkh,email)
As
Select makh,tenkh,email
From
khachhang
Where
email like '%@%'
--Truy Xuất-Select * From emailkhachhang

--**Tạo view thực hiện danh sách nhanvien nữ sinh tháng 3**-Create view nhanviennu
As
Select manv,tennv,ngaysinh
From
nhanvien
Where gioitinh=N'Nữ' and month(ngaysinh)=3
--Truy xuất-select *

From nhanviennu


10

--**Tạo view tính tổng số nhân viên nam của cửa hàng**-Create view nhanviennam
As
Select count(manv) as SoNVnam
From nhanvien
Where gioitinh='Nam'
--Truy xuất-Select *
From nhanviennam


11

/* PHẦN 2 : TẠO PROCEDURE CHO CÁC BẢNG */
--**Tạo proc tính nhân viên tuổi cao nhất**-Create proc tuoicaonhat
As
Begin
Declare
@maxtuoi int
Select @maxtuoi=max(tuoi)
From
tuoinv
Select manv,tennv,tuoi
From
tuoinv
Where tuoi=@maxtuoi
End

--Truy xuất-Tuoicaonhat

--**Tạo proc cho biết tên nhân viên bán được nhiều tiền hàng nh ất**-Create view tienhang(manv,tennv,tongtien)
As
Select nhanvien.manv,nhanvien.tennv,sum(soluong*dongia)
From
nhanvien,hoadon,CT_hoadon,sanpham
Where
nhanvien.manv=hoadon.manv and hoadon.mahd=CT_hoadon.mahd and CT_hoadon.masp=sanpham.masp
Group by
nhanvien.manv,nhanvien.tennv
Create proc nhanvienbannhieutien
As
Begin
Declare
@tongtien float
Select
@tongtien=max(tongtien)
From
tienhang
Select
manv,tennv,tongtien
From
tienhang
Where
tongtien=@tongtien
End
--Truy xuất-nhanvienbannhieutien



12

--**Tạo proc cho biết khách hàng mua nhiềuu tiền nh ất**-Create view khachhangmuanhieutien(makh,tenkh,tongtien)
As
Select
khachhang.makh,khachhang.tenkh,sum(soluong*dongia)
From
khachhang,hoadon,CT_hoadon,sanpham
Where
khachhang.makh=hoadon.makh and hoadon.mahd=CT_hoadon.mahd and CT_hoadon.masp=sanpham.masp
Group by
khachhang.makh,khachhang.tenkh
Create proc khachhangmua
As
Begin
Declare
@tongtien float
Select @tongtien=max(tongtien)
From
khachhangmuanhieutien
Select makh,tenkh,tongtien
From
khachhangmuanhieutien
Where tongtien=@tongtien
End
--Truy xuất-khachhangmua

--**Tạo proc cho pháp hiển thị danh sách nhân viên trong phòng ban nào đó**-Create proc dsnhanvien(@MaPB varchar(9))
As
Begin

Select *
From
nhanvien
Where mapb=@mapb
End
--Truy xuất-dsnhanvien @mapb='PB01'


13

--**Tạo proc nhập masp thì hiện ra loại sản phẩm**-Create proc dsloaisanpham(@tensp nvarchar(20))
As
Begin
Select tensp,loaisp.maloaisp,tenloaisp
From loaisp,sanpham
Where sanpham.maloaisp=loaisp.maloaisp and @tensp=tensp
End
Drop proc dsloaisanpham
--Truy xuất-dsloaisanpham @tensp=N'Điện Thoại'


14

/* PHẦN 3 : TẠO TRIGGER */
--**Tạo trigger khi nhập số lượng nhanvien thì sẽ tăng soluongnv trong b ảng phongban**-Create trigger nhapnhanvien
On nhanvien
For insert,delete
As
Begin
Declare

@MaPB1 varchar(9)
Select
@MaPB1=mapb
From
inserted
If
(exists(Select * From phongban Where mapb=@MaPB1))
Update
phongban
Set
soluongnv=soluongnv+1
Where
mapb=@MaPB1
Else
Print
'Khong ton tai ma phong ban!!!!!'
Declare
Select
From
Update
Set
Where

@MaPB2 varchar(9)
@MaPB2=mapb
deleted
phongban
soluongnv=soluongnv-1
mapb=@MaPB2


End
--**Tạo trigger nếu tổng tiền lớn hơnn 1.000.000 thì giảm 10 % còn lại giảm 0%**---trigger-Create trigger tinhgiamgia
On
For insert
As
Begin
Declare
Select
From
Declare
(

CT_hoadon

@MaHD varchar(9)
@MaHD=mahd
inserted
@TongTien float=

Select
From
Where

tongtien
tt
mahd=@MaHD

)
If
Update

Set
Where
Else
Update
Set
Where
End

(@TongTien>=1000000)
hoadon
giamgia=((@TongTien*10)/100)
mahd=@MaHD
hoadon
giamgia=0
mahd=@MaHD


15

/* PHẦN 4 : PHÂN QUYỀN VÀ BẢO MẬT CHO CSDL */
--Tạo Login-Create login login1 With password = '123456'
Go
--Xóa login-Drop login login1
--Thêm cột user_name cho bảng nhanvien-Alter table nhanvien
Add username varchar(9)
--Tạo user-Create user haitran
For login login1
With DEFAULT_SCHEMA = BanHangDienTu
--Gán quyền "ALTER" bảng phongban cho user-Grant alter
On phongban

To haitran
With Grant Option
--Hủy quyền user-Revoke alter
On
phongban
From
haitran
Revoke all
On
From
haitran

phongban

--Test-Use BanHangDienTu
Insert into nhanvien
Values('NV10',N'Nguyễn Anh ','02/7/1996',N'Nam',N'Hà Nội','PB01')
Alter table phongban
add test int
Alter table phongban
Drop column test

End



×