Hệ thống cần đảm bảo tính bảo mật, phân quyền rõ ràng. Người sử dụng chỉ được thao tác trên các chức năng mà mình có quyền. Ví dụ: chỉ có quản trị viên mới được quyền tạo tài khoản nhân viên, chỉ có nhân viên hoặc quản trị viên mới có quyền huỷ, xác nhận đơn hàng trên hệ thống, …
Giao diện tương tác cần rõ ràng, nhất quán. Ví dụ: khi người dùng đặt mua hàng, thông tin sản phẩm rõ ràng, phù hợp, …
CHƯƠNG 4: THIẾT KẾ HỆ THỐNG VÀ THUẬT TOÁN 4.1.! Kiến trúc hệ thống
Hình 4.1: kiến trúc mô hình của hệ thống
Hình 4.1 là mô hình kiến trúc tổng hợp của hệ thống, hệ thống được thiết kế hoạt động theo mô hình MVC (Model – View – Controller).
Mô hình MVC là một mô hình thiết kế được sử dụng trong kỹ thuật phần mềm. Nó đóng vai trò quan trong trong quá trình xây dựng, phát triển, vận hành, bảo trì một hệ thống hay một ứng dụng phần mềm. Mô hình MVC là một mô hình gồm 3 lớp: Model (dữ liệu), View (giao diện) và Controller (bộ điều khiển), mỗi lớp sẽ thực hiện những nhiệm vụ riêng và độc lập với những lớp khác.
¥! Model là nơi chứa tất cả các nghiệp vụ tương tác với dữ liệu hoặc hệ quản trị cơ sở dữ liệu. Nó bao gồm các class hoặc các hàm xử lý nhiều nghiệp vụ như kết nối database, truy vấn dữ liệu, thêm, xoá, sửa dữ liệu, …
¥! View sẽ đảm nhận nhiệm vụ hiển thị dữ liệu, giúp người dùng tương tác với hệ thống. View là nơi chứa tất cả các file HTML, các form, image, …
¥! Controller là nơi tiếp nhận và điều hướng những yêu cầu từ phía người dùng, bao gồm các class hoặc các hàm xử lý yêu cầu giúp lấy đúng dữ liệu từ Model và trà kết quả về cho người dùng thông qua View.
Khi người dùng truy cập vào website của chúng ta, trình duyệt sẽ gửi request lên web server. Khi request được gửi đến web server, nó sẽ thông qua bộ định tuyến (router) để phân tích và xác định các yêu cầu được gửi tới web server để rồi xác định các response trả về tương ứng. Router sẽ thông qua dispatcher để gọi các response trả về cho trình duyệt thông qua controller.
Controller đóng vai trò trung gian điều khiển model để lấy dữ liệu trong cơ sở dữ liệu, điều khiển view để lấy các thông tin hiển thị để hiện thị nội dung được lấy từ model. Ngoài ra, controller còn thực hiện chức năng gọi API của paypal để phục vụ cho quá trình thanh toán online khi người dùng đặt hàng và chọn hình thức thanh toán trực tiếp, cũng như gọi API của facebook chatbot để gửi, nhận tin nhắn khi người dùng trò chuyện với chatbot.
Model có thể lấy dữ liệu theo 2 cách: hoặc là truy vấn trực tiếp dữ liệu trong database, hoặc là sẽ thông qua mô hình phân hệ gợi ý với các dữ liệu đầu vào cụ thể để trả về thông tin phù hợp nhất với thông tin đang được yêu cầu.
Ta sẽ sử dụng cơ sở dữ liệu MySQL để lưu trữ dữ liệu cho hệ thống.
Tiếp theo, ta sẽ bắt đầu xây dựng mô hình EERD để thiết kế cơ sở dữ liệu cho hệ thống.
4.2.! Thiết kế cơ sở dữ liệu
4.2.1.!Mô hình thực thể liên kết – EERD
Hệ thống website được thiết kế để phục vụ doanh nghiệp trong quá trình kinh doanh các sản phẩm thương mại điện tử, đồng thời hỗ trợ người dùng đặt mua hàng qua mạng một cách thuận lợi nhất bằng nhiều cách thức khác nhau.
Website được thiết kế cho nhiều đối tượng người sử dụng khác nhau, bao gồm: người dùng có tài khoản(người dùng), người dùng với tư cách khách(khách), nhân viên, quản trị viên.
thống, trước tiên ta cần phải lưu trữ thông tin về các sản phẩm để hệ thống đó thể truy xuất và hiển thị lên website, mỗi sản phẩm đều có id sản phẩm khác nhau, hệ thống cần lưu trữ các thông tin về sản phẩm như: loại sản phẩm(điện thoại, máy tính bảng, laptop, đồng hồ thông minh), tên sản phẩm, hãng (apple, samsung, …), toàn bộ thông tin cấu hình sản phẩm, tên hình của sản phẩm để hiển thị, bên cạnh đó, ta cần tạo thêm một trường lưu trữ nhiều hình ảnh mô tả chi tiết hơn nữa về sản phẩm, giá sản phẩm.
Để có thể đặt mua hàng trên hệ thống, người sử dụng cần tạo tài khoản để hệ thống có thể sử dụng thông tin của người dùng để khởi tạo đơn hàng. Vì vậy, ta cần khởi tạo cơ sở dữ liệu lưu trữ thông tin tài khoản người dùng.
Mỗi khi người dùng tạo tài khoản, hệ thống sẽ tự động sinh ra id của người dùng, giá trị id này là phân biệt đối với mỗi người dùng khác nhau. Tài khoản người dùng cần lưu trữ các thông tin: họ tên, email người dùng, số điện thoại, địa chỉ, vai trò của người dùng. Bên cạnh đó, ngoài việc lưu trữ thông tin người dùng, cơ sở dữ liệu tài khoản người dùng này còn dùng để lưu trữ thông tin tài khoản của nhân viên, tài khoản nhân viên sẽ do quản trị viên tạo. Cơ sở dữ liệu này sẽ phân biệt người dùng hoặc nhân viên thông qua thông tin vai trò được lưu trong bảng.
Đối với tính năng đặt hàng trên hệ thống website, hệ thống có hỗ trợ đặt hàng trên hệ thống và đặt hàng trên chatbot. Đối với đặt hàng trên hệ thống thì yêu cầu người dùng phải đăng nhập. Đối với đặt hàng qua chatbot thì không nhất thiết phải đăng nhập. Khi đặt hàng bằng cả 2 phương thức này thì hệ thống sẽ cần phải lưu trữ thông tin đơn hàng trên cơ sở dữ liệu. Vì vậy ta cần phải tạo cơ sở dữ liệu lưu trữ thông tin đơn hàng. Mỗi đơn hàng sẽ được định danh bằng một mã đơn hàng có 20 ký tự, mã đơn hàng này là duy nhất đối với mỗi đơn hàng, mỗi đơn hàng có thể có một hoặc nhiều sản phẩm. Mỗi đơn hàng sẽ lưu trữ các thông tin như sau: Mã đơn hàng, tên người đặt hàng, email đặt hàng, số điện thoại, danh sách sản phẩm, địa chỉ nhận hàng, tình trạng đơn hàng, thời gian đặt hàng, phương thức thanh toán.
Yêu cầu quan trọng nhất của hệ thống website là website phải có khả năng gợi ý sản phẩm cho người dùng cũng như tìm ra danh sách các sản phẩm phổ biến mà giới thiệu cho người dùng. Để có thể gợi ý sản phẩm cho người dùng, ta cần phải lưu trữ thông tin lịch sử tương tác của người dùng với sản phẩm.
Đối với những người dùng khách hay những người dùng mới tạo tài khoản thì không có lịch sử tương tác, vì vậy ta sẽ gợi ý dựa trên mức độ phổ biến của sản phẩm. Ta sẽ tiến hành tạo cơ sở dữ liệu để lưu trữ thông tin về số lượt xem của sản phẩm, cơ sở dữ liệu này sẽ có các trường thông tin như sau: id sản phẩm và số lượt xem, trong đó id sản phẩm phải khớp với id sản phẩm này phải khớp với id của sản phẩm trong cơ sở dữ liệu sản phẩm.
Đối với người dùng cụ thể, ta sẽ dựa vào lịch sử tương tác của họ để xem xét độ tương quan về sở thích với các người dùng khác để đưa ra gợi ý. Vì vậy ta sẽ phải lưu trữ lượt xem của từng người dùng cụ thể này. Ta cần tạo cơ sở dữ liệu và lưu trữ các trường thông tin như sau: id người dùng, email người dùng, id sản phẩm, số lượt xem của sản phẩm đó. Dữ liệu phải đảm bảo id người dùng phải khớp với id người dùng trong bảng tài khoản người dùng, id sản phẩm phải khớp với id của sản phẩm trong bảng danh sách sản phẩm.
Đối với website này, quản trị viên sẽ kiểm soát thông tin thống kê về việc tương tác của khách hàng với sản phẩm, đặc biệt là kiểm tra mức độ hiệu quả của phân hệ gợi ý. Hệ thống website chúng ta có 2 mô hình phân hệ gợi ý chính là gợi ý theo người dùng, và gợi ý sản phẩm liên quan theo 1 sản phẩm cụ thể nào đó. Ta cần tạo lập thêm cơ sở dữ liệu để lưu trữ lịch sử tương tác của người dùng với các sản phẩm trên hệ thống để từ đó tính toán ra mức độ hiệu quả của phân hệ gợi ý.
Vì có 2 mô hình phân hệ gợi ý nên ta cần có 2 bảng nhật ký lưu trữ lịch sử tương tác của người dùng với sản phẩm. Khi người dùng tương tác với mọi sản phẩm được gửi tới người dùng thông qua phân hệ gợi ý, mọi thông tin đều được lưu trữ trong 2 bản nhật ký này. Đối với mỗi bảng nhật ký, ta sẽ lưu trữ 2 trường thông tin là: mã phiên tương tác và lịch sử tương tác.
Đây là toàn bộ đặc tả về nghiệp vụ lưu trữ dữ liệu của hệ thống website. Bây giờ ta sẽ tiến hành vẽ ra mô hình thực thể liên kết của cơ sở dữ liệu trong hệ thống của chúng ta:
Hình 4.2: mô hình EERD
Thực thể Tài khoản đại diện cho những người dùng có thông tin tài khoản tồn
tại trên hệ thống, bao gồm Tài khoản người dùng dành cho người dùng tự tạo tài khoản trên website, Tài khoản nhân viên dành cho tài khoản nhân viên được quản trị viên tạo ra.
Thực thể Khách đại diện cho những người dùng truy cập với tư cách
khách(không có tài khoản hệ thống). Khách có các chức năng: tạo tài khoản người dùng, đặt hàng trên chatbot.
Những người dùng có thông tin tài khoản tồn tại trên hệ thống(Thực thể Tài khoản) vẫn có thể đặt mua hàng trên chatbot. Hơn nữa có thể đặt hàng trên hệ thống.
Chỉ những người dùng có tài khoản nhân viên (Thực thể Tài khoản nhân viên) mới có thể Xác nhận, Xem thông tin đơn hàng.
Thực thể Quản trị viên đại diện cho những người dùng là quản trị viên của hệ
thống. Quản trị viên có thể Xem, Xoá thông tin tài khoản của người dùng cũng như nhân viên(Thực thể Tài khoản).
Quản trị viên có thể Tạo, Xoá, Sửa thông tin sản phẩm(Thực thể Sản phẩm). Quản trị viên cũng là người nắm rõ thông tin về lịch sử tương tác của các sản phẩm gợi ý (Thực thể Lịch sử tương tác sản phẩm gợi ý).
Thực thể Lịch sử tương tác sản phẩm gợi ý dùng để lưu trữ thông tin tương tác của người dùng khi người dùng tương tác với các sản phẩm mà phân hệ gợi ý đã gợi ý ra cho người dùng. Có 2 loại phân hệ gợi ý là: gợi ý theo người dùng(Thực thể Sản phẩm gợi ý theo người dùng) và gợi ý theo sản phẩm(Thực thể Sản phẩm gợi ý theo sản phẩm).
Thực thể Đơn hàng đại diện cho thông tin của đơn hàng mà người dùng đã đặt hàng. Một đơn hàng có thể có 1 hoặc nhiều sản phẩm(Thực thể Sản phẩm).
Thực thể Sản phẩm đại diện cho thông tin sản phẩm tồn tại trên hệ thống. Mỗi sản phẩm đều sẽ có số lượt xem của khách đại diện cho số lượng người dùng truy cập vào sản phẩm này(Thực thể Lượt xem của khách), và số lượt xem của một người dùng cụ thể đối với một sản phẩm cụ thể nào đó(Thực thể Lượt xem).
Thực thể yếu Lượt xem của khách đại diện cho số lượng tương tác của người
dùng với các sản phẩm của hệ thống, được sử dụng để gợi ý những sản phẩm phổ biến, được xem nhiều nhất cho người dùng.
Thực thể Lượt xem đại diện cho số lượng tương tác của người dùng xác định với các sản phẩm của hệ thống, được sử dụng để gợi ý sản phẩm theo từng người dùng xác định.
4.2.2.!Ánh xạ sang mô hình dữ liệu quan hệ Thuộc tính Kiểu dữ liệu Mô tả, ví dụ Thuộc tính Kiểu dữ liệu Mô tả, ví dụ
id_nguoi_dung int(11) Giá trị duy nhất, ví dụ: 18, 19, …
email_nguoidung text Lưu trữ địa chỉ email của người dùng, ví dụ:
thinh.nguyen0908117036@hcmut.edu.vn, … matkhaunguoidung text Mật khẩu đã được mã hoá
ho_ten_nguoi_dung text Ví dụ: Nguyễn Bửu Thịnh so_dien_thoai varchar(10) Ví dụ: 0908117036
dia_chi text Ví dụ: 268 Lý Thường Kiệt, quận 10 vai_tro int(11) 1: nhân viên, 2: người dùng
Bảng 4.1: bảng tai_khoan_nguoi_dung
Bảng tai_khoan_nguoi_dung sẽ lưu trữ thông tin về tài khoản của người dùng khi người dùng tạo tài khoản và tài khoản nhân viên do quản trị viên tạo.
Bảng có id_nguoi_dung làm khoá chính, tự động tăng.
Thuộc tính Kiểu dữ liệu Mô tả, ví dụ
id int(11) Mã sản phẩm, giá trị duy nhất, ví dụ: 1, 2, … loai_sp text Ví dụ: Điện thoại, Máy tính bảng, …
ten_sp text Ví dụ: Apple MacBook Pro M1
hang text Ví dụ: Apple
mo_ta_sp Text Lưu trữ mô tả sản phẩm
cau_hinh_sp text Lưu trữ toàn bộ thông tin cấu hình sản phẩm ten_hinh_sp int(11) Lưu trữ tên hình chính của sản phẩm
gia_sp int(11) Giá sản phẩm. Ví dụ: 31990000
hinh_sp_chitiet text Lưu trữ thông tin hình sản phẩm chi tiết
Bảng 4.2: bảng san_pham
Bảng san_pham sẽ lưu trữ thông tin danh sách các sản phẩm trên hệ thống. Bảng san_pham có 1 khoá chính là id, giá trị này là duy nhất, tự động tăng.
Thuộc tính Kiểu dữ liệu Mô tả, ví dụ
id_admin int(11) Giá trị duy nhất, ví dụ: 18, 19, …
email_admin text Lưu trữ địa chỉ email của người dùng, ví dụ:
thinh.nguyen0908117036@hcmut.edu.vn, … matkhauqtv text Mật khẩu đã được mã hoá
ho_ten_qtv text Ví dụ: Nguyễn Bửu Thịnh so_dien_thoai varchar(10) Ví dụ: 0908117036
dia_chi text Ví dụ: 268 Lý Thường Kiệt, quận 10
Bảng 4.3: bảng quan_tri_vien
Bảng quan_tri_vien có 1 khoá chính là id, giá trị này là duy nhất, tự động tăng.
Thuộc tính Kiểu dữ liệu Mô tả, ví dụ
ma_don_hang varchar(20) Ví dụ: AxJdt1fvxcAAActHHHNJ ten_nguoi_dat_hang text Ví dụ: Nguyễn Bửu Thịnh
email_dat_hang text Lưu trữ email của tài khoản đặt hàng. Ví dụ:
thinh.nguyen0908117036@hcmut.edu.vn
so_dien_thoai varchar(10) Ví dụ: 0908117036 danh_sach_san_pham text Lưu trữ dạng file JSON
dia_chi_nhan_hang text Ví dụ: 268 Lý Thường Kiệt, quận 10 tinhtrang int(11) -1: đã huỷ, 0: chưa xác nhận, … thoigian text Ví dụ: 1623822022218
phuong_thuc_thanh_toan text Tiền mặt hoặc Paypal
Bảng 4.4: bảng don_hang
Bảng don_hang sẽ lưu trữ thông tin các đơn đặt hàng mà người dùng đặt hàng. Bảng don_hang có một khoá chính là ma_don_hang, kiểu varchar có 20 ký tự, mỗi đơn hàng khác nhau sẽ có ma_don_hang khác nhau.
Thuộc tính Kiểu dữ liệu Mô tả, ví dụ
id_nguoi_dung int(11) Giá trị khoá ngoại tham khảo đến id_nguoi_dung trong tai_khoan_nguoi_dung email_reset text Email cần reset mật khẩu
reset_code text 10 ký tự. Ví dụ: abcDFE1ACF
Bảng 4.5: bảng reset_password
Bảng reset_password này là phương tiện để người dùng có thể thay đổi mật khẩu trong trường hợp người dùng quên mật khẩu, mỗi lần người dùng quên mật khẩu và tiến hành thay đổi mật khẩu thì hệ thống sẽ tạo mã OTP và lưu trữ trong bảng này, khi người dùng đổi lại mật khẩu, hệ thống sẽ xác minh nếu mã OTP phù hợp sẽ cho phép thay đổi mật khẩu.
Bảng reset_password có 1 khoá ngoại id_nguoi_dung tham khảo đến khoá chính id_nguoi_dung trong bảng tai_khoan_nguoi_dung.
Thuộc tính Kiểu dữ liệu Mô tả
id_nguoi_dung int(11) id_nguoi_dung tham khảo đến id_nguoi_dung trong tai_khoan_nguoi_dung
email_nguoidung text Email người dùng.
id_sanpham int(11) id_sanphamtham khảo đến id của san_pham so_luot_xem int(11) Ví dụ: 10, 50, …
Bảng luot_xem này sẽ lưu trữ thông tin về số lượt xem của người dùng xác định với các sản phẩm của hệ thống, phục vụ cho việc gợi ý sản phẩm cho từng người dùng khác nhau.
Khoá ngoại id_nguoi_dung tham khảo đến id_nguoi_dung trong bảng tai_khoan_nguoi_dung.
Khoá ngoại id_sanpham tham khảo đến id trong bảng san_pham.
Thuộc tính Kiểu dữ liệu Mô tả
id_sp int(11) id_sp tham khảo đến id trong san_pham so_lan_xem int(11) Ví dụ: 10, 50, …
Bảng 4.7: bảng luot_xem_cua_khach
Bảng luot_xem_cua_khach sẽ lưu trữ thông tin số lượt xem của tất cả người dùng khi người dùng xem sản phẩm.
Bảng luot_xem_cua_khach có 1 khoá ngoại id_sp tham khảo đến khoá chính id trong bảng san_pham.
Thuộc tính Kiểu dữ liệu Mô tả
ma_phien text Chuỗi 10 ký tự. Ví dụ: abcdefghij
lich_su_tuong_tac text Lưu trữ lịch sử tương tác dạng file JSON
Bảng 4.8: bảng nhat_ky
Bảng nhat_ky lưu trữ thông tin tương tác của của người dùng khi người dùng tương tác với các sản phẩm liên quan theo sản phẩm, những sản phẩm giới thiệu với người dùng thông qua phân hệ gợi ý. Thông tin này được sử dụng trong việc đánh giá mức độ hiệu quả của phân hệ gợi ý.
Thuộc tính Kiểu dữ liệu Mô tả
ma_phien text Chuỗi 10 ký tự. Ví dụ: abcdefghij