1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng hệ thống csdl quản lý Đơn hàng của tiệm bánh bằng oracle

15 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề XÂY DỰNG HỆ THỐNG CSDL QUẢN LÝ ĐƠN HÀNG CỦA TIỆM BÁNH BẰNG ORACLE
Tác giả Nhóm 06
Thể loại Báo Cáo
Định dạng
Số trang 15
Dung lượng 1,31 MB

Nội dung

Script tạo database và các bảng ❖ Tạo Database Alter session set "_oracle_script" = true; create user QLDONHANG identified by 123; grant create session to QLDONHANG; grant create table

Trang 1

Báo Cáo 2

Nhóm 06: XÂY DỰNG HỆ TH ỐNG CSDL QUẢN LÝ ĐƠN

4.1 Mô hình dữ ệu quan hệ li

4.1.1 Lược đồ quan hệ

4.1.2 Script tạo database và các bảng

Tạo Database

Alter session set "_oracle_script" = true;

create user QLDONHANG identified by 123;

grant create session to QLDONHANG;

grant create table to QLDONHANG;

grant create trigger to QLDONHANG;

grant create procedure to QLDONHANG;

Alter user QLDONHANG quota 10M on users ;

Tạo các bảng dữ liệu

o Bảng Bánh

CREATE TABLE BANH

(

Trang 2

MaBanh CHAR (10) NOT NULL,

TenBanh VARCHAR (50) NOT NULL,

DonGia INT NOT NULL,

MaNCC CHAR (10) NOT NULL,

PRIMARY KEY (MaBanh),

FOREIGN KEY (MaNCC) REFERENCES NHACUNGCAP(MaNCC) );

o Bảng Nhà cung cấp

CREATE TABLE NHACUNGCAP

(

MaNCC CHAR (10) NOT NULL,

TenNCC VARCHAR (30),

DiaChi VARCHAR (50) NOT NULL,

SDT VARCHAR (10) NOT NULL,

PRIMARY KEY (MaNCC)

);

o Bảng Đơn hàng

CREATE TABLE DONHANG

(

MaDH CHAR (10) NOT NULL,

NgayDatHang DATE NOT NULL,

TongGiaTri INT NOT NULL,

TrangThai VARCHAR (30) NOT NULL,

MaKH CHAR (10) NOT NULL,

MaNV CHAR (10) NOT NULL,

PRIMARY KEY (MaDH),

FOREIGN KEY (MaKH) REFERENCES KHACHHANG (MaKH), FOREIGN KEY (MaNV) REFERENCES NHANVIEN (MaNV) );

Trang 3

o Bảng Chi tiết Đơn hàng

CREATE TABLE CTDONHANG

(

MaDH CHAR (10) NOT NULL,

MaBanh CHAR (10) NOT NULL,

SoLuong INT NOT NULL,

ThanhTien INT NOT NULL,

TrangThai VARCHAR (30) NOT NULL,

PRIMARY KEY (MaDH, MaBanh),

FOREIGN KEY (MaBanh) REFERENCES BANH(MaBanh), FOREIGN KEY (MaDH) REFERENCES DONHANG(MaDH) );

o Bảng Hóa đơn

CREATE TABLE HOADON

(

MaHD CHAR (10) NOT NULL,

NgayLap DATE NOT NULL,

TrangThai VARCHAR (20) NOT NULL,

ThanhTien INT NOT NULL,

MaDH CHAR (10) NOT NULL,

PRIMARY KEY (MaHD),

FOREIGN KEY (MaDH) REFERENCES DONHANG(MaDH) );

o Bảng Phiếu giao hàng

CREATE TABLE PHGIAOHANG

(

MaPH CHAR (10) NOT NULL,

NgayGiao DATE NOT NULL,

Trang 4

DiaChi VARCHAR (50) NOT NULL,

TrangThai VARCHAR (30) NOT NULL,

TenKH VARCHAR (30) NOT NULL,

SDT VARCHAR (10) NOT NULL,

MaDH CHAR (10) NOT NULL,

PRIMARY KEY (MaPH),

FOREIGN KEY (MaDH) REFERENCES DONHANG(MaDH)

);

o Bảng Nhân viên

CREATE TABLE NHANVIEN

(

MaNV CHAR (10) NOT NULL,

TenNV VARCHAR (30) NOT NULL,

DiaChi VARCHAR (50) NOT NULL,

SDT VARCHAR (10) NOT NULL,

NgaySinh DATE NOT NULL,

PRIMARY KEY (MaNV)

);

o Bảng Bảng Khách hàng

CREATE TABLE KHACHHANG

(

MaKH CHAR (10) NOT NULL,

TenKH VARCHAR (30),

DiaChi VARCHAR (50) NOT NULL,

SDT VARCHAR (10) NOT NULL,

PRIMARY KEY (MaKH)

);

4.1.3 Script insert dữ ệu mẫu cho các bảng danh mụ li c/ phân loại

Trang 5

Thêm dữ ệu cho các bảng danh mục phân loại li

o Bảng Nhà cung cấp

INSERT INTO nhacungcap (mancc, tenncc, diachi, sdt)

VALUES ('N01', 'Cong ty Banh HN', '133 Nguyen Van Chi Binh Thach TP.HCM', '0976779813');

INSERT INTO nhacungcap (mancc, tenncc, diachi, sdt)

VALUES ('N02', 'Cong ty Kim Cuong TPHCM', '123 Nguyen Chi Phuong Quan 8 TP.HCM', '0123456789');

INSERT INTO nhacungcap (mancc, tenncc, diachi, sdt)

VALUES ('N03', 'Cong ty Paris Baguette VN', '884 Su Van Hanh Quan 10 TP.HCM', '0345759865');

INSERT INTO nhacungcap (mancc, tenncc, diachi, sdt)

VALUES ('N04', 'Cong ty Hong Phat TPHCM', '23 Le Van Luong Go Vap TP.HCM', '0365758946');

o Bảng Bánh

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

VALUES ('B01', 'Crossaint truyen thong', 33000, 'N01');

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

VALUES ('B02','crossaint vị ca phe',27000,'N02');

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

VALUES ('B03','crossaint hanh nhan',27000,'N03');

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

VALUES ('B04','crossaint dau',26000,'N04');

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

VALUES ('B05','crossaint pho mai',28000,'N03');

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

VALUES ('B06','crossaint cha bong',19000,'N02');

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

VALUES ('B07','crossaint bo toi',19000,'N01');

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

Trang 6

VALUES ('B08','crossaint trung muoi',29000,'N04');

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

VALUES ('B09','crossaint kem dua',29000,'N02');

INSERT INTO banh (mabanh, tenbanh, dongia, mancc)

VALUES ('B10','crossaint kem lai',30000,'N01');

o Bảng Khách hàng

INSERT INTO khachhang (makh, tenkh, diachi, sdt)

VALUES ('KH01', 'Nguyen Tran Kim Phuc', '202 Huynh Van Banh Phu Nhuan TP.HCM', '0123456789');

INSERT INTO khachhang (makh, tenkh, diachi, sdt)

VALUES ('KH02', 'Le Vu Song Toan', '212 Tran Hung Dao Quan 5 TP.HCM', '0987654321');

INSERT INTO khachhang (makh, tenkh, diachi, sdt)

VALUES ('KH03', 'Nguyen Tran Kim Ly', '22 Hoang Sa Binh Thach TP.HCM', '0256789456');

INSERT INTO khachhang (makh, tenkh, diachi, sdt)

VALUES ('KH04', 'Pham Ngoc Son', '218 Le Van Luong Binh Tan TP.HCM', '0972887564');

INSERT INTO khachhang (makh, tenkh, diachi, sdt)

VALUES ('KH05', 'Hoang Van Viet', '786 Hai Ba Trung Quan 11 TP.HCM', '0855762223');

o Bảng Nhân viên

INSERT INTO nhanvien (manv, tennv, diachi, sdt, ngaysinh)

VALUES ('NV01', 'Nguyen Viet Hoang', '188 Su Van Hanh Quan 10 TP.HCM', '123456789', TO_DATE ('1999-12-20', 'yyyy-mm-dd'));

INSERT INTO nhanvien (manv, tennv, diachi, sdt, ngaysinh)

VALUES ('NV02', 'Le Thi Hong Anh', '215 Tran Hung Dao Quan 5 TP.HCM', '0345678983', TO_DATE ('1995-08-27', 'yyyy-mm-dd'));

4.1.4 Script insert dữ ệu mẫu cho các bảng giao dịch/ li nghiệp vụ

Thêm dữ ệu cho các bảng giao dịch/ nghiệp vụ li

Trang 7

o Bảng Đơn hàng

INSERT INTO donhang (madh, ngaydathang, tonggiatri,

trangthai, makh, manv)

VALUES ('DH01', TO_DATE ('2024- -20', 'yyyy- 02 mm -dd'),

95000, 'da xac nhan', 'KH01', 'NV01');

INSERT INTO donhang (madh, ngaydathang, tonggiatri,

trangthai, makh, manv)

VALUES ('DH02', TO_DATE ('2024- -21', 'yyyy- 02 mm -dd'),

28000, 'da xac nhan', 'KH03', 'NV01');

INSERT INTO donhang (madh, ngaydathang, tonggiatri,

trangthai, makh, manv)

VALUES ('DH03', TO_DATE ('2024- -22', 'yyyy- 02 mm -dd'),

19000, 'cho xac nhan', 'KH05', 'NV02');

INSERT INTO donhang (madh, ngaydathang, tonggiatri, trangthai, makh, manv)

VALUES ('DH04', TO_DATE('2024- -22', 'yyyy- 02 mm -dd'), 0, 'cho xac nhan', 'KH02', 'NV02');

o Bảng Hóa đơn

INSERT INTO hoadon (mahd, ngaylap, trangthai, thanhtien,

madh)

VALUES ('HD01', TO_DATE ('2024- -20', 'yyyy- 02 mm -dd'), 'da thanh toan', 5222, 'DH01');

INSERT INTO hoadon (mahd, ngaylap, trangthai, thanhtien,

madh)

VALUES ('HD02', TO_DATE ('2024- -21', 'yyyy- 02 mm -dd'), 'da thanh toan', 456, 'DH02');

INSERT INTO hoadon (mahd, ngaylap, trangthai, thanhtien,

madh)

Trang 8

VALUES ('HD03', TO_DATE ('2024- -22', 'yyyy- 02 mm -dd'), 'chua thanh toan', 123, 'DH03');

o Bảng Chi tiết Đơn hàng

INSERT INTO CTDonHang (MaDH, MaBanh, SoLuong,

ThanhTien)

VALUES ('DH01', 'B01', 2, 66000);

INSERT INTO CTDonHang (MaDH, MaBanh, SoLuong,

ThanhTien)

VALUES ('DH01', 'B09', 1, 29000);

INSERT INTO CTDonHang (MaDH, MaBanh, SoLuong,

ThanhTien,)

VALUES ('DH02', 'B05', 1, 28000);

INSERT INTO CTDonHang (MaDH, MaBanh, SoLuong,

ThanhTien,)

VALUES ('DH03', 'B06', 3, 19000);

INSERT INTO CTDonHang (MaDH, MaBanh, SoLuong, ThanhTien)

VALUES ('DH04', 'B01', 3, 0);

o Bảng Phiếu giao hàng

INSERT INTO phgiaohang (maph, ngaygiao, diachi, trangthai,

tenkh, sdt, madh)

VALUES ('PH01', TO_DATE ('2024- -20', 'yyyy- 02 mm -dd'), '22 Hoang Sa Binh Thach TP.HCM', 'da giao','Nguyen Tran Kim Ly', '0256789456', 'DH01');

INSERT INTO phgiaohang (maph, ngaygiao, diachi, trangthai,

tenkh, sdt, madh)

Trang 9

VALUES ('PH02', TO_DATE ('2024- -21', 'yyyy- 02 mm -dd'), '202 Huynh Van Banh Phu Nhuan TP.HCM', 'da giao', 'Nguyen Tran Kim Phuc', '0123456789', 'DH02');

INSERT INTO phgiaohang (maph, ngaygiao, diachi, trangthai,

tenkh, sdt, madh)

VALUES ('PH03', TO_DATE ('2024- -22', 'yyyy- 02 mm -dd'), '786 Hai Ba Trung Quan 11 TP.HCM', 'chua giao', 'Hoang Van Viet', '0855762223', 'DH03');

4.2 Procedure và function

4.2.1 Các thủ tục CRUD cho 1 bảng Danh mục/ Phân loại

Trang 11

4.2.2 Các thủ tục liên quan đến nghiệp vụ

create table ddh_rec as select * from donhang

CREATE OR REPLACE PROCEDURE update_tongtien_ddh

AS

BEGIN

FOR ddh_rec IN (SELECT madh FROM donhang) LOOP

Cập nhật tongtien

UPDATE donhang

SET tonggiatri = (

Lấy tổng thanhtien cho mỗi chi tiết đơn đặt hàng

SELECT SUM(thanhtien)

FROM ctdonhang

WHERE madh = ddh_rec.madh

)

WHERE madh = ddh_rec.madh;

END LOOP;

END;

lệnh thực thi thủ tục

exec update_tongtien_ddh;

ểm tra ki

select * from donhang;

◼ Proceduce cập nhật thành tiền

CREATE OR REPLACE PROCEDURE update_thanhtien_ctdonhang

AS

BEGIN

FOR ctdonhang_rec IN (SELECT mabanh FROM banh) LOOP

Cập nhật tongtien

Trang 12

UPDATE ctdonhang

SET thanhtien = soluong * (SELECT dongia FROM banh WHERE mabanh = ctdonhang_rec.mabanh)

WHERE mabanh = ctdonhang_rec.mabanh;

end loop;

END;

-lệnh thực thi

exec update_thanhtien_ctdonhang;

lệnh kiểm tra

select * from ctdonhang

4.2.3 Các thủ tục kết xuất báo cáo định kỳ

CREATE OR REPLACE PROCEDURE tong_hop_don_hang_ban_trong_ngay (

p_ngay_ban DATE

)

AS

BEGIN

Lấy danh sách đơn hàng bán trong ngày

DECLARE

CURSOR cur_don_hang IS

SELECT * FROM DONHANG WHERE ngaydathang = p_ngay_ban; BEGIN

Khởi tạo biến tổng doanh thu và số ợng đơn hànglư

DECLARE

v_tong_doanh_thu NUMBER := 0;

v_so_luong_don_hang NUMBER := 0;

BEGIN

Lặp qua từng đơn hàng

FOR rec IN cur_don_hang LOOP

Cập nhật tổng doanh thu

v_tong_doanh_thu := v_tong_doanh_thu + rec.TongGiaTri;

Cập nhật số ợng đơn hàng lư

v_so_luong_don_hang := v_so_luong_don_hang + 1;

END LOOP;

In thông tin tổng hợp

DBMS_OUTPUT.PUT_LINE('Ngày bán: ' || p_ngay_ban);

DBMS_OUTPUT.PUT_LINE('Tổng doanh thu: ' || v_tong_doanh_thu); DBMS_OUTPUT.PUT_LINE('Số ợng đơn hàng: ' || v_so_luong_don_hang);lư END;

Đóng con trỏ

CLOSE cur_don_hang;

END;

Trang 13

END tong_hop_don_hang_ban_trong_ngay;

4.3 Trigger

4.3.1 Các Trigger ràng buộc toàn vẹn

trigger không trùng mã bánh

create or replace trigger trg_banh_inup

before insert on banh for each row

declare

v_ma_banh banh.mabanh%type;

v_count int:=0;

begin

v_ma_banh:=:new.mabanh;

select count(*) into v_count

from banh

where mabanh = v_ma_banh;

if v_count > 0 then

raise_application_error(-20010,'mã bánh ?ã t?n t?i'); else

dbms_output.put_line('v_ma_banh= '||v_ma_banh); end if;

end;

create or replace trigger trg_tenbanh_inup

before insert on banh for each row

declare

v_ten_banh banh.tenbanh%type;

v_count int:=0;

begin

v_ten_banh:=:new.tenbanh;

select count(*) into v_count

from banh

where tenbanh = v_ten_banh;

if v_count > 0 then

raise_application_error(-20010,'tên bánh ?ã t?n t?i'); else

dbms_output.put_line('v_ten_banh= '||v_ten_banh); end if;

Trang 14

end;

4.3.2 "Các Trigger bảo vệ dữ liệu

4.3.2.1 - không cho phép cập nhậ bảng trong khoảng thờ t i gian quy định trong ngày

CREATE OR REPLACE TRIGGER trg_prevent_updates

BEFORE insert or update ON banh FOR EACH ROW

DECLARE

current_hour NUMBER;

BEGIN

SELECT TO_NUMBER(to_char(systimestamp, 'HH24')) INTO current_hour FROM dual;

IF current_hour <= 8 OR current_hour > 20 THEN

raise_application_error(-20001, 'không insert hay cập nhật ngoài giờ '); END IF;

END;

4.3.2.2 - Lưu History

4.4 Bảng danh sách theo mẫu

Nhiệm vụ

Tham chiếu

1 Procedure

them_banh_moi

thêm m t ộ

dữ ệu li bánh mới

tham chiếu trong bảng 'BANH'

2 Procedure

select_banh

xuất dữ liệu của bánh

tham chiếu trong bảng 'BANH'

3 Procedure delecte_banh xóa dữ ệu li

bánh

tham chiếu trong bảng 'BANH'

4 Procedure

update_banh

update dữ liệu cho bánh đã có sẵn

tham chiếu trong bảng 'BANH'

5 Trigger

trg_banh_inup

trigger tránh trùng

mã bánh

tham chiếu trong bảng 'Banh'

6 Trigger

trg_tenbanh_inup

trigger tránh trùng tên bánh

tham chiếu trong bảng 'BANH'

7 Trigger

trg_prevent_updates

trigger không cho phép cập nhật bảng bánh

tham chiếu trong bảng 'BANH'

Trang 15

8

Procedure update_thanhtien_ctdonhang

update thành tiền cho số lượng bánh

đã mua ở đơn hàng

tham chiếu bảng 'CTDONHANG'

9

Procedure update_tongtien_ddh

update tính tổng tiền bánh có trong đơn hàng

tham chiếu bảng 'DONHANG'

10

Procedure tong_hop_don_hang_ban_trong_ngay

Tính tổng đơn hàng

bán được trong ngày hôm đó

tham chiếu bảng 'DONHANG'

11 Cursor Tao_DonHang Tạo đơn hàng m ới tham chiếu bảng 'DONHANG'

Ngày đăng: 19/10/2024, 15:14

w