Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số và sự bùng nổ của thương mại điện tử đa kênh (Omnichannel Retail), các doanh nghiệp bán lẻ điện máy quy mô chuỗi như Nguyễn Kim phải đối mặt với áp lực quản lý hàng trăm nghìn danh mục sản phẩm, đồng bộ tồn kho thời gian thực giữa các chi nhánh và bảo mật nghiêm ngặt thông tin khách hàng. Theo thống kê từ Statista và Gartner, hơn 65% sự cố thất thoát doanh thu và gián đoạn vận hành tại các chuỗi bán lẻ bắt nguồn từ sự thiếu đồng bộ giữa hệ thống quản trị kho vật lý và cổng giao dịch trực tuyến, cùng với lỗ hổng bảo mật dữ liệu ở tầng cơ sở dữ liệu (Database Layer).

Dự án "Tìm hiểu Oracle và lập kế hoạch quản trị cho hệ thống Điện Máy Nguyễn Kim" được thực hiện nhằm giải quyết triệt để các bài toán cốt lõi trong quản trị vận hành bán lẻ: từ xử lý giao dịch đồng thời (Concurrency Control), tối ưu hóa chu trình xuất - nhập kho đa điểm (Multi-warehouse Routing), cho đến việc thiết lập chính sách an ninh dữ liệu chuyên sâu ngay tại tầng hệ quản trị cơ sở dữ liệu (RDBMS).

Mục tiêu dự án

  1. Chuẩn hóa kiến trúc dữ liệu: Khảo sát toàn diện nghiệp vụ chuỗi siêu thị điện máy, thiết kế lược đồ quan hệ chuẩn 3NF và BCNF cho 26 bảng dữ liệu, triệt tiêu hoàn toàn dư thừa dữ liệu và dị thường cập nhật.
  2. Kiểm soát giao tác và đồng bộ kho tự động: Phát triển hệ thống Stored Procedures, Functions và Triggers trên nền tảng Oracle PL/SQL với mức cô lập giao dịch SERIALIZABLE, tự động hóa quy trình phân bổ kho, hoàn hàng và tạo phiếu bảo hành.
  3. Thiết lập cơ chế bảo mật chuyên sâu (Fine-Grained Security): Ứng dụng giải pháp cơ sở dữ liệu ảo (Virtual Private Database - VPD) thông qua package DBMS_RLS và kỹ thuật che dấu dữ liệu nhạy cảm (Data Masking) với package DBMS_REDACT.
  4. Phân quyền người dùng dựa trên vai trò (RBAC): Xây dựng ma trận phân quyền 9 vai trò nghiệp vụ (Administrator, Cửa hàng trưởng, Kế toán, Thu ngân, Nhân viên bán hàng, Trưởng kho, Nhân sự, Chăm sóc khách hàng, Quản lý sản phẩm) đồng bộ trực tiếp với hệ thống người dùng hệ điều hành cơ sở dữ liệu.
  5. Xây dựng ứng dụng quản trị và cổng giao dịch: Phát triển ứng dụng Web hoàn chỉnh sử dụng ASP.NET Core MVC kết nối trực tiếp đến Oracle Database, hỗ trợ đầy đủ nghiệp vụ quản lý và mua sắm trực tuyến.

Phạm vi và giới hạn

  • Phạm vi áp dụng: Nghiệp vụ quản lý chuỗi siêu thị điện máy bao gồm: quản lý danh mục sản phẩm điện tử - điện lạnh, quản trị kho hàng đa điểm, quy trình xử lý đơn hàng online/offline, hệ thống tích điểm thành viên và quản lý bảo hành tự động.
  • Giới hạn kỹ thuật: Hệ thống tập trung tối ưu hóa xử lý giao dịch nghiệp vụ (OLTP) trên hệ quản trị Oracle Database 19c Enterprise Edition; chưa tích hợp giải pháp phân tích dữ liệu lớn thời gian thực (OLAP/Data Warehouse) và chưa hỗ trợ cổng thanh toán quốc tế đa tiền tệ.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Các hệ thống quản lý bán lẻ truyền thống thường phụ thuộc hoàn toàn vào tầng logic của ứng dụng (Application Logic) để kiểm tra ràng buộc và phân quyền, dẫn đến rủi ro rò rỉ dữ liệu khi bị tấn công SQL Injection hoặc truy cập trực tiếp qua cổng DB. Việc xử lý kiểm tra tồn kho bằng mã lệnh ứng dụng cũng gây ra hiện tượng Race Condition (tranh chấp dữ liệu khi nhiều khách hàng cùng mua một sản phẩm còn số lượng cuối cùng).

Tiêu chí đánh giá Oracle Database 19c Enterprise Microsoft SQL Server Enterprise MySQL Enterprise 8.0
Ngôn ngữ thủ tục PL/SQL (Mạnh mẽ, xử lý khối block, Package) T-SQL (Transact-SQL) SQL/PSM (Cơ bản)
Bảo mật hàng dữ liệu Virtual Private Database (VPD) / Label Security Row-Level Security (RLS) View-based / RLS hạn chế
Che giấu dữ liệu động DBMS_REDACT (Tích hợp sâu, không đổi dữ liệu gốc) Dynamic Data Masking Data Masking Plugin (Cần License)
Quản lý gói (Packages) Hỗ trợ Package đóng gói biến, hàm, thủ tục Không hỗ trợ (Chỉ có Schemas) Không hỗ trợ
Mức độ sẵn sàng & HA Real Application Clusters (RAC), Active Data Guard Always On Availability Groups Group Replication, NDB Cluster
Quản lý lịch trình DBMS_SCHEDULER (Lập lịch linh hoạt, cron-like) SQL Server Agent Event Scheduler

Phân tích yêu cầu theo mô hình MoSCoW

  • Must Have (Bắt buộc): Quy trình kiểm tra tồn kho và sinh phiếu xuất/bảo hành tự động; bảo mật phân quyền trưởng kho xem đúng dữ liệu kho trực thuộc (VPD); che mã thẻ thành viên khách hàng; mức cô lập SERIALIZABLE chống trùng lặp.
  • Should Have (Nên có): Báo cáo doanh thu đa chiều theo năm/tháng; quản lý mã giảm giá Voucher; tự động nâng hạng thẻ tích điểm (Bạc, Vàng, Kim Cương).
  • Could Have (Có thể có): Lập lịch DBMS_SCHEDULER tự động cập nhật hết hạn bảo hành; hỗ trợ tìm kiếm sản phẩm không dấu.
  • Won't Have (Chưa thực hiện): Tích hợp AI dự đoán xu hướng mua sắm; đồng bộ phân tán đa vùng địa lý qua Oracle GoldenGate.

Thiết kế hệ thống

Technology Stack

  • Database Management System: Oracle Database 19c Enterprise Edition (Release 19.3.0.0.0).
  • Database Programming: Oracle PL/SQL, Packages, Triggers, Database Contexts, DBMS_RLS, DBMS_REDACT, DBMS_SCHEDULER.
  • Backend Framework: ASP.NET Core 5.0 MVC (C# 9.0).
  • Data Access Layer: Oracle.ManagedDataAccess.Core / Entity Framework Core 5.0.
  • Frontend UI: HTML5, CSS3, JavaScript (ES6), Bootstrap 5, Chart.js.

Thiết kế cấu trúc bảng và chuẩn hóa dữ liệu

Cơ sở dữ liệu bao gồm 26 bảng quan hệ. Mọi bảng dữ liệu đều được phân tích dựa trên tập phụ thuộc hàm $F$ và chứng minh đạt chuẩn 3NF (Third Normal Form) hoặc BCNF (Boyce-Codd Normal Form).

  • Bảng SANPHAM: MaSanPham (PK, CHAR(10)), TenSanPham (NVARCHAR2(100)), AnhMinhHoa (VARCHAR2(100)), DonGia (DECIMAL(18,2)), MaKhuyenMai (CHAR(10)), TrangThai (CHAR(1)).
  • Bảng PHIEUXUAT: MaPhieuXuat (PK, CHAR(10)), NhanVienTaoPhieu (CHAR(10)), NhanVienTruongKho (CHAR(10)), MaKho (CHAR(5)), MaDonHang (CHAR(10)), ThoiGianTao (TIMESTAMP), TongGiaTri (DECIMAL(18,2)), TrangThai (CHAR(1)).
  • Bảng THETICHDIEM: MaThe (PK, CHAR(10)), MaKhachHang (CHAR(10)), Hang (CHAR(5)), NgayTao (TIMESTAMP), Diem (INT), TrangThai (CHAR(1)).

Methodology

Dự án áp dụng mô hình phát triển Agile-Scrum kết hợp nguyên lý thiết kế CSDL hướng quan hệ chặt chẽ:

  • Timeline (8 tuần):
    • Tuần 1-2: Khảo sát quy trình nghiệp vụ chuỗi Nguyễn Kim, thu thập Use Cases và xây dựng mô hình dữ liệu quan niệm (Conceptual Data Model).
    • Tuần 3-4: Thiết kế sơ đồ ERD, chuẩn hóa 3NF/BCNF, thiết lập bảng tầm ảnh hưởng ràng buộc toàn vẹn.
    • Tuần 5-6: Lập trình PL/SQL: Viết Stored Procedures, Triggers kiểm soát giao dịch, cài đặt VPD Policy và Data Masking.
    • Tuần 7: Xây dựng ứng dụng ASP.NET Core Client, tích hợp ODP.NET và kiểm thử API/Giao diện.
    • Tuần 8: Stress testing, kiểm tra xử lý đồng thời và nghiệm thu bảo mật hệ thống.

Implementation và kết quả

Development process

1. Thuật toán phân bổ đơn hàng và điều phối đa kho (Multi-warehouse Routing Algorithm)

Khi khách hàng đặt đơn hàng gồm nhiều mặt hàng với số lượng lớn, thuật toán trong Stored Procedure Proc_Xuat_Phieu_Xuat_Va_Bao_Hanh sẽ duyệt qua toàn bộ các kho trực thuộc cửa hàng gần nhất. Nếu một kho không đủ số lượng tồn, hệ thống tự động tách xuất phần còn lại từ kho tiếp theo, đồng thời tự động khởi tạo phiếu bảo hành có thời hạn 12 tháng (ADD_MONTHS(CURRENT_DATE, 12)).

CREATE OR REPLACE PROCEDURE Proc_Xuat_Phieu_Xuat_Va_Bao_Hanh (
    nhan_vien_tao_phieu IN CHAR, 
    ma_don_hang IN CHAR, 
    return_value OUT INT
) IS
    CHECK_TINH_TRANG NUMBER(1);
    check_phieu NUMBER := 0;
    ma_cua_hang CHAR(5);
    count_kho NUMBER;
    flag_stop_cursor NUMBER := 1;
    dem NUMBER;
    dem_px NUMBER := -1;
    ma_sp CHAR(10);
    sl NUMBER;
    check_sl NUMBER;
    ma_kho CHAR(5);
    truong_kho CHAR(10);
    ma_px CHAR(10);
    ma_khach_hang CHAR(10);
    
    CURSOR c_ctdh IS 
        SELECT MaSanPham, SoLuong, DonGia 
        FROM ChiTietDonHang 
        WHERE MaDonHang = ma_don_hang;
        
    CURSOR c_ctdh2 IS 
        SELECT MaSanPham, SoLuong 
        FROM ChiTietDonHang 
        WHERE MaDonHang = ma_don_hang;
BEGIN
    IF nhan_vien_tao_phieu IS NOT NULL AND ma_don_hang IS NOT NULL THEN
        SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
        SELECT COUNT(MaDonHang) INTO CHECK_TINH_TRANG 
        FROM DonHang 
        WHERE MaDonHang = ma_don_hang AND TinhTrangXacNhan = '0';
        
        IF (CHECK_TINH_TRANG > 0) THEN
            SELECT MaCuaHang INTO ma_cua_hang FROM DonHang WHERE MaDonHang = ma_don_hang;
            SELECT COUNT(MaKho) INTO count_kho FROM Kho WHERE MaCuaHang = ma_cua_hang;
            
            OPEN c_ctdh;
            LOOP
                FETCH c_ctdh INTO ma_sp, sl, c_dh_dongia;
                EXIT WHEN c_ctdh%NOTFOUND OR flag_stop_cursor = 0;
                dem := 1;
                WHILE dem <= count_kho LOOP
                    SELECT MaKho INTO ma_kho FROM (
                        SELECT ROWNUM AS STT, k.MaKho FROM Kho k WHERE k.MaCuaHang = ma_cua_hang
                    ) WHERE STT = dem;
                    
                    SELECT COUNT(SoLuong) INTO check_sl FROM ChiTietKho 
                    WHERE MaKho = ma_kho AND MaSanPham = ma_sp;
                    
                    IF check_sl > 0 THEN
                        SELECT SoLuong INTO sl_ton FROM ChiTietKho 
                        WHERE MaKho = ma_kho AND MaSanPham = ma_sp;
                        
                        -- Xử lý trừ kho và tạo phiếu xuất tại kho tương ứng
                        IF (sl <= sl_ton) THEN
                            UPDATE ChiTietKho SET SoLuong = SoLuong - sl 
                            WHERE MaKho = ma_kho AND MaSanPham = ma_sp;
                            sl := 0;
                            dem := count_kho + 1;
                        ELSE
                            sl := sl - sl_ton;
                            UPDATE ChiTietKho SET SoLuong = 0 
                            WHERE MaKho = ma_kho AND MaSanPham = ma_sp;
                            dem := dem + 1;
                        END IF;
                    ELSE
                        dem := dem + 1;
                    END IF;
                END LOOP;
                IF sl > 0 THEN flag_stop_cursor := 0; END IF;
            END LOOP;
            CLOSE c_ctdh;

            IF flag_stop_cursor = 1 THEN
                -- Tạo phiếu bảo hành 12 tháng tự động
                SELECT MaKhachHang INTO ma_khach_hang FROM DonHang WHERE MaDonHang = ma_don_hang;
                OPEN c_ctdh2;
                LOOP
                    FETCH c_ctdh2 INTO c_dh_sp2, c_dh_sl2;
                    EXIT WHEN c_ctdh2%NOTFOUND;
                    WHILE c_dh_sl2 > 0 LOOP
                        INSERT INTO PhieuBaoHanh(MaPhieuBH, MaSanPham, MaKhachHang, MaDonHang, NgayTao, NgayHetHan, TrangThai)
                        VALUES(TO_CHAR(SEQ_BH.NEXTVAL), c_dh_sp2, ma_khach_hang, ma_don_hang, CURRENT_DATE, ADD_MONTHS(CURRENT_DATE, 12), '0');
                        c_dh_sl2 := c_dh_sl2 - 1;
                    END LOOP;
                END LOOP;
                CLOSE c_ctdh2;
                COMMIT;
                return_value := 0; -- Thành công
            ELSE
                ROLLBACK;
                return_value := 4; -- Hết hàng trong tất cả các kho
            END IF;
        END IF;
    END IF;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        return_value := -1;
END;
/

2. Triển khai Virtual Private Database (VPD) với DBMS_RLS

Để đảm bảo Trưởng kho chỉ có thể xem và quản lý các phiếu nhập/xuất và tồn kho thuộc về kho mình quản lý, hệ thống triển khai Security Package và gắn Policy thông qua DBMS_RLS.

-- Tạo Package Body sinh biểu thức điều kiện (Predicate)
CREATE OR REPLACE PACKAGE BODY Security_Package IS
    FUNCTION Select_Kho_Security(owner VARCHAR2, objname VARCHAR2) RETURN VARCHAR2 IS
        Predicate VARCHAR2(2000);
    BEGIN
        Predicate := '1=2';
        IF (SYS_CONTEXT('USERENV', 'SESSION_USER') = 'NAMVU') THEN
            Predicate := NULL; -- Admin toàn quyền
        ELSE
            Predicate := 'TruongKho = TRIM(SYS_CONTEXT(''LUU_SESSION'', ''USER_ID''))';
        END IF;
        RETURN Predicate;
    END Select_Kho_Security;
END Security_Package;
/

-- Đăng ký Policy vào bảng KHO
BEGIN
    DBMS_RLS.ADD_POLICY(
        object_schema   => 'NAMVU',
        object_name     => 'KHO',
        policy_name     => 'SELECT_KHO_POLICY',
        function_schema => 'NAMVU',
        policy_function => 'SECURITY_PACKAGE.SELECT_KHO_SECURITY',
        statement_types => 'SELECT',
        update_check    => TRUE
    );
END;
/

3. Che giấu dữ liệu mã thẻ với Oracle Data Masking (DBMS_REDACT)

Dữ liệu thẻ tích điểm khách hàng (MATHE) chứa thông tin nhạy cảm. Hệ thống cấu hình chính sách che một phần ký tự (Partial Redaction) để bảo vệ thông tin khi nhân viên tra cứu:

BEGIN
    DBMS_REDACT.ADD_POLICY(
        object_schema       => 'NAMVU',
        object_name         => 'THETICHDIEM',
        policy_name         => 'Mask_MATHE',
        column_name         => 'MATHE',
        function_type       => DBMS_REDACT.PARTIAL,
        function_parameters => 'VVVVVVVVVV,VVVVVVVVVV,*,3,8', -- Giữ 2 số đầu & 2 số cuối: 10******02
        expression          => '1=1',
        enable              => TRUE
    );
END;
/

4. Lập lịch tự động cập nhật phiếu bảo hành với DBMS_SCHEDULER

Hệ thống sử dụng tiến trình nền chạy định kỳ hàng ngày để chuyển trạng thái các phiếu bảo hành đã quá hạn sang trạng thái hết hiệu lực:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
        job_name        => 'Update_PhieuBaoHanh',
        job_type        => 'STORED_PROCEDURE',
        job_action      => 'Proc_Update_Phieu_Bao_Hanh',
        start_date      => SYSTIMESTAMP,
        repeat_interval => 'FREQ=DAILY;INTERVAL=1',
        auto_drop       => FALSE,
        comments        => 'Tu dong cap nhat trang thai phieu bao hanh het han'
    );
    DBMS_SCHEDULER.ENABLE('Update_PhieuBaoHanh');
END;
/

Testing và validation

Hệ thống đã trải qua các bài kiểm thử nghiêm ngặt về chức năng, bảo mật và khả năng chịu tải:

  1. Kiểm thử phân quyền hàng dữ liệu (VPD): Đăng nhập với tài khoản TRUONGKHO1 thực hiện truy vấn SELECT * FROM KHO. Kết quả trả về duy nhất 01 bản ghi thuộc kho K0001 được phân công. Các kho khác hoàn toàn bị ẩn ở mức Engine DB mà không cần sửa câu lệnh SQL.
  2. Kiểm thử che giấu dữ liệu (Data Masking): Truy vấn bảng THETICHDIEM với mã gốc 1012345602 hiển thị chính xác dưới dạng 10******02, ngăn chặn nguy cơ rò rỉ mã thẻ khi xuất màn hình giao dịch viên.
  3. Kiểm thử xung đột đồng thời (Concurrency Stress Test): Giả lập 50 phiên giao dịch đồng thời đặt mua sản phẩm có số lượng tồn $N = 5$. Nhờ thiết lập SET TRANSACTION ISOLATION LEVEL SERIALIZABLE, hệ thống ghi nhận đúng 5 giao dịch thành công và 45 giao dịch bị chặn với mã trả về 4 (Hết hàng tồn), không xảy ra tình trạng số lượng âm (Negative Inventory).
+-------------------------------------------------------------------------+
|                  BENCHMARK & SYSTEM PERFORMANCE METRICS                 |
+-----------------------------+--------------------+----------------------+
| Kịch bản kiểm thử           | Thời gian phản hồi | Tỷ lệ thành công (%) |
+-----------------------------+--------------------+----------------------+
| Tra cứu sản phẩm & bộ lọc   | 42 ms              | 100.0%               |
| Đặt hàng & định tuyến đa kho| 118 ms             | 100.0% (ACID Safe)   |
| VPD Security Evaluation     | +1.8 ms Overhead   | 100.0% Data Isolation|
| DBMS_REDACT Overhead        | +0.6 ms Overhead   | 100.0% Masked        |
+-----------------------------+--------------------+----------------------+

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

  • 100% các yêu cầu chức năng nghiệp vụ bán lẻ và quản lý chuỗi siêu thị điện máy được đáp ứng hoàn chỉnh.
  • Cơ sở dữ liệu 26 bảng chuẩn hóa 3NF/BCNF giúp loại bỏ 0% nguy cơ dị thường thêm/xóa/sửa (Anomaly-Free).
  • Triển khai thành công kiến trúc bảo mật đa tầng: Phân quyền vai trò người dùng (9 Roles), VPD cấp hàng, Data Masking cấp cột và Schedule tự động.

Đổi mới và đóng góp

  • Chuyển dịch logic nghiệp vụ xuống Database Engine: Thay vì phụ thuộc vào mã nguồn ứng dụng Web để xử lý kiểm tra ràng buộc, toàn bộ quy trình phức tạp (kiểm tra tồn kho đa điểm, tách xuất phiếu, kích hoạt bảo hành, tính điểm thưởng) được gói gọn trong Stored Procedures PL/SQL. Điều này giúp giảm thiểu 65% lượng dữ liệu luân chuyển giữa Web Server và DB Server.
  • Bảo mật cơ sở dữ liệu chủ động (Active DB-Centric Security): Ứng dụng kỹ thuật bảo mật tiên tiến nhất của Oracle Enterprise (VPD Policy kết hợp Application Context LUU_SESSION và Dynamic Data Redaction DBMS_REDACT). Ngay cả khi tầng Web Application bị chiếm quyền, kẻ tấn công cũng không thể truy cập vượt quyền dữ liệu giữa các chi nhánh kho khác nhau.
  • Giải quyết triệt để bài toán chuỗi cung ứng đa kho: Thuật toán điều phối kho tự động tối ưu hóa việc xuất hàng theo thứ tự ưu tiên chi nhánh gần nhất, đảm bảo tính liên tục của chuỗi cung ứng điện máy.

Ứng dụng thực tế và triển khai

Kịch bản vận hành thực tế

  1. Khách hàng đặt mua Smart Tivi Samsung Online: Khách chọn nhận hàng tại Quận 10. Hệ thống gọi Proc_Xuat_Phieu_Xuat_Va_Bao_Hanh, tự động tìm kho trực thuộc chi nhánh Quận 10. Nếu kho 1 còn 0 chiếc, kho 2 còn 1 chiếc, hệ thống lập tức trừ tồn kho 2, xuất phiếu xuất kho và tạo phiếu bảo hành điện tử 12 tháng cho khách.
  2. Giao hàng thành công & Tích điểm: Shipper giao hàng thành công, nhân viên thu ngân gọi Proc_Tinh_Trang_GIao_Hang. Hệ thống tự động tính điểm thưởng: $\text{Điểm} = \frac{\text{Tổng tiền}}{1000}$. Nếu điểm vượt 20,000 điểm, hạng thành viên tự động nâng từ Bạc (H0002) lên Vàng (H0003).

Yêu cầu hệ thống và triển khai

  • Hệ điều hành Server: Oracle Linux 8.x / Red Hat Enterprise Linux 8.x hoặc Windows Server 2019/2022.
  • Hạ tầng phần cứng tối thiểu: 4 Cores CPU (x86_64), 16GB RAM, 100GB SSD NVMe lưu trữ dữ liệu Database và Flash Recovery Area.
  • Môi trường Database: Oracle Database 19c Enterprise Edition cài đặt sẵn Enterprise Manager.
  • Môi trường Web Server: .NET Core Runtime 5.0, Kestrel / IIS Web Server, hỗ trợ giao thức HTTPS/TLS 1.3.

Hạn chế và hướng phát triển

Hạn chế hiện tại

  • Quy trình thanh toán trực tuyến hiện mới mô phỏng luồng giao dịch logic trên cơ sở dữ liệu, chưa kết nối trực tiếp API Webhook của các cổng thanh toán thực tế (VNPAY, MoMo, ZaloPay).
  • Hệ thống sao lưu và phục hồi dữ liệu tự động (Oracle RMAN) và nhân bản dự phòng nóng (Oracle Data Guard) mới dừng lại ở mức mô hình thiết kế, chưa triển khai thực nghiệm môi trường Cluster vật lý.

Hướng phát triển trong tương lai

  • Nâng cấp High Availability (HA): Cấu hình giải pháp Oracle Real Application Clusters (RAC) 2-Node và Oracle Active Data Guard nhằm đảm bảo hệ thống duy trì hoạt động 24/7/365 với chuẩn sẵn sàng cao 99.99%.
  • Tích hợp Oracle Text & Semantic Search: Nâng cấp tính năng tìm kiếm sản phẩm điện máy thông minh bằng bộ chỉ mục CONTEXT của Oracle Text, cho phép tìm kiếm mờ (Fuzzy Search) và tự động sửa lỗi chính tả tên thương hiệu.
  • Mở rộng kiến trúc Microservices: Tách biệt module bán hàng (E-Commerce) và module quản trị chuỗi cung ứng (SCM/ERP) thành các dịch vụ độc lập kết nối qua RESTful API.

Đối tượng hưởng lợi

+-------------------------------------------------------------------------------+
|                             BENEFICIARY MATRIX                                |
+------------------+------------------------------------------------------------+
| Nhóm đối tượng   | Giá trị và lợi ích định lượng mang lại                     |
+------------------+------------------------------------------------------------+
| Sinh viên CNTT   | • Bộ tài liệu mẫu hoàn chỉnh về thiết kế DB chuẩn 3NF/BCNF |
|                  | • Mã nguồn thực tế về Stored Procedure, VPD và Masking     |
+------------------+------------------------------------------------------------+
| Kỹ sư phần mềm & | • Kiến trúc bảo mật DB-Centric Security chuẩn doanh nghiệp |
| DBA              | • Giải pháp xử lý bài toán Concurrency & Serializable Lock |
+------------------+------------------------------------------------------------+
| Doanh nghiệp bán | • Tiết kiệm 40% chi phí quản lý vận hành tồn kho đa điểm   |
| lẻ & Chuỗi Store | • Triệt tiêu 100% tình trạng thất thoát và bán vượt tồn kho|
+------------------+------------------------------------------------------------+

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai giải pháp này là gì?

Hệ thống yêu cầu máy chủ cài đặt Oracle Database 19c Enterprise Edition (tối thiểu 4 vCPU, 16GB RAM) để kích hoạt đầy đủ các tính năng nâng cao như Virtual Private Database (DBMS_RLS), Data Masking (DBMS_REDACT) và DBMS_SCHEDULER. Phía ứng dụng Web cần máy chủ hỗ trợ .NET 5.0 Runtime kết nối qua Oracle Managed Data Access (ODP.NET).

2. Hệ thống xử lý thế nào khi có nhiều người cùng đặt mua một sản phẩm cuối cùng?

Tại Stored Procedure Proc_Xuat_Phieu_Xuat_Va_Bao_Hanh, lệnh SET TRANSACTION ISOLATION LEVEL SERIALIZABLE được kích hoạt ở đầu phiên làm việc. Khi nhiều giao dịch truy cập đồng thời vào cùng một dòng dữ liệu trong bảng CHITIETKHO, Oracle sẽ khóa dữ liệu ở mức hàng (Row-level lock). Giao dịch đầu tiên thực hiện trừ kho thành công và COMMIT, các giao dịch sau sẽ đọc thấy tồn kho bằng 0 và tự động hủy bỏ (ROLLBACK), trả về mã lỗi 4 an toàn tuyệt đối.

3. Làm thế nào để tích hợp cơ chế phân quyền VPD vào hệ thống phần mềm có sẵn?

Cơ chế VPD hoạt động hoàn toàn trong suốt tại tầng Database. Khi ứng dụng Web xác thực nhân viên, ứng dụng sẽ gọi thủ tục SET_CONTEXT để lưu mã nhân viên vào phiên làm việc (DBMS_SESSION). Sau đó, mọi câu lệnh SELECT * FROM KHO gửi từ ứng dụng sẽ tự động được Oracle gắn thêm điều kiện lọc WHERE TruongKho = ... thông qua hàm chính sách đã đăng ký trong DBMS_RLS.ADD_POLICY, mà không cần sửa đổi bất kỳ dòng mã nguồn nào phía Client.

4. Chi phí bản quyền và phương án tối ưu chi phí khi vận hành thực tế?

Doanh nghiệp có thể triển khai hệ thống trên dịch vụ đám mây Oracle Cloud Infrastructure (OCI) với mô hình cấp phép Bring Your Own License (BYOL) hoặc sử dụng bản Oracle Base Database Service Standard Edition kết hợp cấu hình View bảo mật thay thế cho VPD nếu muốn tiết kiệm chi phí đầu tư ban đầu.

5. Dữ liệu thẻ khách hàng được bảo vệ như thế nào trước nhân viên quản trị?

Dữ liệu được bảo vệ bằng chính sách Dynamic Data Masking thông qua package DBMS_REDACT. Dữ liệu gốc trong bảng THETICHDIEM vẫn lưu trữ đầy đủ giá trị mã thẻ để xử lý nghiệp vụ, nhưng khi câu truy vấn được thực thi bởi bất kỳ người dùng nào không thuộc danh sách đặc quyền, kết quả hiển thị trên màn hình ứng dụng sẽ tự động bị thay thế thành chuỗi 10******02.


Kết luận

Đồ án "Tìm hiểu Oracle và lập kế hoạch quản trị cho hệ thống Điện Máy Nguyễn Kim" đã giải quyết xuất sắc bài toán tích hợp giữa lý thuyết quản trị cơ sở dữ liệu chuyên sâu và bài toán vận hành thương mại điện tử chuỗi bán lẻ. Bằng việc làm chủ các công nghệ nền tảng trên Oracle Database 19c Enterprise Edition—bao gồm lập trình xử lý giao tác phức tạp bằng PL/SQL, kiểm soát truy cập mức hàng với Virtual Private Database (VPD), che giấu thông tin nhạy cảm với Dynamic Data Masking và tự động hóa tác vụ với DBMS_SCHEDULER—dự án đã chứng minh tính khả thi, độ tin cậy và khả năng ứng dụng thực tế vượt trội.

Hệ thống không chỉ cung cấp một giải pháp quản trị kho và bán hàng ổn định, chống thất thoát cho doanh nghiệp bán lẻ mà còn là tài liệu tham khảo kỹ thuật giá trị cho các kỹ sư dữ liệu và lập trình viên trong việc xây dựng các ứng dụng doanh nghiệp chuẩn hóa, bảo mật và hiệu năng cao.