Thiết Kế Cơ Sở Dữ Liệu Quản Lý Bán Hàng Từ Nền Tảng
Thiết kế cơ sở dữ liệu quản lý bán hàng không chỉ là việc sắp xếp thông tin vào các bảng. Nó là việc xây dựng một hệ thống thông tin cốt lõi, giúp doanh nghiệp theo dõi, phân tích và tối ưu hóa mọi hoạt động bán hàng. Một CSDL được thiết kế tốt sẽ là nền tảng vững chắc cho việc ra quyết định, từ quản lý kho hàng đến chiến lược marketing. Nó giống như xương sống của cơ thể, nếu xương khỏe mạnh, cơ thể sẽ vận động linh hoạt và hiệu quả. Một CSDL bán hàng hiệu quả cần đảm bảo tính toàn vẹn dữ liệu, hiệu suất truy vấn, khả năng mở rộng và dễ dàng sử dụng.
Các Bảng Dữ Liệu Cơ Bản và Mối Quan Hệ

Các Bảng Dữ Liệu Cơ Bản và Mối Quan Hệ
Một CSDL quản lý bán hàng thường bao gồm các bảng dữ liệu chính sau:
Bảng Sản Phẩm (Products)
Mục đích: Lưu trữ thông tin chi tiết về từng sản phẩm mà doanh nghiệp bán.
Các trường dữ liệu chính:
product_id (INT, PRIMARY KEY, AUTO_INCREMENT): Mã sản phẩm (khóa chính, tự động tăng).
product_name (VARCHAR): Tên sản phẩm.
description (TEXT): Mô tả sản phẩm.
category_id (INT, FOREIGN KEY): Mã danh mục sản phẩm (khóa ngoại liên kết với bảng Categories).
supplier_id (INT, FOREIGN KEY): Mã nhà cung cấp (khóa ngoại liên kết với bảng Suppliers).
price (DECIMAL): Giá bán.
cost (DECIMAL): Giá vốn.
unit (VARCHAR): Đơn vị tính (ví dụ: cái, kg, lít).
image_url (VARCHAR): Đường dẫn hình ảnh sản phẩm.
SKU (VARCHAR): Mã SKU (Stock Keeping Unit).
barcode (VARCHAR): Mã vạch.
Giải thích: Bảng này lưu trữ mọi thông tin cần thiết về một sản phẩm. Khóa ngoại category_id liên kết với bảng Categories (xem bên dưới) để phân loại sản phẩm một cách dễ dàng. Tương tự, supplier_id liên kết với bảng Suppliers. Việc sử dụng SKU và barcode giúp việc quản lý kho hàng và bán hàng trở nên chính xác và nhanh chóng hơn.
Bảng Danh Mục Sản Phẩm (Categories)
Mục đích: Phân loại sản phẩm thành các nhóm logic để quản lý và tìm kiếm dễ dàng hơn.
Các trường dữ liệu chính:
category_id (INT, PRIMARY KEY, AUTO_INCREMENT): Mã danh mục (khóa chính, tự động tăng).
category_name (VARCHAR): Tên danh mục.
description (TEXT): Mô tả danh mục.
parent_category_id (INT, FOREIGN KEY, NULLABLE): Mã danh mục cha (nếu có, khóa ngoại, cho phép NULL).
Giải thích: Bảng này cho phép phân loại sản phẩm theo nhiều cấp độ (ví dụ: Điện thoại -> iPhone). Trường parent_category_id cho phép tạo ra một cấu trúc cây danh mục sản phẩm, giúp việc quản lý và tìm kiếm trở nên linh hoạt hơn.

Bảng Danh Mục Sản Phẩm (Categories)
Bảng Nhà Cung Cấp (Suppliers)
Mục đích: Lưu trữ thông tin về các nhà cung cấp sản phẩm cho doanh nghiệp.
Các trường dữ liệu chính:
supplier_id (INT, PRIMARY KEY, AUTO_INCREMENT): Mã nhà cung cấp (khóa chính, tự động tăng).
supplier_name (VARCHAR): Tên nhà cung cấp.
contact_name (VARCHAR): Tên người liên hệ.
phone (VARCHAR): Số điện thoại.
email (VARCHAR): Địa chỉ email.
address (VARCHAR): Địa chỉ.
Giải thích: Bảng này lưu trữ thông tin liên hệ của các nhà cung cấp. Việc quản lý thông tin nhà cung cấp giúp doanh nghiệp dễ dàng liên hệ, theo dõi đơn hàng và quản lý mối quan hệ với các đối tác cung ứng.
Bảng Khách Hàng (Customers)
Mục đích: Lưu trữ thông tin về khách hàng của doanh nghiệp.
Các trường dữ liệu chính:
customer_id (INT, PRIMARY KEY, AUTO_INCREMENT): Mã khách hàng (khóa chính, tự động tăng).
first_name (VARCHAR): Tên.
last_name (VARCHAR): Họ.
phone (VARCHAR): Số điện thoại.
email (VARCHAR): Địa chỉ email.
address (VARCHAR): Địa chỉ.
membership_level (VARCHAR): Cấp độ thành viên (ví dụ: Đồng, Bạc, Vàng).
date_of_birth (DATE): Ngày sinh.
Giải thích: Bảng này cho phép theo dõi thông tin khách hàng, hỗ trợ các chiến dịch marketing, chương trình khách hàng thân thiết và phân tích hành vi mua hàng. Việc lưu trữ ngày sinh giúp doanh nghiệp có thể gửi những ưu đãi đặc biệt vào ngày sinh nhật khách hàng, tăng cường sự gắn kết.
Bảng Đơn Hàng (Orders)
Mục đích: Lưu trữ thông tin về các đơn hàng được tạo.
Các trường dữ liệu chính:
order_id (INT, PRIMARY KEY, AUTO_INCREMENT): Mã đơn hàng (khóa chính, tự động tăng).
customer_id (INT, FOREIGN KEY): Mã khách hàng (khóa ngoại liên kết với Customers).
order_date (DATETIME): Ngày đặt hàng.
shipping_address (VARCHAR): Địa chỉ giao hàng.
total_amount (DECIMAL): Tổng giá trị đơn hàng.
status (VARCHAR): Trạng thái đơn hàng (ví dụ: Đang xử lý, Đã giao hàng, Đã hủy).
payment_method (VARCHAR): Phương thức thanh toán (ví dụ: Tiền mặt, Thẻ tín dụng, Chuyển khoản).
discount_code (VARCHAR, NULLABLE): Mã giảm giá (nếu có).
Giải thích: Bảng này lưu trữ thông tin tổng quan về một đơn hàng. Khóa ngoại customer_id liên kết với bảng Customers để biết đơn hàng này thuộc về khách hàng nào.
Bảng Chi Tiết Đơn Hàng (Order Details)

Bảng Chi Tiết Đơn Hàng (Order Details)
Mục đích: Lưu trữ thông tin chi tiết về từng sản phẩm trong một đơn hàng.
Các trường dữ liệu chính:
order_detail_id (INT, PRIMARY KEY, AUTO_INCREMENT): Mã chi tiết đơn hàng (khóa chính, tự động tăng).
order_id (INT, FOREIGN KEY): Mã đơn hàng (khóa ngoại liên kết với Orders).
product_id (INT, FOREIGN KEY): Mã sản phẩm (khóa ngoại liên kết với Products).
quantity (INT): Số lượng sản phẩm.
price (DECIMAL): Giá bán của sản phẩm tại thời điểm đặt hàng.
discount (DECIMAL): Mức giảm giá (nếu có).
Giải thích: Bảng này là cầu nối giữa bảng Orders và Products. Mỗi dòng trong bảng này đại diện cho một sản phẩm cụ thể trong một đơn hàng cụ thể. Việc lưu trữ giá bán tại thời điểm đặt hàng (price) là rất quan trọng, vì giá sản phẩm có thể thay đổi theo thời gian, và chúng ta cần biết giá chính xác mà khách hàng đã trả cho sản phẩm đó.
Bảng Kho Hàng (Inventory)
Mục đích: Quản lý số lượng sản phẩm trong kho.
Các trường dữ liệu chính:
inventory_id (INT, PRIMARY KEY, AUTO_INCREMENT): Mã kho hàng (khóa chính, tự động tăng).
product_id (INT, FOREIGN KEY): Mã sản phẩm (khóa ngoại liên kết với Products).
quantity_in_stock (INT): Số lượng tồn kho.
reorder_level (INT): Mức đặt hàng lại (số lượng sản phẩm tối thiểu trong kho để cần đặt hàng thêm).
location (VARCHAR): Vị trí sản phẩm trong kho (ví dụ: Kệ A, Tầng 2).
Giải thích: Bảng này cho phép theo dõi số lượng sản phẩm hiện có trong kho, giúp doanh nghiệp tránh tình trạng hết hàng hoặc tồn kho quá nhiều. reorder_level là một chỉ số quan trọng, giúp tự động hóa quá trình đặt hàng lại sản phẩm.
Mối Quan Hệ Giữa Các Bảng

Mối Quan Hệ Giữa Các Bảng
Các bảng trên được liên kết với nhau thông qua các khóa ngoại (Foreign Key) để tạo thành một mô hình CSDL quan hệ. Dưới đây là tóm tắt các mối quan hệ chính:
Products – Categories: Một sản phẩm thuộc về một danh mục (One-to-Many).
Products – Suppliers: Một sản phẩm được cung cấp bởi một nhà cung cấp (One-to-Many).
Orders – Customers: Một đơn hàng thuộc về một khách hàng (One-to-Many).
Order Details – Orders: Một chi tiết đơn hàng thuộc về một đơn hàng (One-to-Many).
Order Details – Products: Một chi tiết đơn hàng liên quan đến một sản phẩm (One-to-Many).
Inventory – Products: Một kho hàng chứa thông tin về số lượng của một sản phẩm (One-to-Many).
