Ebook2LateX (6) - Phân tích và thiết kế các bảng

Bài trước: Ebook2LateX (5) - Cài đặt hệ quản trị cơ sở dữ liệu
-----

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

-----
Bài sau: