> ## Documentation Index
> Fetch the complete documentation index at: https://tomotek.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Thiết kế Cơ sở dữ liệu

Dưới đây là mô hình khái quát về các bảng dữ liệu (Tables) chính tham gia vào quy trình Quản lý Đơn hàng.

*Lưu ý: Đây là mô hình mang tính chất tham khảo (Logical Design), kiến trúc vật lý thực tế có thể có thêm các trường dữ liệu kiểm toán (Audit fields) hoặc tối ưu theo hệ quản trị CSDL.*

## 1. Bảng `Orders` (Đơn hàng)

Lưu trữ thông tin tổng quan của một mã đơn hàng cụ thể đã được tách theo Merchant.

| Cột (Field) | Kiểu dữ liệu | Mô tả | Ràng buộc / Khoá |
| :- | :- | :- | :- |
| `id` | UUID | Khoá chính, mã định danh đơn hàng | PK |
| `pet_owner_id` | UUID | ID của khách hàng đặt đơn | FK -> `Users` |
| `merchant_id` | UUID | ID của cửa hàng bán | FK -> `Merchants` |
| `status` | VARCHAR | Trạng thái: `pending_payment`, `pending`, `preparing`, `shipping`, `completed`, `cancelled` | Enum |
| `total_amount` | DECIMAL | Tổng tiền hàng (trước giảm giá) | $\ge 0$ |
| `shipping_fee` | DECIMAL | Phí vận chuyển | $\ge 0$ |
| `discount_amount` | DECIMAL | Tổng tiền được giảm (từ Voucher) | $\ge 0$ |
| `final_amount` | DECIMAL | Số tiền khách phải thanh toán | $\ge 0$ |
| `payment_method` | VARCHAR | `QR_PAYMENT` | Enum |
| `shipping_address` | TEXT | Địa chỉ nhận hàng chi tiết | Không Null |
| `note` | TEXT | Lời nhắn của khách cho Shop | Có thể Null |
| `created_at` | TIMESTAMP | Thời gian tạo đơn | |

## 2. Bảng `Order_Items` (Chi tiết mặt hàng)

Lưu trữ danh sách các sản phẩm có trong một Đơn hàng. Quan hệ 1-N với bảng `Orders`.

| Cột (Field) | Kiểu dữ liệu | Mô tả | Ràng buộc / Khoá |
| :- | :- | :- | :- |
| `id` | UUID | Khoá chính | PK |
| `order_id` | UUID | Liên kết tới đơn hàng chứa sản phẩm này | FK -> `Orders` |
| `product_id` | UUID | Liên kết tới sản phẩm gốc | FK -> `Products` |
| `product_name` | VARCHAR | Tên sản phẩm (Lưu snapshot lúc mua) | Không Null |
| `quantity` | INT | Số lượng mua | $> 0$ |
| `unit_price` | DECIMAL | Đơn giá tại thời điểm mua (Snapshot) | $\ge 0$ |

## 3. Bảng `Order_Status_History` (Lịch sử trạng thái)

Lưu lại lịch sử thay đổi trạng thái của đơn hàng để hiển thị Timeline cho Pet Owner và truy vết log.

| Cột (Field) | Kiểu dữ liệu | Mô tả | Ràng buộc / Khoá |
| :- | :- | :- | :- |
| `id` | UUID | Khoá chính | PK |
| `order_id` | UUID | Thuộc đơn hàng nào | FK -> `Orders` |
| `status` | VARCHAR | Trạng thái được cập nhật | Enum |
| `changed_by` | UUID | ID của người thao tác (Pet Owner, Merchant hoặc Admin) | |
| `reason` | TEXT | Lý do (nếu là thao tác Huỷ đơn) | Có thể Null |
| `created_at` | TIMESTAMP | Thời điểm cập nhật | |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.