Bối cảnh và vấn đề nghiên cứu

Đề tài được thực hiện trong bối cảnh các chuỗi cửa hàng thực phẩm tại Việt Nam ngày càng mở rộng với nhiều chi nhánh phân tán ở các địa điểm khác nhau. Khi số lượng nhân viên, khách hàng và đơn hàng tăng nhanh theo từng năm, các hệ thống quản lý dựa trên cơ sở dữ liệu tập trung truyền thống không còn đáp ứng được yêu cầu về tốc độ truy xuất và độ ổn định vận hành.

Nhóm tác giả xác định ba nhiệm vụ cụ thể cho dự án:

  1. Phân tích nhu cầu quản lý của chuỗi cửa hàng thực phẩm ABC và lý do cần chuyển sang mô hình cơ sở dữ liệu phân tán (CSDLPT).
  2. Thiết kế kiến trúc CSDLPT hoàn chỉnh gồm thiết kế phân mảnh (ngang, dọc, dẫn xuất), thiết kế định vị và chiến lược đồng bộ hóa.
  3. Triển khai thực tế hệ thống trên SQL Server 2022 với 1 máy chủ và 8 máy trạm, bao gồm cấu hình mạng, nhân bản dữ liệu (replication) và các trigger kiểm soát tính toàn vẹn.

Phạm vi triển khai bao gồm 9 vị trí địa lý tại Hà Nội: trụ sở chính đặt tại Hà Đông (máy chủ tổng) và 8 chi nhánh tại Hoàng Mai, Cầu Giấy, Ba Đình, Thanh Oai, Hoàn Kiếm, Thanh Xuân, Ba Vì và Đống Đa. Dự án được thực hiện vào tháng 5/2024, thuộc môn học Cơ Sở Dữ Liệu Phân Tán, Học viện Công nghệ Bưu chính Viễn thông, Khoa Công nghệ Thông tin.


Cơ sở lý thuyết và phương pháp

Nhóm áp dụng các khái niệm nền tảng của hệ quản trị cơ sở dữ liệu phân tán, bao gồm:

  • Phân mảnh ngang nguyên thủy (horizontal fragmentation): Chia bảng CuaHang theo điều kiện id_ch tương ứng với từng chi nhánh (CH002 đến CH009).
  • Phân mảnh ngang dẫn xuất (derived horizontal fragmentation): Các bảng phụ thuộc như NhanVien, DonHang, DonHangChiTiet, KhachHang, CungCap, SanPham, NhaCungCap được phân mảnh dựa trên mảnh CuaHang tương ứng thông qua phép semi-join.
  • Phân mảnh dọc (vertical fragmentation): Chi nhánh Cầu Giấy được thiết kế riêng để chứa các cột chọn lọc từ các bảng NhanVien, SanPham, DonHang, DonHangChiTiet, KhachHang của toàn hệ thống phục vụ thống kê doanh thu.
  • Kiến trúc Client/Server: Máy chủ tại Hà Đông là Data Server và Application Server trung tâm; các máy trạm chi nhánh đóng vai trò Client.
  • Nhân bản dữ liệu (Replication): Sử dụng hai loại là Transactional Replication (cho bảng DanhMuc từ máy chủ xuống các trạm) và Merge Replication (cho các bảng nghiệp vụ giữa máy chủ và từng chi nhánh).

Phương pháp thiết kế hệ thống bao gồm phân tích E-R, xây dựng lược đồ quan hệ, lập bảng tần suất truy cập tại các vị trí (ký hiệu H: tần suất cao, L: tần suất thấp; W: ghi, E: sửa, D: xóa, R: đọc), từ đó làm cơ sở cho quyết định phân mảnh và định vị dữ liệu.

Nguồn dữ liệu trong dự án là dữ liệu mẫu được nhập trực tiếp vào hệ thống SQL Server 2022 trong quá trình triển khai thực nghiệm.


Nội dung chính theo từng chương

Chương I — Đặt vấn đề

Nhóm trình bày nhu cầu thực tiễn của bài toán quản lý chuỗi cửa hàng thực phẩm ABC: với khối lượng dữ liệu lớn và ngày càng tăng trên nhiều chi nhánh địa lý, hệ thống tập trung không thể đảm bảo thời gian truy xuất và tính sẵn sàng. Dự án được triển khai với 1 vùng quản lý tại 8 vùng xử lý (9 nút mạng). Chương này cũng xác định rõ ba nhóm đối tượng sử dụng và phân quyền tương ứng:

Đối tượng Quyền chính
Nhân viên cửa hàng Xem/sửa thông tin cá nhân, tạo/xem đơn hàng, cập nhật số lượng sản phẩm và thông tin khách hàng
Quản lý cửa hàng Toàn bộ quyền nhân viên + thêm/sửa/xóa nhân viên, thống kê sản phẩm, nhân viên, khách hàng, đơn hàng
Nhân viên máy chủ (quản lý tổng) Tất cả quyền + xem báo cáo thống kê toàn hệ thống

Đặc điểm riêng của chi nhánh Cầu Giấy được nêu rõ: đây là trạm chuyên thống kê doanh thu, nhận dữ liệu từ tất cả các chi nhánh khác, không thuộc loại máy trạm nghiệp vụ thông thường.

Chương II — Phân tích, Thiết kế

Phân tích CSDL: Lược đồ E-R mô tả 8 thực thể chính: CuaHang, NhanVien, KhachHang, NhaCungCap, DanhMuc, SanPham, DonHang, DonHangChiTiet, và hai quan hệ liên kết CungCap (giữa SanPham và CuaHang) và DonHangChiTiet (giữa DonHang và SanPham). Các thuộc tính sử dụng kiểu dữ liệu NCHAR/NVARCHAR cho trường mã định danh và văn bản; INT cho giá trị số lượng và giá tiền.

Bảng tần suất truy cập được lập cho từng thực thể tại hai vị trí (trụ sở chính và các trạm). Kết quả phân tích: bảng DonHang và DonHangChiTiet có tần suất đọc/ghi/sửa/xóa cao ở cả hai vị trí; bảng CuaHang, NhaCungCap, DanhMuc chỉ cho phép đọc (tần suất cao) tại máy trạm, quyền ghi/sửa/xóa chỉ thuộc máy chủ.

Thiết kế phân mảnh: 7 mảnh ngang nguyên thủy từ bảng CuaHang được đặt tại 7 chi nhánh (Hoàng Mai CH002, Ba Đình CH004, Thanh Oai CH005, Hoàn Kiếm CH006, Thanh Xuân CH007, Ba Vì CH008, Đống Đa CH009). Từ mỗi mảnh CuaHang, các mảnh dẫn xuất được tạo cho CungCap, SanPham, NhaCungCap, NhanVien, DonHang, DonHangChiTiet, KhachHang bằng phép semi-join tương ứng. Phân mảnh dọc tại Cầu Giấy chỉ giữ lại các cột cần thiết cho phân tích doanh thu: NhanVien(id_nv, id_ql, id_ch, ten_nv), SanPham(id_sp, id_ncc, ten_sp, gianhap_sp, giaban_sp, id_dm), DonHang(id_dh, id_kh, id_nv, ngay_dat), DonHangChiTiet, KhachHang(id_kh, ten_kh).

Thiết kế định vị: Máy chủ Hà Đông lưu toàn bộ dữ liệu. Mỗi máy trạm chi nhánh lưu dữ liệu của chính chi nhánh đó. Máy trạm Cầu Giấy lưu dữ liệu phân mảnh dọc từ tất cả chi nhánh còn lại.

Đồng bộ hóa: Bảng DanhMuc được đồng bộ từ máy chủ xuống các trạm mỗi khi có thay đổi. Dữ liệu tại máy trạm (CuaHang, SanPham, NhanVien, DonHang, v.v.) được đồng bộ ngược về máy chủ. Khoảng trễ cập nhật từ máy cửa hàng về máy chủ là 20–60 giây tùy tốc độ mạng.

Chương III — Cài đặt

Chương này trình bày toàn bộ quy trình triển khai kỹ thuật theo thứ tự:

  • Cài đặt SQL Server 2022 bản Developer với named instance CSDLPTNHOM6.
  • Cài đặt SQL Server Management Studio (SSMS) phiên bản 20.
  • Cấu hình tường lửa (Windows Defender Firewall): mở port TCP 1433 (cho SQL Server), cổng UDP 1434 (cho SQL Browser), và thêm inbound rule cho file thực thi sqlservr.exe.
  • Kết nối các máy trạm qua VPN E200 để tạo mạng nội bộ ảo giữa các chi nhánh.
  • Chuẩn bị thư mục REPLDATA tại ổ C:\ dùng làm snapshot folder, chia sẻ quyền Read/Write cho tài khoản Everyone.
  • Bật TCP/IP trong SQL Server Configuration Manager, thêm địa chỉ IP các máy trạm, thiết lập cổng TCP 1433 tại mục IPALL.
  • Tạo tài khoản sa, cơ sở dữ liệu ABC_Store, sau đó thực hiện phân tán từ máy chủ đến các máy trạm.
  • Tạo tài khoản remote login (ví dụ: HTKN) với xác thực SQL Server, cấp quyền db_owner trên database tương ứng.
  • Tạo Linked Server kết nối trực tiếp giữa các máy trạm, bật tùy chọn RPC và RPC Out = True.

Transactional Replication được tạo cho bảng DanhMuc (publication DanhMuc) sử dụng tài khoản sa / 123456, chạy Snapshot Agent và Log Reader Agent dưới SQL Server Agent service account.

Merge Replication được tạo cho từng chi nhánh (ví dụ publication ABC_Store_CH005), chọn các bảng nghiệp vụ cần phân tán, thiết lập bộ lọc ngang theo điều kiện id_ch = 'CH005', sau đó tạo subscription về các máy trạm tương ứng với chế độ đồng bộ liên tục (Run continuously).

Chương VI — Trigger

Nhóm xây dựng 9 trigger kiểm soát tính toàn vẹn dữ liệu tại máy trạm:

  1. update_NV — Kiểm tra mã nhân viên phải có định dạng NV% và chưa tồn tại trên Linked Server (LINK32.NhanVien).
  2. update_SanPham — Kiểm tra mã sản phẩm định dạng SP% và nhà cung cấp phải tồn tại trong bảng NhaCungCap.
  3. update_nhacungcap — Kiểm tra mã nhà cung cấp định dạng NCC%.
  4. update_cungcap — Kiểm tra mã cung cấp định dạng CC%.
  5. update_khachHang — Kiểm tra mã khách hàng định dạng KH%.
  6. update_donHang — Kiểm tra mã đơn hàng định dạng DH%.
  7. update_dhct — Kiểm tra mã đơn hàng chi tiết định dạng DHCT%.
  8. no_insert_delete — Ngăn hoàn toàn mọi thao tác INSERT và DELETE trên bảng CuaHang tại máy trạm.
  9. no_insert_update_delete_1 — Ngăn INSERT, UPDATE và DELETE trên bảng DanhMuc tại máy trạm.

Chương VII — Stored Procedures

Ba stored procedure thống kê được tạo tại máy chủ tổng:

  1. TONGSONHANVIEN — Thống kê số nhân viên của mỗi cửa hàng, kết quả cho thấy các chi nhánh ABC_01 đến ABC_10 có từ 1 đến 3 nhân viên.
  2. TONGSOKHACHHANG — Thống kê số lượng khách hàng của từng cửa hàng.
  3. TONGSODONHANG — Thống kê số lượng đơn hàng tại từng trụ sở.

Thiết kế và triển khai

Kiến trúc hệ thống: Client/Server với 1 Data Server + Application Server trung tâm (Hà Đông) và 8 Client server chi nhánh. Luồng dữ liệu hai chiều: máy trạm gửi dữ liệu nghiệp vụ về máy chủ; máy chủ nhân bản DanhMuc xuống các trạm.

Công nghệ sử dụng:

  • SQL Server 2022 Developer Edition, named instance CSDLPTNHOM6
  • SQL Server Management Studio (SSMS) Release 20
  • SQL Server Replication (Transactional + Merge)
  • VPN E200 để kết nối mạng giữa các chi nhánh
  • Windows Defender Firewall với inbound rules cho port TCP 1433, UDP 1434 và sqlservr.exe
  • Linked Server với RPC enabled để truy vấn chéo giữa các trạm

Kiểm tra: Các trigger được kiểm thử bằng cách chèn dữ liệu sai định dạng (ví dụ mã Nxx29 thay vì NV040) và dữ liệu đúng định dạng, xác nhận thông báo lỗi raiserror và rollback transaction hoạt động đúng; đồng thời xác nhận dữ liệu hợp lệ được chèn thành công kèm thông báo xác nhận.


Kết quả và đóng góp

Kết quả chính của dự án:

  • Hệ thống CSDLPT hoạt động với 1 máy chủ tại Hà Đông và 8 máy trạm chi nhánh, kết nối qua VPN.
  • 7 mảnh ngang dẫn xuất được triển khai thành công tại 7 chi nhánh (CH002, CH004–CH009); 1 phân mảnh dọc tại Cầu Giấy phục vụ thống kê.
  • Cơ chế nhân bản Merge Replication với tên publication theo từng chi nhánh (ABC_Store_CH004 đến ABC_Store_CH009, ABC_Store_Doc) được xác nhận hoạt động, kết quả phân mảnh hiển thị trong Local Publications của SSMS.
  • 9 trigger đảm bảo tính toàn vẹn dữ liệu với cơ chế kiểm tra định dạng mã và ngăn chặn thao tác không được phép.
  • 3 stored procedure thống kê vận hành đúng, trả về kết quả số liệu nhân viên, khách hàng, đơn hàng theo từng chi nhánh.
  • Dữ liệu cập nhật từ máy trạm về máy chủ trong khoảng 20–60 giây.

Giá trị kinh tế được nêu trong văn bản: mặc dù chi phí xây dựng cao, hệ thống giúp tiết kiệm chi phí bảo trì, giảm thời gian truy xuất dữ liệu và cho phép mở rộng chi nhánh mà không cần dừng hoạt động toàn hệ thống.


Hạn chế và hướng nghiên cứu tiếp

Văn bản không trình bày mục hạn chế hoặc hướng mở một cách tường minh. Căn cứ vào phạm vi triển khai, có thể nhận thấy một số giới hạn thực tế:

  • Hệ thống phụ thuộc vào VPN E200 để kết nối các chi nhánh; độ trễ đồng bộ 20–60 giây có thể không đáp ứng được yêu cầu thời gian thực trong điều kiện mạng kém.
  • Dữ liệu thử nghiệm là dữ liệu mẫu do nhóm tự nhập, chưa được kiểm thử với khối lượng dữ liệu lớn trong môi trường sản xuất thực tế.
  • Chưa có kịch bản xử lý xung đột dữ liệu (conflict resolution) chi tiết trong Merge Replication ngoài mặc định theo độ ưu tiên server (priority 75.00).

Giá trị tham khảo

Tài liệu phù hợp cho các đối tượng sau:

  • Sinh viên ngành Công nghệ Thông tin học môn Cơ Sở Dữ Liệu Phân Tán, đặc biệt cần tham khảo phần thiết kế phân mảnh ngang dẫn xuất với điều kiện semi-join cụ thể và phần lập bảng tần suất truy cập theo vị trí.
  • Sinh viên làm bài tập lớn hoặc đồ án về SQL Server Replication, có thể tham khảo quy trình cài đặt Transactional và Merge Replication từng bước với hướng dẫn kèm ảnh chụp màn hình chi tiết.
  • Người cần triển khai hệ thống đa chi nhánh sử dụng SQL Server 2022 có thể tham khảo cách cấu hình tường lửa, Linked Server, VPN và phân quyền người dùng từ xa.
  • Phần trigger kiểm tra định dạng mã kết hợp kiểm tra trùng lặp qua Linked Server là ví dụ thực tế hữu ích cho việc đảm bảo tính toàn vẹn trong môi trường phân tán.

Câu hỏi thường gặp

1. Hệ thống sử dụng kiến trúc phân tán loại nào và cơ sở để chọn? Hệ thống sử dụng kiến trúc Client/Server với 1 Data Server trung tâm tại Hà Đông và 8 Client server chi nhánh. Lý do là máy chủ tổng cần nắm toàn bộ dữ liệu để phân quyền và tổng hợp báo cáo, trong khi các máy trạm chỉ cần dữ liệu của chi nhánh mình.

2. Chi nhánh Cầu Giấy có vai trò khác gì so với các chi nhánh còn lại? Cầu Giấy là trạm duy nhất áp dụng phân mảnh dọc: chỉ lưu các cột cần thiết cho phân tích doanh thu (NhanVien, SanPham, DonHang, DonHangChiTiet, KhachHang) của tất cả các chi nhánh khác, không quản lý nghiệp vụ bán hàng trực tiếp.

3. Cơ chế nào ngăn máy trạm sửa hoặc xóa dữ liệu bảng DanhMuc và CuaHang? Hai trigger no_insert_delete và no_insert_update_delete_1 được tạo trực tiếp trên các bảng này tại máy trạm, thực hiện ROLLBACK TRANSACTION và RAISERROR ngay khi phát hiện thao tác INSERT, UPDATE hoặc DELETE.

4. Dữ liệu từ máy trạm đồng bộ về máy chủ theo cơ chế nào và trong bao lâu? Sử dụng Merge Replication với chế độ đồng bộ liên tục (Run continuously). Theo văn bản, dữ liệu cập nhật tại máy cửa hàng sẽ chuyển về máy chủ sau 20–60 giây tùy thuộc vào tốc độ mạng.

5. Trigger kiểm tra nhân viên update_NV hoạt động theo nguyên lý nào? Trigger kiểm tra hai điều kiện: mã nhân viên mới phải có định dạng NV% (tiền tố đúng quy ước) và mã đó chưa tồn tại trong bảng NhanVien của máy chủ tổng thông qua truy vấn Linked Server (LINK32.NhanVien). Nếu một trong hai điều kiện không thỏa, lệnh RAISERROR được kích hoạt và transaction bị rollback.


Kết luận

Bài tập lớn trình bày đầy đủ vòng đời thiết kế một hệ thống CSDLPT: từ phân tích nghiệp vụ và xây dựng lược đồ E-R, qua thiết kế phân mảnh và định vị, đến triển khai thực tế trên SQL Server 2022 với Merge/Transactional Replication. Hệ thống phục vụ chuỗi cửa hàng thực phẩm ABC gồm 9 nút mạng tại Hà Nội với phân quyền ba cấp rõ ràng. Các trigger và stored procedure được lập trình và kiểm thử cụ thể, thể hiện khả năng ứng dụng lý thuyết phân tán vào triển khai kỹ thuật thực tế trên nền tảng SQL Server.