6. Phân tích và thiết kế các bảng
Để giải quyết yêu cầu [FR3], chúng ta cần tạo hai bảng dữ liệu chính với mối quan hệ một-nhiều (một tài liệu có nhiều mục công thức).
Ngoài ra, chúng ta cũng tạo thêm 2 bảng để quản lý việc đăng nhập; theo dõi hiệu suất và lỗi khi thực hiện OCR của mô hình AI.
[1] Bảng lưu trữ tài liệu (ví dụ: Documents)
Bảng này dùng để quản lý các tập tin PDF mà người dùng tải lên hệ thống. Các trường thông tin cần thiết bao gồm:
- ID: Khóa chính (Primary Key), định danh duy nhất cho mỗi tài liệu
- FileName: Tên tập tin gốc khi tải lên
- FilePath/URL: Đường dẫn lưu trữ tệp trên máy chủ hoặc Cloud để có thể mở lại khi cần
- UploadDate: Thời gian tài liệu được tải lên hệ thống
- Status: Trạng thái xử lý của tài liệu (ví dụ: Đang chờ, Đã xử lý, Lỗi)
[2] Bảng lưu trữ công thức (ví dụ: FormulaEntries)
Đây là bảng quan trọng nhất để thực hiện yêu cầu [FR3] (Lưu dữ liệu dạng LateX vào Database). Theo thiết kế dự án, mỗi tài liệu sẽ có nhiều mục công thức, bao gồm:
- ID: Khóa chính của mục công thức
- DocumentID: Khóa ngoại (Foreign Key) liên kết với bảng Documents (quan hệ 1-nhiều)
- RawImage/ImagePath: Lưu ảnh vùng công thức đã được cắt ra từ tập tin PDF (hoặc đường dẫn tới ảnh đó) để đối chiếu
- LatexContent: Nội dung mã LaTeX đã được mô hình pix2tex trích xuất hoặc người dùng đã chỉnh sửa thủ công
- OrderIndex: Thứ tự của công thức trong tài liệu để hiển thị lại đúng cấu trúc ban đầu
- CreatedAt/UpdatedAt: Thời gian tạo và lần cuối cùng chỉnh sửa công thức
[3] Bảng thông tin người dùng (ví dụ: Users)
Bảng này dùng để quản lý định danh, quyền truy cập
- UserID: Khóa chính (Primary Key), mã định danh duy nhất cho mỗi người dùng
- Username/Email: Tên đăng nhập hoặc địa chỉ email dùng để xác thực và liên lạc
- PasswordHash: Lưu trữ mật khẩu đã được mã hóa (không lưu mật khẩu thô để đảm bảo bảo mật theo chuẩn OAuth2/JWT)
- FullName: Họ và tên đầy đủ của người dùng để hiển thị trên giao diện
- Role: Vai trò của người dùng (ví dụ: Admin, Editor, Viewer) để phân quyền
- LastLogin: Thời gian cuối cùng người dùng đăng nhập vào hệ thống
- IsActive: Trạng thái tài khoản (Đang hoạt động hoặc Đã khóa)
[4] Bảng theo dõi hiệu suất và lỗi khi thực hiện OCR của mô hình AI (ví dụ: Logs)
Bảng này dùng để giám sát chất lượng của mô hình AI (pix2tex/Mathpix), giúp lập trình viên phát hiện lỗi kỹ thuật và cải thiện độ chính xác của việc trích xuất công thức.
- LogID: Khóa chính, định danh duy nhất cho mỗi bản ghi nhật ký
- FormulaID: Khóa ngoại liên kết với bảng FormulaEntries, giúp biết lỗi hoặc hiệu suất này thuộc về công thức cụ thể nào
- ProcessingTime: Thời gian (tính bằng mili giây hoặc giây) mà mô hình AI cần để chuyển đổi từ ảnh sang LaTeX. Chỉ số này giúp đánh giá tốc độ hệ thống
- ConfidenceScore: Độ tin cậy của kết quả OCR do mô hình trả về (thường từ 0 đến 1). Nếu điểm quá thấp, hệ thống có thể đánh dấu để người dùng kiểm tra kỹ hơn
- ErrorType: Loại lỗi phát sinh nếu quá trình OCR thất bại (ví dụ: Timeout, InvalidImageFormat, ModelCrash)
- ErrorMessage: Nội dung chi tiết thông báo lỗi kỹ thuật để phục vụ việc sửa lỗi (debugging)
- Timestamp: Thời điểm chính xác sự kiện xảy ra
- EnvironmentInfo: Thông tin về môi trường chạy (ví dụ: Docker_Container_ID, CPU/GPU_Usage) để phân tích tải hệ thống