đồ án môn học thực hành hệ quản trị cơ sơ dữ liệu trang web thương mại điện tử

112 0 0
Tài liệu đã được kiểm tra trùng lặp
đồ án môn học thực hành hệ quản trị cơ sơ dữ liệu trang web thương mại điện tử

Đ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

Do đó cần một trang web quản lý đơn giản, dễ sử dụng và có thể tiết kiệm thời gian cho việc quản lý, hạn chế những sai số và có thể đáp ứng được nhu cầu mà người sử dụng đang cần và tích

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA HỆ THỐNG THÔNG TIN

-🙞🙜🕮🙞🙜 -

ĐỒ ÁN MÔN HỌC THỰC HÀNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

ĐỀ TÀI: TRANG WEB THƯƠNG MẠI ĐIỆN TỬ BÁN HÀNG SIÊU THỊ

Giảng viên hướng dẫn: Nguyễn Hồ Duy Tri Lớp: IS210.N21.1

Nhóm sinh viên thực hiện:

1 Đỗ Thị Bích Ngân – 21522369 – Trưởng nhóm 2 Nguyễn Văn Quốc Thanh - 21521447

3 Nguyễn Thị Bích Hảo - 21522049 4 Nguyễn Ngọc Gia Khiêm – 21520287

TP.HCM, tháng 06 năm 2023

Trang 2

MỤC LỤC

MỤC LỤC 1

LỜI CẢM ƠN 4

NHẬN XÉT CỦA GIẢNG VIÊN 5

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI 6

1.1 Đặt vấn đề 6

1.2 Giải pháp 6

1.3 Phát biểu bài toán 7

1.4 Quy trình nghiệp vụ và phân tích yêu cầu 8

1.4.1 Qui trình nghiệp vụ 8

1.4.2 Yêu cầu chức năng 10

1.4.3 Yêu cầu phi chức năng 11

CHƯƠNG 2: THIẾT KẾ MÔ HÌNH QUAN HỆ 12

2.4.2 Biểu diễn các ràng buộc toàn vẹn 22

CHƯƠNG 3: XÂY DỰNG VÀ QUẢN LÝ CÁC GIAO TÁC 27

3.1 Trigger 27

3.1.1 Trigger trên bảng CUSTOMER 28

Trang 3

3.1.2 Trigger trên bảng EMPLOYEE 29

3.1.3 Trigger trên bảng ORDER_DETAIL 33

3.2 Các chương trình con được sử dụng trong hệ thống 34

3.2.1 Stored Procedure 34

3.2.2 Stored Function 50

3.3 Giao tác (Transaction) 53

3.3.1 Tổng quan về giao tác trong Oracle 53

3.3.2 Tổng quan về giao tác trong Java (Spring Boot) 55

CHƯƠNG 4: XỬ LÝ TRUY XUẤT ĐỒNG THỜI 57

4.1 Tìm hiểu về các phương thức khóa cơ bản 57

4.1.1 Read Lock (Shared Lock) 57

4.1.2 Write Lock (Exclusive Lock) 58

4.2 Các mức cô lập có trong hệ quản trị cơ sở dữ liệu Oracle 58

4.4.2 Mô tả Deadlock trong đồ án môn học 75

CHƯƠNG 5: PHÂN QUYỀN TRUY CẬP 77

5.1 Tổng quan về Spring Security 77

5.2 Phân quyền người dùng quản lý và nhân viên 77

5.3 Phân quyền người dùng khách hàng 79

CHƯƠNG 6: THIẾT KẾ GIAO DIỆN 80

6.1 Đăng nhập 80

Trang 4

6.2 Đăng ký 81

6.3 Thông tin cá nhân khách hàng 82

6.4 Thay đổi mật khẩu 83

6.18 Quản lý nhân viên 100

6.19 Quản lý doanh thu 101

6.20 Quản lý phản hồi 102

6.21 Thêm nhân viên 103

CHƯƠNG 7: KẾT LUẬN 105

7.1 Bảng phân công công việc 105

7.2 Môi trường phát triển và môi trường triển khai 106

7.2.1 Môi trường phát triển 106

7.2.2 Môi trường triển khai 107

7.3 Kết quả đạt được 107

7.4 Những hạn chế 108

7.5 Hướng phát triển của dự án 108

DANH MỤC TÀI LIỆU THAM KHẢO 110

NGUỒN HÌNH ẢNH 111

Trang 5

LỜI CẢM ƠN

Lời đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến trường Đại học Công nghệ Thông tin và Khoa Hệ thống thông tin đã tạo điều kiện cho chúng em được tìm hiểu và học về môn Hệ quản trị cơ sở dữ liệu Trong quá trình học tập, chúng em có được rất nhiều kiến thức và kinh nghiệm liên quan đến các vấn đề trong môn học Đặc biệt, chúng em xin gửi lời cảm ơn sâu sắc nhất đến thầy, cô giảng dạy lý thuyết và thực hành đã trực tiếp hướng dẫn, định hướng chuyên môn, giúp đỡ tận tình đề tài đồ án của nhóm chúng em và tạo mọi điều kiện thuận lợi như việc đóng góp và chia sẻ tài liệu rất chất lượng

Dựa trên những kiến thức thầy cô cung cấp cùng với sự tìm tòi, học hỏi thêm từ các trang mạng, từ bạn bè, nhóm dã hoàn thành đồ án với những sự cố gắng và nỗ lực nhất Tuy nhiên do lần đầu thực hiện nên khó tránh khỏi những sai sót Nhóm rất mong nhận được sự đóng góp ý kiến của thầy, cô để có thể rút ra được những kinh nghiệm và thực hiện tốt hơn trong các đồ án tiếp theo

Lời cuối cùng, chúng em một lần nữa xin được chân thành cảm ơn đến thầy, cô và chúc thầy, cô nhiều sức khỏe, niềm tin để tiếp tục thực hiện sứ mệnh cao đẹp của mình là truyền đạt kiến thức cho thế hệ mai sau

Xin chân thành cảm ơn thầy, cô !

Inside Out Team

Trang 6

NHẬN XÉT CỦA GIẢNG VIÊN

Trang 7

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI

Nội dung: Mô tả tổng quan về đề tài như đặt vấn đề, giải pháp, phát biểu bài toán, quy trình nghiệp vụ Từ đó hình thành nên các yêu cầu chức năng và phi chức năng của hệ

thống

1.1 Đặt vấn đề

Ngày nay, khi cuộc sống của mỗi người dân đang từng bước được nâng cao thì nhu cầu về mua sắm, vui chơi giải trí ngày càng được chú trọng Do đó, các doanh nghiệp cũng quan tâm ưu tiên cho việc phát triển các khu thương mại mua sắm nhằm đáp ứng nhu cầu của người dân Và siêu thị là một nơi mua sắm mà có thể đáp ứng các nhu cầu tiêu dùng của mọi người Với sự phát triển ngày càng rộng, yêu cầu công nghệ hóa các quy trình nghiệp vụ trong siêu thị là điều tất yếu, nhằm mục đích làm đơn giản hóa các nghiệp vụ cũng như tăng khả năng phục vụ khách hàng trở nên nhanh chóng và hiệu quả

Chính vì nhu cầu mua sắm ngày càng tăng, nên sự đòi hỏi đáp ứng nhu cầu về mặt hàng hóa cũng như sản phẩm ngày càng cao Ngoài ra việc đảm bảo các vấn đề vệ sinh an toàn thực phẩm, nguồn gốc xuất xứ, thực phẩm xanh trên các trang web bán hàng vẫn còn nhiều hạn chế Do đó cần một trang web quản lý đơn giản, dễ sử dụng và có thể tiết kiệm thời gian cho việc quản lý, hạn chế những sai số và có thể đáp ứng được nhu cầu mà người sử dụng đang cần và tích hợp các tiêu chí về giá trị dinh dưỡng của sản phẩm trên trang web nhằm tạo sự yên tâm cho khách hàng khi sử dụng và mua sản phẩm

1.2 Giải pháp

Thiết kế và xây dựng trang web bán hàng siêu thị kế thừa mô hình hoạt động của các siêu thị hiện có trên thực tế Đồng thời ứng dụng công nghệ với mục đích làm cho chương trình có thể đáp ứng được nhu cầu quản lý ngày càng phức tạp, dễ dàng trong triển khai Xây dựng website đơn giản, thân thiện với người dùng, tiết kiệm thời gian làm thủ tục tại cửa hàng, giảm sai sót, đáp ứng nhu cầu hiện tại của người dùng, tích hợp tiêu chí giá trị dinh dưỡng của sản phẩm trên website nhằm tạo sự yên tâm cho khách hàng khi sử dụng và mua hàng

Trang 8

Trang web đồng thời là công cụ quản lý bán hàng hiệu quả, làm đơn giản hóa việc lập các hóa đơn giấy tờ cũng như việc lưu trữ chúng, cung cấp thông tin nhanh chóng và chính xác làm cơ sở cho việc ra quyết định trong kinh doanh, phục vụ hữu hiệu cho việc quản lý và phát triển của siêu thị

1.3 Phát biểu bài toán

Xây dựng một hệ thống ứng dụng hoàn thiện để các khách hàng có nhu cầu mua sắm online có thể thao tác một cách an toàn, thuận tiện và dễ quản lí các thông tin các thông tin cá nhân của mình Các nhân viên của cửa hàng cũng dễ dàng quản lí thông tin về sản phẩm, khách hàng, doanh thu và thông tin cá nhân của mình

Hằng ngày, hệ thống tiếp nhận các yêu cầu mua hàng của khách hàng Hệ thống sẽ tự động lập các hóa đơn tính tiền một cách nhanh chóng cho các đơn hàng của khách hàng Sau mỗi đơn hàng được giao thành công, hệ thống cần lưu lại thông tin và các đánh giá của khách hàng về sản phẩm để các nhân viên và bộ phận trong công ty sẽ xem qua các phản hồi của khách hàng và cải thiện từng ngày giúp cho cửa hàng ngày càng phát triển

Trang web sẽ luôn luôn hoạt động Vào cuối ngày, nhân viên dựa vào số lượng hiện có của mỗi sản phẩm sẽ thống kê tình hình bán hàng của siêu thị, tính toán số lượng hàng tồn, hàng hết để lên kế hoạch nhập hàng mới

Khi có hàng hết hoặc cần bổ sung hàng mới, siêu thị sẽ nhập hàng từ các nhà cung cấp Thông tin về hàng cần nhập phải được lưu lại để nhân viên kế toán thống kê tình hình mua bán trong siêu thị Thông tin này sẽ được trình lên ban giám đốc để duyệt xem có được phép nhập hàng hay không Khi nhập hàng mới, thì nhân viên kiểm kê sẽ tính toán số lượng rồi nhập vào hệ thống Hệ thống phải cho phép nhân viên nhập hàng mới vào hay cập nhật số lượng hàng

Trang 9

• Quản lý doanh thu: Theo dõi và quản lý doanh thu của cửa hàng để tối ưu hóa lợi nhuận và đảm bảo sự ổn định tài chính

• Quản lý mua bán hàng: Đảm bảo quy trình bán hàng được thực hiện nhanh chóng và hiệu quả, đa dạng hóa các mặt hàng và giảm thời gian chờ đợi cho khách hàng • Đảm bảo việc tra cứu thông tin cho các đối tượng người dùng hệ thống

• Hỗ trợ tìm kiếm các thông tin một cách chính xác, nhanh chóng, hạn chế đến mức thấp nhất các rủi ro xảy ra với hệ thống

• Hệ thống hỗ trợ phân quyền người dùng, đảm bảo tính bảo mật, an toàn của hệ thống

1.4 Quy trình nghiệp vụ và phân tích yêu cầu 1.4.1 Qui trình nghiệp vụ

Hình 1: Sơ đồ tổ chức siêu thị GreenMart

Nhân viên quản lí và các nhân viên khác còn lại phải đăng nhập vào trang web với tài khoản và mật khẩu đã được cửa hàng cung cấp trước

Khách hàng đăng kí tài khoản và dùng tài khoản mình tạo để đăng nhập Với mỗi quyền khi đăng nhập thì sẽ ứng với những chức năng khác nhau

1.4.1.1 Hoạt động của khách hàng:

• Qui trình đăng kí: Mỗi khách hàng có thể đăng ký tài khoản khi điền đầy đủ các thông tin: Họ tên, số điện thoại, ngày sinh, địa chỉ, mail, mật khẩu

Trang 10

• Qui trình đăng nhập và quản lí thông tin cá nhân: Sau khi có tài khoản thì khách hàng đăng nhập vào trang web và có thể thực hiện các công việc: xem và chỉnh sửa thông tin cá nhân của mình, thay đổi mật khẩu,…

• Qui trình mua hàng: Sau khi đăng nhập thành công, khách hàng có thể tìm kiếm, xem thông chi tiết các sản phẩm của cửa hàng, xem phản hồi của những khách hàng khác về sản phẩm đó và lựa chọn sản phẩm kèm theo số lượng mình muốn mua • Qui trình đặt hàng thanh toán: Sau khi chọn xong các sản phẩm, khách hàng tiến

hành đặt hàng bằng cách điền các thông tin về: số điện thoại người nhận, địa chỉ giao hàng Thanh toán đơn hàng, khách hàng có thể lựa chọn một trong hai hình thức là: COD (thanh toán khi nhận hàng) và VNPAY (thanh toán bằng ví điện tử) • Qui trình hủy đơn hàng: Sau khi đăng nhập và mua hàng thành công Khách hàng

có thể hủy đơn đặt hàng nếu đơn đặt hàng đang ở trạng thái thích hợp để hủy và đơn hàng được hủy phải có hình thức thanh toán là COD

• Qui trình xác nhận đã nhận hàng: Sau khi giao hàng thành công, nhân viên cửa hàng sẽ gọi điện xác nhận với khách hàng đã giao hàng thành công để cập nhật trạng thái đơn hàng, khách hàng cũng có thể cập nhật trạng thái đơn hàng là ‘Đã nhận hàng’ • Qui trình phản hồi: Sau khi xác nhận đã nhận được hàng, khách hàng có thể phản

hồi và chia sẻ ý kiến của mình về sản phẩm

1.4.1.2 Hoạt động của nhân viên (không phải quản lí)

• Qui trình đăng nhập và quản lí thông tin cá nhân: Sau khi có tài khoản của cửa hàng cung cấp thì nhân viên đăng nhập vào trang web và có thể thực hiện các công việc: xem và chỉnh sửa thông tin cá nhân của mình, thay đổi mật khẩu,…

• Qui trình quản lý sản phẩm: Sau khi đăng nhập vào trang web, nhân viên có thể tìm kiếm theo tên sản phẩm, theo dõi số lượng hiện có của sản phẩm và thực hiện cập nhật số lượng sản phẩm nếu cần

• Qui trình quản lý khách hàng: Sau khi đăng nhập vào trang web, nhân viên có thể xem thông tin khách hàng, theo dõi doanh số của khách hàng đã mua sắm tại cửa hàng Lọc ra danh sách các khách hàng theo: tên, địa chỉ, số điện thoại, mail

Trang 11

• Qui trình quản lý đơn đặt hàng: Sau khi đăng nhập vào trang web, nhân viên có thể theo dõi, xem chi tiết các đơn đặt hàng của khách hàng và cập nhật trạng thái của các đơn đặt hàng đó Đồng thời xuất hóa đơn của đơn hàng đó Lọc ra danh sách các đơn đặt hàng theo: Mã đơn đặt hàng, tên khách hàng

1.4.1.3 Hoạt động của nhân viên quản lý:

• Nhân viên quản lý có các hoạt động giống như của các nhân viên khác (1.4.1.2) Bên cạnh đó còn có những quy trình riêng

• Qui trình quản lý doanh thu: Sau khi đăng nhập vào trang web, quản lý có thể theo dõi và xem doanh thu theo tháng để có thể nắm được tình hình kinh doanh và cải thiện thêm

• Qui trình quản lý nhân viên: Sau khi đăng nhập vào trang web, quản lý có thể xem thông tin các nhân viên khác Lọc ra danh sách các nhân viên theo: mã nhân viên, tên nhân viên, địa chỉ, số điện thoại, mail Có thể thực hiện thêm nhân viên mới và xóa nhân viên

• Qui trình quản lý phản hồi: Sau khi đăng nhập vào trang web, quản lý có thể xem thông tin phản hồi của các khách hàng về các sản phẩm để nhìn nhận vấn đề, cải thiện những điều chưa tốt ở cửa hàng của mình và tiếp tục phát triển những điểm mạnh

1.4.2 Yêu cầu chức năng

Yêu cầu lưu trữ:

• Lưu trữ thông tin giới thiệu của cửa hàng • Lưu trữ thông tin khách hàng thành viên • Lưu trữ thông tin nhân viên thuộc cửa hàng • Lưu trữ thông tin sản phẩm

• Lưu trữ thông tin đơn hàng, chi tiết đơn hàng • Lưu trữ lịch sử đơn hàng

• Lưu trữ thông tin phản hồi của khách hàng gửi đến • Lưu trữ thông tin giỏ hàng

• Lưu trữ thông tin tài khoản đăng nhập vào hệ thống

Trang 12

Yêu cầu tính toán:

• Tính toán tổng doanh thu theo tháng cho nhân viên quản lý • Cập nhật tổng số lượng sản phẩm hiện tại của cửa hàng Yêu cầu tra cứu:

• Tra cứu thông tin của khách hàng

• Tra cứu thông tin nhân viên thuộc cửa hàng • Tra cứu thông tin sản phẩm

• Tra cứu thông tin đơn hàng Yêu cầu xuất file:

• Xuất hóa đơn

• Xuất danh sách các đơn hàng

1.4.3 Yêu cầu phi chức năng

• Hiệu suất: Xử lý dữ liệu nhanh, không mất quá nhiều thời gian đợi sẽ gây ra sự khó

chịu cho khách hàng Hệ thống phải phản hồi thông tin cho người dùng nhanh, đưa

ra các thông báo rõ ràng Các ngoại lệ xử lý chặt chẽ

• Tính bảo mật hệ thống: Hệ thống đảm bảo việc bảo mật tuyệt đối thông tin đăng nhập của các đối tượng người dùng hệ thống Đồng thời bảo vệ được các thông tin cá nhân của người dùng

• Khả năng mở rộng: Hệ thống có thể mở rộng thêm các tính năng cần thiết trong tương lai

• Khả năng bảo trì : bảo trì hệ thống ít nhất 1 lần trên năm

• Khả năng sử dụng: hệ thống dễ sử dụng, thân thiện với người dùng Giao diện đơn giản, rõ ràng, màu sắc hài hòa, dễ thao tác, dễ vận hành

• Khả năng tương thích: hệ thống tương thích với các hệ thống khác, có khả năng kết nối với server, máy in

• Khả năng chịu lỗi: nếu có lỗi xảy ra có thể khắc phục nhanh chóng • Khả năng phục hồi dữ liệu đã mất

Trang 13

CHƯƠNG 2: THIẾT KẾ MÔ HÌNH QUAN HỆ

Nội dung: Mô hình hóa dữ liệu quan hệ, mô tả các thành phần dữ liệu trong mô hình cơ sở dữ liệu quan hệ và mô tả các ràng buộc toàn vẹn của hệ thống

2.1 Mô hình thực thể mối kết hợp

Hình 2.1: Mô hình thực thể mối kết hợp

2.2 ER Diagram

Trang 14

Hình 2.2: ER Diagram

2.3 Mô hình cơ sở dữ liệu quan hệ

EMPLOYEE(EMPLOYEE_ID, ADDRESS, BASE_SALARY, BIRTHDAY,

MAIL, FULLNAME, PHONE, USERPOSITION, START_DATE, USERLOGIN_ID, MANAGER_ID)

LOGIN_EMPLOYEE(USERLOGIN_ID, USERPASSWORD, USERNAME) CUSTOMER(CUSTOMER_ID, ADDRESS, BIRTHDAY, MAIL, FULLNAME,

PHONE, TOTAL_PURCHASE_AMOUNT, USERLOGIN_ID)

PRODUCT(PRODUCT_ID, DESCRIPTION, PRODUCT_NAME,

NUTRITION_VALUE, ORIGIN, LINK_PHOTO, PRICE, QUANTITY, PRODUCT_TYPE, UNIT)

CART(CART_ID, QUANTITY, CUSTOMER_ID, PRODUCT_ID) ORDERS(ORDER_ID, ADDRESS_DELIVERY, ORDER_DATE,

ID_CHECKOUT, PAYMENT_METHOD, PHONE_RECEIVER, STATUS, TOTAL_MONEY, CUSTOMER_ID)

ORDER_DETAIL(ORDER_ID, PRODUCT_ID, QUANTITY)

Trang 15

CUSTOMER_FEEDBACK(FEEDBACK_ID, DATE_FEEDBACK,

DESCRIPTION, CUSTOMER_ID, PRODUCT_ID)

LOGIN_CUSTOMER(USERLOGIN_ID, USERNAME, USERPASSWORD)

Lưu ý: Không được sửa thuộc tính khóa chính

Giải thích các mối quan hệ và các thuộc tính của lược đồ:

2.3.1 Bảng EMPLOYEE

Bảng mô tả quan hệ EMPLOYEE

1 EMPLOYEE_ID Number(19,0) Khóa chính Mỗi nhân viên có 1 ID duy nhất để phân biệt với nhân viên khác

3 BASE_SALARY Number(11,2) Không bỏ trống Lương cơ bản theo tháng

4 BIRTHDAY Date Không bỏ trống Ngày sinh 5 MAIL Varchar2(100) Không bỏ trống,

Duy nhất,

Có chứa kí tự @

Tên tài khoản Mail cũng chính là tên đăng nhập của nhân viên

8 USERPOSITION Varchar2(50) Manager / Employee Vị trí làm việc

9 START_DATE Date Không bỏ trống Ngày bắt đầu làm việc

Trang 16

10 USERLOGIN_ID Number(19,0) Khóa ngoại tham chiếu đến

LOGIN_EMPLOYEE(USERLOGIN_ID)

ID tài khoản đăng nhập của nhân viên

11 MANAGER_ID Number(19,0) ID người quản lí

2.3.2 Bảng LOGIN_EMPLOYEE

Bảng mô tả quan hệ LOGIN_EMPLOYEE

1 USERLOGIN_ID Number(19,0) Khóa chính Mỗi tài khoản đăng nhập của nhân viên có 1 ID duy nhất để phân biệt với tài khoản của nhân viên khác

2.3.3 Bảng CUSTOMER

Bảng mô tả quan hệ CUSTOMER

1 CUSTOMER_ID Number(19,0) Khóa chính Mỗi khách hàng có 1 ID duy nhất để phân biệt với nhân viên khác

Trang 17

2 ADDRESS Varchar2(400) Địa chỉ 3 BIRTHDAY Date Không bỏ trống Ngày sinh 4 MAIL Varchar2(100) Không bỏ trống,

Duy nhất,

Có chứa kí tự @

Tên tài khoản Mail cũng chính là tên đăng nhập của khách hàng

7 TOTAL_PURCHASE_AMOUNT

Number(11,2) Mặc định là 0 Tổng tiền mà khách hàng đã mua hàng tại cửa hàng

8 USERLOGIN_ID Number(19,0) Khóa ngoại tham chiếu đến

LOGIN_CUSTOMER(USERLOGIN_ID)

ID tài khoản đăng nhập của khách hàng

2.3.4 Bảng PRODUCT

Bảng mô tả quan hệ PRODUCT

1 PRODUCT_ID Number(19,0) Khóa chính Mỗi sản phẩm có 1 ID để phân biệt với sản phẩm khác

2 DESCRIPTION Varchar2(2000) Mô tả sản phẩm

Trang 18

4 NUTRITION_VALUE

Varchar2(2000) Mô tả giá trị dinh dưỡng của sản phẩm

6 LINK_PHOTO Varchar2(500) Link ảnh để hiển thị 7 PRICE Number(11,2) Không bỏ trống Giá tiền

8 QUANTITY Number(10,0) Không bỏ trống Số lượng sản phẩm

9 PRODUCT_TYPE Varchar2(50) Loại sản phẩm 10 UNIT Varchar2(50) Không bỏ trống Đơn vị tính

2.3.5 Bảng CART

Bảng mô tả quan hệ CART

1 CART_ID Number(19,0) Khóa chính Khi mua hàng, mỗi sản phẩm và số lượng sản phẩm đó mà khách hàng mua sẽ có 1 ID để phân biệt với các sản phẩm khác và số lượng sản phẩm khác đó cùng được mua bởi khách hàng

khách hàng mua

Trang 19

3 CUSTOMER_ID Number(19,0) Khóa ngoại tham chiếu đến

CUSTOMER(CUSTOMER_ID)

ID khách hàng

4 PRODUCT_ID Number(19,0) Khóa ngoại tham chiếu đến

PRODUCT(PRODUCT_ID)

ID sản phẩm

2.3.6 Bảng ORDERS

Bảng mô tả quan hệ ORDERS

1 ORDER_ID Number(19,0) Khóa chính Mỗi hóa đơn có 1 ID để phân biệt với các hóa đơn khác

2 ADDRESS_DELIVERY

Varchar2(100) Địa chỉ giao đơn hàng

3 ORDER_DATE Date Không bỏ trống Ngày hóa đơn

4 ID_CHECKOUT Number(19,0) ID thanh toán bằng ví điện tử (Là Null nếu thanh toán COD) 5 PAYMENT_METH

OD

Varchar2(255) Phương thức thanh toán

Trang 20

6 PHONE_RECEIVER

Varchar2(255) Số điện thoại người nhận đơn hàng 7 STATUS Varchar2(50) Ordered/ Preparing/

ID khách hàng

2.3.7 Bảng ORDER_DETAIL

Bảng mô tả quan hệ ORDER_DETAIL

1 ORDER_ID Number(19,0) Khóa chính, Khóa ngoại tham chiếu đến

ORDERS(ORDER_ID)

ID của hóa đơn

2 PRODUCT_ID Number(19,0) Khóa chính, Khóa ngoại tham chiếu đến

PRODUCT(PRODUCT_ID)

ID của sản phẩm

Trang 21

3 QUANTITY Number(10,0) Không bỏ trống Số lượng sản phẩm mua

2.3.8 Bảng CUSTOMER_FEEDBACK

Bảng mô tả quan hệ CUSTOMER_FEEDBACK

1 FEEDBACK_ID Number(19,0) Khóa chính Mỗi phản hồi của khách hàng có 1 ID để phân biệt với các phản hồi khác

2 DATE_FEEDBACK

3 DESCRIPTION Varchar2(255 byte)

Mô tả đánh giá

4 CUSTOMER_ID Number(19,0) Khóa ngoại tham chiếu đến

CUSTOMER(CUSTOMER_ID)

ID khách hàng

5 PRODUCT_ID Number(19,0) Khóa ngoại tham chiếu đến

PRODUCT(PRODUCT_ID)

ID sản phẩm được đành giá

Trang 22

2.3.9 Bảng LOGIN_CUSTOMER

Bảng mô tả quan hệ LOGIN_CUSTOMER

1 USERLOGIN_ID Number(19,0) Khóa chính Mỗi tài khoản đăng nhập của khách hàng có 1 ID để phân biệt với tài khoản của khách hàng khác

2.4 Mô tả các qui định của hệ thống 2.4.1 Các ràng buộc toàn vẹn

Ràng buộc 1: MAIL của nhân viên chính là tên đăng nhập (USERNAME) của

nhân viên đó (MAIL do cửa hàng cung cấp và nhân viên không được sửa)

Ràng buộc 2: MAIL của khách hàng cũng chính là tên đăng nhập (USERNAME)

của khách hàng đó

Ràng buộc 3: Thuộc tính USERPOSITION trong bảng EMPLOYEE chỉ có thể có

giá trị ‘EMPLOYEE’ hoặc ‘MANAGER’

Ràng buộc 4: Thuộc tính STATUS trong bảng ORDERS chỉ có thể có giá trị: Đã

đặt hàng (ORDERED) hoặc đang chuẩn bị (PREPARING) hoặc đang vận chuyển

(SHIPPING) hoặc giao hàng thành công (COMPLETELY)

Ràng buộc 5: Thuộc tính BIRTHDAY trong bảng CUSTOMER phải là một ngày

ở quá khứ hoặc hiện tại

Ràng buộc 6: Nhân viên làm việc tại cửa hàng ít nhất 18 tuổi Ràng buộc 7: Quản lí cũng là một nhân viên

Trang 23

Ràng buộc 8: Trị giá (TOTAL_MONEY) của một đơn hàng bằng tổng

ORDER_DETAIL(QUANTITY) * PRODUCT(PRICE) các chi tiết đơn hàng của đơn hàng đó

Ràng buộc 9: Doanh số (TOTAL_PURCHASE_AMOUNT) của một khách

hàng bằng tổng trị giá đơn hàng(TOTAL_MONEY) của khách hàng đó

2.4.2 Biểu diễn các ràng buộc toàn vẹn

Các đặc trưng của ràng buộc toàn vẹn:

• Bối cảnh: Những quan hệ có khả năng làm cho ràng buộc toàn vẹn bị vi phạm • Nội dung: Phát biểu bằng ngôn ngữ hình thức

• Tầm ảnh hưởng: Bảng hai chiều, xác định các thao tác ảnh hưởng và thao tác không ảnh hưởng lên các quan hệ nằm trong bối cảnh

➢ Ký hiệu + : Có thể gây ra vi phạm ràng buộc toàn vẹn ➢ Ký hiệu - : Không thể gây ra vi phạm ràng buộc toàn vẹn

➢ Ký hiệu +(X) : Có thể gây ra vi phạm ràng buộc toàn vẹn khi thao tác trên

thuộc tính X

➢ Ký hiệu -(*) : Không thể gây ra vi phạm ràng buộc toàn vẹn do thao tác không thực hiện được

2.4.2.1 Ràng buộc 1: MAIL của nhân viên chính là tên đăng nhập (USERNAME) của

nhân viên đó (MAIL do cửa hàng cung cấp và nhân viên không được sửa) • Bối cảnh: EMPLOYEE, LOGIN_EMPLOYEE

• Nội dung:  emp ∈ EMPLOYEE,  log ∈ LOGIN_EMPLOYEE: emp.USERLOGIN_ID = log USERLOGIN_ID  emp.MAIL = log.USERNAME • Bảng tầm ảnh hưởng:

Trang 24

RB1 Thêm Xóa Sửa

2.4.2.2 Ràng buộc 2: MAIL của khách hàng cũng chính là tên đăng nhập (USERNAME)

của khách hàng đó

• Bối cảnh: CUSTOMER, LOGIN_CUSTOMER

• Nội dung:  cus ∈ CUSTOMER,  log ∈ LOGIN_CUSTOMER:

cus.USERLOGIN_ID = log USERLOGIN_ID  cus.MAIL = log.USERNAME • Bảng tầm ảnh hưởng:

2.4.2.3 Ràng buộc 3: Thuộc tính USERPOSITION trong bảng EMPLOYEE chỉ có thể

có giá trị ‘EMPLOYEE’ hoặc ‘MANAGER’

• Bối cảnh: EMPLOYEE

• Nội dung:  emp ∈ EMPLOYEE:

emp.USERPOSITION = ‘EMPLOYEE 

emp.USERPOSITION = ‘MANAGER’ • Bảng tầm ảnh hưởng:

Trang 25

2.4.2.4 Ràng buộc 4: Thuộc tính STATUS trong bảng ORDERS chỉ có thể có giá trị: Đã

đặt hàng (ORDERED) hoặc đang chuẩn bị (PREPARING) hoặc đang vận chuyển

(SHIPPING) hoặc giao hàng thành công (COMPLETELY)

• Bối cảnh: ORDERS

• Nội dung:  ord ∈ ORDERS:

ord.STATUS = ‘ORDERED’  ord.STATUS = ‘PREPARING’ 

ord.STATUS = ‘SHIPPING’  ord.STATUS = ‘COMPLETELY’

• Bảng tầm ảnh hưởng:

2.4.2.5 Ràng buộc 5: Thuộc tính BIRTHDAY trong bảng CUSTOMER phải là một ngày

ở quá khứ hoặc hiện tại

Trang 26

2.4.2.7 Ràng buộc 7: Quản lí cũng là một nhân viên

• Bối cảnh: EMPLOYEE

• Nội dung:  emp1 ∈ EMPLOYEE, emp1.MANAGER_ID ≠ NULL  !emp2 ∈ EMPLOYEE: emp1.MANAGER_ID = emp2.MANAGER_ID

• Bảng tầm ảnh hưởng:

2.4.2.8 Ràng buộc 8: Trị giá (TOTAL_MONEY) của một đơn hàng bằng tổng

ORDER_DETAIL(QUANTITY) * PRODUCT(PRICE) các chi tiết đơn hàng của đơn hàng đó

• Bối cảnh: ORDERS, ORDER_DETAIL, PRODUCT

• Nội dung:  ord ∈ ORDERS (ord.TOTAL_MONEY = (ord_detail ∈ ORDER_DETAIL: (ord_detail ORDER_ID = ord.ORDER_ID) , pro ∈ PRODUCT(pro.PRODUCT_ID = ord_detail.PRODUCT_ID):

ord_detail.QUANTITY * pro.PRICE ) • Bảng tầm ảnh hưởng:

2.4.2.9 Ràng buộc 9: Doanh số (TOTAL_PURCHASE_AMOUNT) của một khách hàng

bằng tổng trị giá đơn hàng(TOTAL_MONEY) của khách hàng đó • Bối cảnh: CUSTOMER, ORDERS

• Nội dung:cus ∈ CUSTOMER :

Trang 27

(ord ∈ ORDERS  ord.CUSTOMER_ID = cus.CUSTOMER_ID )ord.TOTAL_MONEY

• Bảng tầm ảnh hưởng:

Trang 28

CHƯƠNG 3: XÂY DỰNG VÀ QUẢN LÝ CÁC GIAO TÁC

Nội dung: Thiết kế và xây dựng các giao tác cho tất cả stored procedure, function và trigger được sử dụng trong hệ thống

3.1 Trigger

Trigger là một đơn vị chương trình lưu trữ trong database và tự đông thực thi để đáp ứng một sự kiện nào đó Sự kiện này được kết hợp với một table, view, schema hoặc database và là một trong những sự kiện sau:

• Một câu lệnh DML: DELETING, INSERT, UPDATE • Một câu lệnh DDL: CREATTE, ALTER, DROP

• Một tác vụ lên database: SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN

Trigger và ràng buộc (constraint) đều ràng buộc dữ liệu đầu vào nhưng trigger có thể tuân theo những quy tắc phức tạp mà constraint không thể

Cú pháp tạo trigger trong Oracle:

CREATE OR REPLACE TRIGGER ten_trigger {BEFORE | AFTER}

{DELETE, INSERT, UPDATE [OF ten_cot … ]} ON ten_bang

[FOR EACH ROW] DECLARE ten_bien; … BEGIN

Thuc thi cac cau lenh SQL; END;

Giải thích:

Trang 29

• {BEFORE | AFTER}: Thời gian kích hoạt trigger, xử lý hành động

trước(BEFORE) hay sau(AFTER) khi thực hiện thay đổi trên bảng dữ liệu • {DELETE, INSERT, UPDATE [OF ten_cot … ]}: Sự kiện kích hoạt trigger • ON ten_bang: Trình kích hoạt phải được liên kết với một bảng cụ thể, sử dụng từ

khóa ON để xác định

• [FOR EACH ROW]: trigger sẽ thực thi trên từng dòng Danh sách các trigger có trong hệ thống:

Bảng danh sách các trigger

1 BIRTHDAY_CUS_VALID Kiểm tra ngày sinh (BIRTHDAY) của khách hàng phải bé hơn hoặc bằng ngày hiện tại

2 CHECK_AGE_EMPLOYEE Kiểm tra độ tuổi của nhân viên làm việc tại cửa hàng phải lớn hơn hoặc bằng 18 tuổi

3 MANAGERID_IS_EMPLOYEEID Kiểm tra người quản lí cũng là một nhân viên

4 LOGIN_EMP_AUTO Sau khi thêm một nhân viên thì thông tin login của nhân viên đó sẽ được tạo tự động

5 UPDATE_QUANTITY_PRODUCT Khi thêm hoặc xóa một chi tiết hóa đơn thì cập nhật lại số lượng hiện có của sản phẩm

3.1.1 Trigger trên bảng CUSTOMER 3.1.1.1 BIRTHDAY_CUS_VALID

Trang 30

Thao tác: INSERT OR UPDATE OF BIRTHDAY

Nội dung: Kiểm tra ngày sinh (BIRTHDAY) của khách hàng phải bé hơn hoặc bằng ngày hiện tại

Hình 3.1.1: trigger BIRTHDAY_CUS_VALID

Các bước thực hiện :

1 Lấy giá trị thuộc tính BIRTHDAY

2 Nếu BIRTHDAY bé hơn hoặc bằng ngày hiện tại thì thông báo thành công và

kết thúc Ngược lại thì qua bước 3

3 Thông báo lỗi và kết thúc 3.1.2 Trigger trên bảng EMPLOYEE 3.1.2.1 CHECK_AGE_EMPLOYEE

Thao tác: INSERT OR UPDATE OF BIRTHDAY

Nội dung: Kiểm tra độ tuổi của nhân viên làm việc tại cửa hàng phải lớn hơn hoặc bằng 18 tuổi

Trang 31

Hình 3.1.2: trigger CHECK_AGE_EMPLOYEE

Các bước thực hiện:

1 Tách giá trị năm trong thuộc tính BIRTHDAY

2 Thực hiện kiểm tra có đủ 18 tuổi không Nếu có thì thông báo thành công và kết

thúc Ngược lại thì qua bước 3

3 Thông báo không thành công và kết thúc 3.1.2.2 MANAGERID_IS_EMPLOYEEID

Thao tác: INSERT

Nội dung: Kiểm tra người quản lí cũng là một nhân viên

Trang 32

Hình 3.1.3: trigger MANAGER_IS_EMPLOYEEID

Các bước thực hiện

1 Khai báo biến con trỏ v_EMPLOYEE_ID_LIST để tham chiếu đến các ID của

nhân viên (EMPLOYEE_ID), v_EMPLOYEE_ID để lưu giá trị EMPLOYEE_ID của nhân viên, v_check để kiểm tra

2 Mỗi khi vòng lặp duyệt qua từng dòng mà v_EMPLOYEE_ID_LIST tham

chiếu đến thì gán EMPLOYEE_ID cho biến v_EMPLOYEE_ID và so sánh MANAGER_ID có bằng v_EMPLOYEE_ID

2.1 Nếu bằng nhau thì gán v_check = 1 và thoát khỏi vòng lặp Ngược lại

qua bước 2.2

2.2 Nếu không bằng nhau thì tiếp tục lặp 3 Kiểm tra v_check

Trang 33

3.1 Nếu v_check khác 1 thì thông báo lỗi và kết thúc chương trình Ngược

lại thì qua bước 3.2

3.2 Thông báo hợp lệ và kết thúc chương trình 3.1.2.3 LOGIN_EMP_AUTO

1 Khai báo biến v_USERLOGIN_ID để lưu trữ giá thuộc tính USERLOGIN_ID

của nhân viên

2 Gán giá trị tiếp theo của chuỗi số LOGIN_EMPLOYEE_ID_AUTO cho biến

v_USERLOGIN_ID

3 Thêm một bản ghi vào bảng dữ liệu LOGIN_EMPLOYEE các giá trị

v_USERLOGIN_ID, mật khẩu(USERPASSWORD) mặc định, tên đăng nhập (USERNAME) chính là MAIL của nhân viên đó

4 Gán v_USERLOGIN_ID cho thuộc tính EMPLOYEE_ID trong bảng

EMPLOYEE

5 Xác nhận

Trang 34

3.1.3 Trigger trên bảng ORDER_DETAIL

Tên trigger: UPDATE_QUANTITY_PRODUCT

Thao tác: INSERT OR DELETE

Nội dung: Khi thêm hoặc xóa một chi tiết đơn hàng thì cập nhật lại số lượng hiện có của sản phẩm

Hình 3.1.5: trigger UPDATE_QUANTITY_PRODUCT

Các bước thực hiện:

1 Khai báo biến v_current_quantity để lưu số lượng hiện có của sản phẩm 2 Kiểm tra thao tác là INSERT hay DELETE

2.1 Nếu thao tác là INSERT thì thực hiện trừ số lượng sản phẩm hiện có

trong bảng PRODUCT với PRODUCT_ID tương ứng PRODUCT_ID trong bảng ORDER_DETAIL Sau đó gán số lượng sản phẩm hiện có cho biến

v_current_quantity Kiểm tra v_current_quantity

2.1.1 Nếu bé hơn 0 thì thông báo lỗi sản phẩm không đủ Ngược lại

qua bước 2.1.2

2.1.2 Thông báo thành công

2.2 Nếu thao tác là DELETE thì thực hiện cộng thêm vào số lượng sản

phẩm hiện có trong bảng PRODUCT với PRODUCT_ID tương ứng PRODUCT_ID trong bảng ORDER_DETAIL

Trang 35

3 Xác nhận

3.2 Các chương trình con được sử dụng trong hệ thống

• Một chương trình con chính là một khối lệnh PL/SQL được đặt tên và được gọi với một tập các đối số Nó được lưu trong cơ sở dữ liệu như các đối tượng cơ sở dữ liệu

• Một chương trình con có thể là một thủ tục (Procedure) hoặc là một hàm (Function)

• Các loại đối số trong chương trình con:

• Đối số IN: cho phép truyền giá trị tới chương trình con, nó hoạt động như một hằng số và không được gán giá trị trong một chương trình con Nó có thể được khởi tạo một giá trị mặc định

• Đối số OUT: trả về giá trị tới môi trường gọi nó Đối số này hoạt động như là một biến trong chương trình con Có thể thay đổi giá trị của nó và sử dụng giá trị này sau khi gán

• Đối số IN OUT: truyền giá trị khởi tạo tới chương trình con và trả về một giá trị mới cho môi trường gọi nó Đối số này phải là một biến, không được là hằng số hay một biểu thức

• Nếu không chỉ rõ thì mặc định trong Oracle là đối số IN

3.2.1 Stored Procedure

• Thường được sử dụng chủ yếu để thực hiện quy trình nhất định

• Gọi đến các Procedure có thể được thực hiện bằng cách đề cập đến tên của chúng • Nó chứa một phần khai báo (tùy chọn), phần thực thi, phần xử lý ngoại lệ (tùy

chọn)

• Các giá trị có thể được truyền vào hoặc lấy từ các thủ tục thông qua các tham số • Không thể được gọi trực tiếp từ câu lệnh SELECT, chúng có thể được gọi từ khối

khác

• Không bắt buộc trả về giá trị

• Thủ tục có thể có RETURN để trả lại quyền kiểm soát cho khối gọi nó, nhưng nó không thể trả về bất kỳ giá trị thông qua RETURN

Trang 36

• Cú pháp Procedure trong Oracle:

CREATE OR REPLACE PROCEDURE ten_thu_tuc (

Tham so truyen vao thu tuc

thamso1 IN/OUT/IN OUT <kieudulieu>, …

)

AS / IS

[khai_bao_bien ] BEGIN

Thuc thi cac cau lenh PL/SQL [EXCEPTION]

Xu ly ngoai le END;

Trang 37

Các bước thực hiện:

1 Dựa vào tham số IN i_MAIL để kiểm tra giá trị này đã tồn tại chưa Nếu chưa

tồn tại thì qua bước 2 Ngược lại qua bước 3

2 Tham số OUT v_MAIL có giá trị NULL được trả về cho chương trình gọi nó 3 Tham số OUT v_MAIL có giá trị khác NULL được trả về cho chương trình gọi

3.2.1.2 Thủ tục CUSTOMER_REGISTER

Nội dung: Khách hàng đăng kí tài khoản

Tham số đầu vào: i_FULLNAME, i_ADDRESS, i_PHONE, i_BIRTHDAY, i_MAIL, i_PASSWORD

Hình 3.2.2: Thủ tục CUSTOMER_REGISTER

Các bước thực hiện:

1 Khai báo biến v_USERLOGIN_ID để thêm ID đăng nhập vào bảng

LOGIN_CUSTOMER

2 Thêm thông tin đăng nhập của khách hàng vào bảng LOGIN_CUSTOMER

thông qua câu lệnh INSERT

3 Thêm thông tin khách hàng vào bảng CUSTOMER thông qua câu lệnh INSERT 4 Xác nhận

3.2.1.3 Thủ tục SHOW_PRODUCT

Nội dung: Hiển thị trên giao diện các sản phẩm để khách hàng mua hàng Tham số đầu vào: i_product_type

Trang 38

Tham số đầu ra: v_PRODUCT

Hình 3.2.3: Thủ tục SHOW_PRODUCT

Các bước thực hiện:

1 Tham số OUT v_PRODUCT được khai báo là kiểu con trỏ để truy xuất các sản

phẩm có thuộc tính PRODUCT_TYPE có giá trị là i_product_type Nếu chưa tồn tại thì qua bước 2 Ngược lại thì qua bước 3

2 Tham số OUT v_PRODUCT với giá trị NULL trả về cho chương trình gọi nó 3 Tham số OUT v_PRODUCT trả về cho chương trình gọi nó danh sách các sản

Trang 39

Hình 3.2.4: Thủ tục UPDATE_CART

Các bước thực hiện:

1 Kiểm tra xem giỏ hàng có ID là i_CART_ID có tồn tại không Nếu có thì qua

bước 2 Ngược lại qua bước 6

2 Lấy số lượng hiện có trong kho của sản phẩm đó trong giỏ hàng 3 Thực hiện việc tăng/giảm số lượng sản phẩm đang có của giỏ hàng đó

lên/xuống 1 đơn vị (số lượng muốn mua) và gán vào một biến

4 So sánh số lượng sản phẩm ở bước 3 và bước 2 Nếu số lượng muốn mua lớn

hơn số lượng hiện có thì thông báo lỗi và kết thúc Ngược lại qua bước 5

5 Thực hiện cập nhật số lượng sản phẩm đang có của giỏ hàng đó và xác nhận 6 Thông báo không tồn tại và kết thúc

Trang 40

Hình 3.2.5: Thủ tục UPDATE_VALUE_QUANTITY_OF_CART

Các bước thực hiện:

1 Kiểm tra xem giỏ hàng có ID là i_CART_ID có tồn tại không Nếu có thì qua

bước 2 Ngược lại qua bước 5

2 Lấy số lượng hiện có trong kho của sản phẩm đó trong giỏ hàng

3 So sánh số lượng hiện có trong kho và số lượng muốn mua (tham số IN

i_QUANTITY) Nếu số lượng muốn mua lớn hơn số lượng hiện có thì thông báo lỗi và kết thúc Ngược lại qua bước 4

4 Thực hiện cập nhật số lượng sản phẩm đang có của giỏ hàng đó và xác nhận 5 Thông báo không tồn tại và kết thúc

Ngày đăng: 16/06/2024, 16:09