ON
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC DÂN LẬP cửu
so DO PHAN RA CHUC NANG
A . LƯỢCLONG
ĐỒ CSDL
KHOA CÔNG NGHỆ THÔNG TIN
1. Cơ sở dữ liêu :
Có nội dung sau : ___________m____________
KHACH
ĐỀ
TÀI: HANG
HANGHOA
Đồ án iava
\
CTHOADON
BAOHANH
MABH
CTBAOHANH
2 . Mỏ tá chi tiết
Sinh viên thực hiện:
Phan
Duy Khách
Cảnh Hàng:
+ Bảng
04.020.01
Trần Thanh Hóa
7
Tiêu Văn
Tiếng , DIENTHOAI
KHACH HANG (MAKH , TENKH
, DIACHI
, FAX , EMAIL)
Diễn gịai:
MAKH :Mỗi lần mua hàng Khách hàng có 1 Mã khách hàng để phân biệt với các
Khách
hàng khác và những lần mua hàng khác.
TENKH : Cho biết Họ và Tên cụ thể của Khách hàng mua hàng.
2007
DIACHI: Cho biết Địa chỉ của
Khách hàng.
2I
+ Bảng Hàng hóa:
HANGHOA (MAH , TENH , GIA , SOLUONG , BAOHANH , HANGSX , KHUYENMAT)
Diễn giải:
MAH : Mỗi Hàng hoá có một Mã hàng hoá để phận biệt với các Hàng hóa khác.
TENH : Cho biết Tên Hàng Hoá. Tên hàng phải là duy nhất.
GIA : Cho biết Giá bán của Hàng hóa. Giá trị của GIA phải > = 0
SOLUONG : Cho biết sô" lượng hàng có (sô" lượng tồn ) để bán không. Giá trị của
SOLUONG phải >= 0.
BAOHANH : Cho biết hạng bảo hành của hàng. Giá trị của BAOHANH thuộc
('3THG76THG' ,'9THG71 NAM','2NAM','3NAM').
HANGSX : Cho biết hãng sản xuâ"t tương ứng của mặt hàng này.
KHUYENMAI : Cho biết được khuyến mãi của hàng hóa (nếu có) , có thể bằng tiền
hay
tặng phẩm.
+ Bảng Hóa đơn:
HOADON (MAHD , MAKH)
Diễn giải:
MAHD : Mỗi hóa đơn xuâ"t cho Khách hàng điều có một Mã hóa đơn để phân biết
cho
các lần xuâ"t khác
MAKH : Cho biết mã sô" của khách hàng mua hàng, từ MAKH này ta có thể biết
được
các
thông tin khác của khách hàng này như họ tên, địa chỉ...
+ Bảng Chi tiết Hóa đơn:
CTHOADON (MAHD , MAH , NGAYLAP, SOLUONG, THANHTIEN)
Diễn giải :
3
c . RÀNG BUỘC TOÀN VẸN
Ghi chủ: MABH : Mỗi phiếu bảo hành có 1 Mã bảo hành để phân biệt với các phiếu bảo
hành RÀNG BUỘC:
1. YÊU CẦU
khác.
A: Ràng
buộc miền giá trị
B . Sơ ĐÔ QUAN HỆ
MAKH
Chobộbiết khách hàng đi bảo hành hàng đã mua (MAKH tham chiếu đến
B: Ràng
buộc: liên
RÀNG BUỘC TOÀN VẸN
QUAN HỆ
LOẠ
bảng
I
KHACHHANG
C: Ràng
buộc liên thuộc tính
KHACHHANG).
D: Ràng buộc phụ thuộc tồn+tạiBảng Chi Tiết Bảo Hành:
E:(MABH
Ràng buộc
liên. bộ
_ liên quan hệ
HANGHOA
CTBAOHANH
, MAH
NGAYNHAN,
NGAYTRA , CHIPHI, THONGTIN)
F: Ràng
Diễnbuộc
giải:liên thuộc tính _ liên quan hệ
HANGHOA
A
trị của BAOHANH phải
thuộc
MABH
: Mỗi(‘3THG76THG',
Hàng hóa có 1 sô" bảo hành (MABH). Hàng được bảo hành dựa vào
'9THG71NAM73NAM') (MAH)
KHACHHANG
A
ENTHOAI HOADON
là các sốMAHD
trong khoảng '[0-9][0-9][0-9][09] [0-9] [0-9] [0-9]' hoặc ‘[0-9] [0-9] [0-9] [0-9] [0-9] [09]
[0-9]
KHACHHANG
A
X là các sô" trong khoảng
TO-9] [0-9] [0-9] [0-9] [0-9] [0CTHOADON
9][0-9]' hoặc ‘[0-9][0-9][0-9][0-9][0-9][0-9][0-9] [0-9][0-
á
HANGHOA
HOA sao cho mã hàng của hàng hóa bằng mã
hàng
của chi tiết hóa đơn)
CTHOADON
GAYLAP hóa đơn trong bảng CTHOADON không
được
lớn hơn ngày hiện tại
CTBAOHANH
GAYTRA trên bảng CTBAOHANH phải nhỏ hơn
ngày
Hiện tại và phải lớn hơn NGAYNHAN
CTBAOHANH
A
c
CTHOADON
bằng SOLUONG trong bảng CTHOADON khi
thêm
mới một CTHOADON
654
GO
table
GO
CTBAOHANH
table
GO
BAOHANH
sysobjects
sysobje
cts
wh
ere
id = object_id(N'BAOHANH')
id = object_id(N'CTHOADON')
3 .CÀI ĐẶT RÀNG BUỘC TOÀN VẸN :
+Tạo bảng và ràng buộc khoá chính _ khóa ngoại:
if exists (select * from sysobjects where id = object_id(N'USERS') and OBJECTPROPERTY(id,
NdsUserTable')
=
1)
drop table USERS
7
TENKH varchar(20)
null ,
DIACHI
nullprimary
,
constraintvarchar(50)
PK_CTHOADON
key (MAHD,
MAH)
) DĨENTHOAT varchar(9) null ,
FAX varchar(9)
null ,
EMAIL varchar(50)
null ,
/* ============================================================
*/
constraint PK_KHACHHANG primary key (MAKH)
OBIECTPROPERTY(id,
N’IsUserTable') */
=
1)
/*
Table: BAOHANH
)drop
table
CTHOADON
/* ============================================================
GO
*/
if exists (select
* from PK_BAOHANH
sysobjects whereprimary
id = object_id(N'HOADON')
and OBJECTPROPERTY(id,
constraint
key (MABH)
/* ============================================================
)N'ĩsUserTable')
=
1)
*/
drop
table
HOADON
GO
/* Table: HANGHOA
*/
/*
if exists / (select * from sysobjects where id = object_id(N'KHACHHANG') and
/* ============================================================
OBIECTPROPERTY(id,
N’IsUserTable’)
=
1)
* /
*==============
drop
table
KHACHHANG
=====
GO
create table HANGHOA
if
exists ( (select
*
from
sysobjects
where
id
=
object_id(N'HANGHOA')
and
MAH char(4)
not null,
/* ============================================================
* /
TENH
varchar(20) null ,
/* Table: USERS
*/
constraint PK_CTBAOHANH
GĨA
int
null , primary key (MABH,
MAH)
)/*
SOLUONG int
null ,
============================================================*/
BAOHANH
varchar(lO)
null , key (USERNAMES)
constraint PK_USERS
primary
)
alter table HOADON
HANGSX varchar(30) null ,
add constraint FK_HOADON_MAKH_KHACHHANG foreign key
KHUYENMAI
varchar(50)
null
,
(MAKH)
/* ============================================================
constraint
primary key
reíerences PK_HANGHOA
KHACHHANG (MAKH)
* /(MAH)
/* Table: KHACHHANG
)
*/
alter table BAOHANH
/* ============================================================
10
89
alter table CTHOADON
add constraint FK_CTHOADON_MAHD_HOADON foreign key
(MAHD)
references HOADON (MAHD)
alter table CTHOADON
add constraint FK_CTHOADON_MAH_HANGHOA íoreign key
(MAH)
references HANGHOA (MAH)
alter table CTBAOHANH
add constraint FK_CTBAOHANH_MAH_HANGHOA íoreign key
(MAH)
/*
=============================================================
* /
-TAO RULE GIA DE KIEM TRA GIA TRONG BANG HANGHOA VA GIA TRONG BANG
CTHOADONPHAI
>
0
CREATE
RULE
GIA
AS
@GIA > 0
exec sp_bindrule 'GIA','HANGHOA.GIA'
-TAO RULE SOLUONG_CTBH DE KĨEM TRA GIA TRONG BANG CTHOADON VA
GIABAN
TRONG
BANG
CTBAOHANH
PHAI
>=
1
CREATE
RULE
SOLUONG_CTBH
AS
@SOLUONG_CTBH >= 1
exec sp_bindrule 'SOLUONG_CTBH','CTBAOHANH.SOLUONG'
11
CREATE
RULE
@ SOLUONG_CTHD >= 1
SOLUONG_CTHD
AS
exec sp_bindrule 'SOLUONG_CTHD';CTHOADON.SOLUONG'
-TAO RULE SOLUONGHANG DE KIEM TRA GIA TRONG BANG HANGHOA PHAI >= 0
CREATE
RULE
SOLUONGHANG
AS
@ SOLUONGHANG>=0
exec sp_bindrule 'SOLUONGHANG', 'HANGHOA.SOLUONG'
-TAO RULE CHIPHI DE KIEM TRA GIA TRONG BANG CTBAOHANH PHAI >= 0
CREATE
RULE
CHIPHI
AS
/* _____________________________________________________________ */
/* CHECK
-TEN HANG HOA LA DUY NHAT
ALTER TABLE HANGHOA ADD CONSTRAINT CK_TENHH UNIQUE (TENH)
—KIEM TRA BAOHANH TRONG BANG HANGHOA co PHAI LA '3THG', '6THG' , '9THG',
'ÌNAM', '2NAM', '3NAM'
ALTER TABLE HANGHOA ADD CONSTRAĨNT CK_BAOHANH CHECK(BAOHANH IN
('3THG','6THG' ,'9THG',,1NAM',,2NAM,,,3NAM'))
—DIENTHOAI LA CAC so TRONG KHOANG [0-9]
ALTER TABLE KHACHHANG ADD CONSTRAINT CK_DỈENTHOAI CHECK(DIENTHOAI
LIKE '[0-9] [0-9][0-9] [0-9][0-9] [0-9][0-9] [0-9][0-9]' OR DIENTHOAI LIKE '[0-9] [0-9]
[0-9]
[09] [0-9] [0-9] [0-9])
12
*/
/* TRIGGER
*/
/*
Tao Trigger de kiem tra THANHTIEN tren table CTHOADON phai bang SOLUONG * GIA
voi GIA la GIA cua MAH tren bang HANGHOA
- --------------------------------------- —-------------------*/
Create TRĨGGER KT_THANHTTEN on CTHOADON
for
INSERT,
UPDATE
as
BEGIN
DECLARE @MAH CHAR(4)
DECLARE
DECLARE @GTA ĨNT
@MAHDINT
SELECT @MAH = INS.MAH, @MAHD = INS.MAHD FROM INSERTED
INS,
CTHOADON
WHERE INS.MAHD = CTHOADON.MAHD AND INS.MAH =
CTHOADON.MAH
SELECT @GIA = HH.GIA FROM HANGHOA HH WHERE HH.MAH =
@MAH
UPDATE CTHOADON SET THANHTIEN = CTHOADON.SOLUONG *
@GIA
WHERE CTHOADON.MAH = @MAH AND CTHOADON.MAHD =
END
/*
13
PRINT ('NGAY LAP CTHOADON KHONG THE LON HON
HIEN HANH !’)
END
NGAY
/*
Tao Trigger de kiem tra NGAYTRA tren table CTBAOHANH khong duoc lon
lon ngay hien tai va phai lon hon NGAYNHAN
— */
Create
TRIGGER
for
as
KT_NGAYTRA on
INSERT,
CTBAOHANH
UPDATE
BEGIN
DECLARE @MBH ĨNT
DECLARE @NT DATETIME
DECLARE @NN
—NGAYTRA
DATETĨME
—NGAYNHAN
SELECT @MBH = CTBH.MABH FROM INSERTED CTBH,
CTBAOHANH
WHERE
CTBH.MABH
=
CTBAOHANH.MABH
SELECT @NT = CTBH.NGAYTRA FROM INSERTED CTBH,
CTBAOHANH
WHERE CTBH.MABH = @MBH
SELECT @NN = CTBH.NGAYNHAN
CTBAOHANH
WHERE CTBH.MABH = @MBH
FROM
INSERTED
CTBH,
ĨF (@NT > (CONVERT (DATETĨME, FLOOR (CONVERT (REAL,
/*
Tao Trigger de kiem tra SOLUONG tren table CTHOADON khong duoc lon
hon SOLUONG hien co trong table HANGHOA
----- ...---------------------- */
14
as
BEGIN
DECLARE @MHD ĨNT
—MAHD
DECLARE @MH CHAR(4)
—MAH
DECLARE @SLHD INT
-SOLUONG CUA CTHOADON
DECLARE @SLHH INT
—SOLUONG CUA HANHHOA
SELECT @MHD = CTHD.MAHD, @MH = CTHD.MAH FROM INSERTED
CTHD, CTHOADON
SELECT @MH = CTHD.MAH FROM INSERTED CTHD,
CTHOADON
WHERE
CTHD.MAH
=
CTHOADON.MAH
SELECT @SLHH = HANGHOA.SOLUONG FROM HANGHOA
IF(@SLHD> @SLHH)
BEGIN
PRINT ( SOLUONG CUA CTHOADON KHONG THE LON
HON
SOLUONG HANGHOA HIEN co !’)
ROLLBACK TRANSACTĨON
END
END
/*
as
BEGIN
—MAHD
DECLARE
DECLARE
—MAH
@MHD
@MH
—SOLUONG
CUA
ĨNT
CHAR(4)
CTHOADON
SELECT @MHD = CTHD.MAHD, @MH = CTHD.MAH FROM INSERTED
CTHD, CTHOADON
WHERE
CTHD.MAHD
15
=
CTHOADON.MAHD
WHERE CTHD.MAHD = @MHD
SELECT @MH = CTHD.MAH FROM ĨNSERTED CTHD, CTHOADON
WHERE CTHD.MAH = CTHOADON.MAH
UPDATE
HANGHOA
(HANGHOA.SOLUONG -
SET
HANGHOA.SOLUONG
=
END
/*
Tao
Trigger KT_BAOHANH de kiem tra khi them vao mot mau tin tren table
BAOHANH nhung mau tin nay chua MAHK khong co trong table KHACHHANG
—...--------------------------------------------------------—*/
Create
TRĨGGER
INSERT
KT_BAOHANH
on
BAOHANH
BEGIN
DECLARE
@numrows INT,
@numnull INT,
@errno INT,
@errmsg VARCHAR(255)
SELECT
@numrows
@@rowcount
IF
@numrows
=
RETURN
=
0
/* Khong co MAKH tuong ung tren bang "KHACHHANG" khi
them
mau
tin vao bang "BAOHANH" */
IF UPDATE(MAKH)
16
for
/* Errors handling
*/
error:
RAISERROR
@errno
/*
Tao Trigger KT_CTBAOHANH de kiem tra khi them vao mot mau tin tren table
CTBAOHANH nhung mau tin nay chua MAH khong co trong table HANGHOA
va
chua
MABH khong co trong bang BAOHANH
- - - - - - I I I -----------------------* /
Create TRIGGER KH_CTBAOHANH on CTBAOHANH
for TNSERT
BEGTN
DECLARE
@numrows INT,
@numnull INT,
@errno INT,
@errmsg VARCHAR(255)
SELECT @numrows
=
@rowcount
IF
@numrows
=
RETURN
@
0
/* Khong co MAKH tuong ung tren bang "KHACHHANG" khi
them
mau
tin vao bang "BAOHANH" */
17
IF UPDATE(MABH)
BEGIN
TF (SELECT count(*)
FROM BAOHANH 11, INSERTED t2
WHERE tl.MABH = t2.MABH) != @numrows
BEGIN
SELECT @errno = 30002,
@errmsg = 'Khong co MABFI tuong ung tren bang
"BAOHANH"'
GOTO error
END
END
/*
Tao Trigger KT_CTHOADON de kiem tra khi them vao mot mau tin tren table
CTHOADON nhung mau tin nay chua MAHD khong co trong table HOADON
va
chua
MAH
khong
co
trong
bang
HANGHOA
------------...----------------------—- ----------------------*/
Create TRIGGER KT_CTHOADON on CTHOADON
for INSERT
BEGTN
DECLARE
@numrows INT,
@numnull INT,
@errno INT,
18
BEGIN
IF (SELECT count(*)
FROM HOADON tl, TNSERTED t2
WHERE tl.MAHD = 12.MAHD) != @numrows
BEGIN
SELECT @errno = 30002,
@errmsg = 'Khong co MAHD tuong ung tren bang
"HOADON".'
GOTO error
END
END
/* Khong co MAH tuong ung tren bang "HANGHOA" khi them
mau
tin vao bang "CTHOADON" */
IF UPDATE(MAH)
BEGTN
IF (SELECT count(*)
FROM
HANGHOA
ti,
WHERE
tl.MAH
=
t2.MAH)
BEGIN
ĨNSERTED
t2
!=
@numrows
SELECT @errno = 30002,
/*
Tao Trigger KT_HOADON de kiem tra khi them vao mot mau tin tren table
HOADON nhung mau tin nay chua MAHK khong co trong table
KHACHHANG
______ .*/
19
@numrows INT,
@numnull INT,
@errno TNT,
@errmsg VARCHAR(255)
SELECT @numrows
=
@rowcount
IF
@numrows
=
RETURN
@
0
/* Khong co MAKH tuong ung tren bang "KHACHHANG" khi them
mau
tin vao bang "HOADON" */
IF UPDATE(MAKH)
BEGIN
IF (SELECT count(*)
FROM KHACHHANG tl, ĨNSERTED t2
WHERE tl.MAKH = t2.MAKH) != @numrows
BEGTN
SELECT @errno = 30002,
@errmsg = 'Khong co MAKH tuong ung tren bang
"KHACHHANG".'
GOTO error
/* CAP NHAT DU LTEU
*/
/*
=============================================================
*/
INSERT INTO HANGHOA VALUES ('H001', 'DVD TIEN DAT', 1200000, 22, '6THG', 'DIEN TU
20
INSERT INTO HANGHOA VALUES ('H003', 'CD TIEN DAT', 1000000, 2, '1NAM', 'DIEN TU
TIEN DAT', 'KHÔNG')
-TRUNG TEN
INSERT INTO HANGHOA VALUES ('H004', 'CD TIEN DAT', 1000000, 2, '6THG', 'DIEN TU
TIEN DAT', 'KHONG')
-SAIBAOHANH
INSERT INTO KHACHHANG VALUES ('KH001', 'ERIC CANTONA', '33 DAI LO PARIS',
'090356348', '090356348', '')
INSERT INTO KHACHHANG VALUES ('KH002', 'DAVIDS GINOLA', '3A DAI LO PARIS’,
'8813635', '8813635', '')
—DIENTHOAI KHONG PHAI LA so
INSERT INTO KHACHHANG VALUES ('KH004', 'FIGO', TE REAL', 'D151258', '8151258',
'')
—FAX KHONG PHAI LA so
INSERT INTO KHACHHANG VALUES ('KH005', 'FIGO', TE REAL', '8151258', 'D151258',
'')
—DĨENTHOAT KHONG PHAI LA 7 HOAC 9 so
INSERT INTO KHACHHANG VALUES ('KH006', 'ZINEDINE ZIDAN’, '3 PARIS', '81525',
INSERT INTO HOADON VALUES (1, 'KH001')
INSERT INTO HOADON VALUES (2,
'KH001')
INSERT INTO HOADON VALUES (3,
'KH001')
INSERT INTO CTHOADON VALUES (1, 'H001', '4/4/2003', 2, null)
INSERT INTO CTHOADON VALUES (2, 'H002', '4/4/2003', 3,
null)
-NGAY LAP CTHOADON LON HON NGAY HIEN
HANH
ĨNSERT ĨNTO CTHOADON VALUES (4, 'Hoo r, '8/4/2003', 2,
21
INSERT INTO CTHOADON VALUES (5, 'H001', '1/4/2003', -2, null)
—SOLUONG LON HON SOLUONG HIEN co TRONG BANG
HANHHOA
INSERT INTO BAOHANH
INSERT INTO
(2,'KHOOl')
INSERT INTO
(3,'KH00r)
INSERT INTO
(4,'KHOOl')
INSERT
VALUES (1,’KHOOl’)
BAOHANH VALUES
BAOHANH
VALUES
BAOHANH
VALUES
INTO CTBAOHANH VALUES (1,'HOOl',2,'4/4/2003','4/13/2003',100000,'THAY
CONG TAC')
MOI
ĨNSERT
TNTO
CONG TAC') CTBAOHANH VALUES (2,'H002',2,'5/4/2003','5/5/2003', 100000,THAY
ĨNSERT
MOI
TNTO
CONG TAC')
INSERT INTO CTBAOHANH VALUES (3,'H002',2,'4/4/2003','4/4/2003', 100000,THAY
CONG TAC') CTBAOHANH VALUES (6,'H002',2,'5/4/2003','6/5/2003', 100000,THAY MOĨ
INSERT INTO
CONG TAC')
—SOLUONG AM
INSERT
INTO CTBAOHANH
CONG TAC')
VALUES
(1,’H002',2,'5/4/2003','6/5/2003',-100000,THAY MOI
—SOLUONG <= 1
ĨNSERT TNTO CTBAOHANH VALUES (2,'H003',0,'5/4/2003','6/5/2003', 100000,THAY MOI
CONG TAC')
—NGAYTRA < NGAYNHAN
INSERT INTO CTBAOHANH VALUES (2,'H003',l,'6/6/2003','6/5/2003', 100000,THAY MOI
CONG TAC')
INSERT INTO USERS VALUES ('linh','sanh')
22