Read this post in: de_DEen_USes_ESfr_FRhi_INid_IDjapl_PLpt_PTru_RUzh_CNzh_TW

🍟 Sơ đồ quan hệ thực thể toàn diện: Hệ thống vận hành tích hợp của McDonald’s

(Tập trung vào xử lý đơn hàng, trải nghiệm khách hàng và vận hành cửa hàng)


🔍 Bối cảnh kinh doanh

Sơ đồ quan hệ thực thể này mô hình hóa các hoạt động cốt lõi trong mộtcửa hàng McDonald’s, tập trung vào:

  • Dòng chảy đơn hàng từ khách hàng đến thanh toán

  • Vai trò nhân viên và quản lý cửa hàng

  • Tình trạng sẵn có và giá cả thực đơn

  • Chương trình khách hàng trung thành và sự tham gia lặp lại

  • Theo dõi tồn kho cơ bản (cho các món ăn)

Ghi chú: Đây không phải là cơ sở dữ liệu doanh nghiệp đầy đủ (ví dụ: chuỗi cung ứng hoặc nhân sự), mà là nền tảng thực tế, có thể mở rộng cho hệ thống POS thức ăn nhanh.


📚 Các thực thể và thuộc tính

Thực thể Thuộc tính
Khách hàng CustomerID (PK), Tên, Số điện thoại, Email, Điểm tích lũy, Cấp độ thành viên (ví dụ: Đồng, Bạc)
Cửa hàng StoreID (PK), Tên, Địa điểm (Địa chỉ), ManagerID (FK → Nhân viên), Giờ mở cửa, Doanh thu tổng (tháng)
Nhân viên EmployeeID (PK), Tên, Vai trò (Thu ngân, Đầu bếp, Quản lý, Giám sát viên), StoreID (FK), Ngày tuyển dụng, Lịch ca làm việc
Món ăn MenuItemID (PK), Tên, Mô tả, Giá, Loại (Burger, Đồ uống, Món phụ, Tráng miệng), Đang hoạt động, URL Ảnh
Đơn hàng OrderID (PK), Thời gian đặt hàng, Trạng thái (Chờ xử lý → Đang chuẩn bị → Sẵn sàng → Hoàn tất → Hủy), Tổng tiền, StoreID (FK), CustomerID (FK)
Chi tiết đơn hàng OrderItemID (PK), OrderID (FK), MenuItemID (FK), Số lượng, Thành tiền (tính tự động)
Thanh toán PaymentID (PK), Số tiền, Phương thức (Tiền mặt, Thẻ tín dụng, Ví điện tử), ID giao dịch, OrderID (FK), Thời điểm
Khuyến mãi PromotionID (PK), Mã (ví dụ: “WELCOME10”), Loại giảm giá (Phần trăm, Cố định), Giá trị giảm giá, Ngày hoạt lực, Ngày hết hạn, Áp dụng cho (ví dụ: Bữa trưa, Tất cả sản phẩm)

🔗 Quan hệ (với các cardinalities)

Quan hệ Cardinality Mô tả
Khách hàng → Đơn hàng 1 → 0.. Một khách hàng đặt nhiều đơn hàng theo thời gian.
Đơn hàng → Sản phẩm trong đơn hàng 1 → 0.. Mỗi đơn hàng chứa không hoặc nhiều món trong thực đơn.
Đơn hàng → Thanh toán 1 → 1 Mỗi đơn hàng hoàn tất đều có đúng một lần thanh toán.
Đơn hàng → Cửa hàng 1 → 1 Mỗi đơn hàng được đặt tại một cửa hàng cụ thể.
Cửa hàng → Nhân viên 1 → 0.. Một cửa hàng tuyển dụng nhiều nhân viên (thu ngân, đầu bếp, quản lý).
Cửa hàng → Đơn hàng 1 → 0.. Một cửa hàng nhận được nhiều đơn hàng.
Món ăn → Sản phẩm trong đơn hàng 1 → 0.. Một món ăn có thể xuất hiện trong nhiều đơn hàng.
Khuyến mãi → Đơn hàng 0 → 1 Một chương trình khuyến mãi có thể áp dụng cho một đơn hàng (ví dụ: “Mua 1 Big Mac, Tặng 1 miễn phí”).
Nhân viên → Cửa hàng 1 → 1 Mỗi nhân viên làm việc tại một cửa hàng.

✅ Tùy chọn: Thêm một Chương trình trung thànhthực thể nếu cần logic trung thành sâu hơn (ví dụ: đổi điểm, phần thưởng).


🔒 Ràng buộc và quy tắc kinh doanh

  • Giá phải lớn hơn 0

  • Trạng thái đơn hàng không thể là ‘Hoàn thành’ nếu thiếu thanh toán

  • Số lượng trong OrderItem ≥ 1

  • Khuyến mãi chỉ có thể được áp dụng nếu đang hoạt động và trong khung thời gian

  • Khách hàng phải được liên kết với ít nhất một đơn hàng để tích điểm trung thành

  • Các mục thực đơn sẽ được đánh dấu là ‘Không hoạt động’ nếu hết hàng hoặc ngừng kinh doanh


📝 Các trường hợp sử dụng (Tại sao ERD này quan trọng)

Trường hợp sử dụng Lợi ích
Thiết kế hệ thống POS Cho phép theo dõi đơn hàng theo thời gian thực, thanh toán và tạo hóa đơn
Thông báo tồn kho Khi một món thực đơn được đặt thường xuyên, theo dõi mức tồn kho
Chương trình trung thành Theo dõi tích điểm, cung cấp giảm giá cá nhân hóa
Phân tích cửa hàng Xác định các sản phẩm bán chạy nhất, giờ cao điểm, các chương trình khuyến mãi phổ biến
Quản lý nhân viên Phân công vai trò, theo dõi ca làm việc, quản lý hiệu suất

📂 Định dạng đầu ra

Bạn có thể sao chép và dán bất kỳ phần nào sau đây vào tài liệu, bài thuyết trình hoặc công cụ thiết kế cơ sở dữ liệu của mình.


✅ 1. ERD dựa trên văn bản (dành cho tài liệu)

Các thực thể:

- Khách hàng
  - CustomerID (Khóa chính)
  - Tên
  - Số điện thoại
  - Email
  - Điểm trung thành
  - Cấp bậc thành viên

- Cửa hàng
  - StoreID (Khóa chính)
  - Tên
  - Địa điểm
  - ManagerID (Khóa ngoại → Nhân viên)
  - Giờ mở cửa
  - Doanh thu hàng tháng

- Nhân viên
  - EmployeeID (Khóa chính)
  - Tên
  - Vai trò (Thu ngân, Đầu bếp, Quản lý)
  - StoreID (Khóa ngoại)
  - Ngày tuyển dụng

- Món ăn
  - MenuItemID (Khóa chính)
  - Tên
  - Mô tả
  - Giá
  - Danh mục
  - IsActive

- Đơn hàng
  - OrderID (Khóa chính)
  - Thời gian đặt
  - Trạng thái (Chờ xử lý, Đang chuẩn bị, Sẵn sàng, Hoàn thành, Hủy)
  - CustomerID (Khóa ngoại)
  - StoreID (Khóa ngoại)
  - Tổng tiền

- Chi tiết đơn hàng
  - OrderItemID (Khóa chính)
  - OrderID (Khóa ngoại)
  - MenuItemID (Khóa ngoại)
  - Số lượng
  - Thành tiền

- Thanh toán
  - PaymentID (Khóa chính)
  - Số tiền
  - Phương thức (Tiền mặt, Thẻ tín dụng, Ví điện tử)
  - OrderID (Khóa ngoại)
  - Thời điểm

- Khuyến mãi
  - PromotionID (Khóa chính)
  - Mã
  - Loại giảm giá
  - Giá trị giảm giá
  - Ngày kích hoạt
  - Ngày hết hạn
  - Áp dụng cho

Các mối quan hệ:
- Khách hàng "1" -- "0..*" Đơn hàng
- Đơn hàng "1" -- "0..*" Chi tiết đơn hàng
- Đơn hàng "1" -- "1" Thanh toán
- Đơn hàng "1" -- "1" Cửa hàng
- Cửa hàng "1" -- "0..*" Nhân viên
- Món ăn "1" -- "0..*" Chi tiết đơn hàng
- Khuyến mãi "0..*" -- "1" Đơn hàng (có điều kiện theo trạng thái hoạt động)

✅ 2. Phiên bản Mermaid.js (dành cho Markdown, Notion, Obsidian)

erDiagram
    CUSTOMER ||--o{ ORDER : "đặt"
    STORE ||--o{ ORDER : "phục vụ"
    STORE ||--o{ EMPLOYEE : "tuyển dụng"
    STORE ||--o{ MENU_ITEM : "bán"
    ORDER ||--o{ ORDER_ITEM : "chứa"
    ORDER ||--o{ PAYMENT : "có"
    MENU_ITEM ||--o{ ORDER_ITEM : "xuất hiện trong"
    PROMOTION ||--o{ ORDER : "áp dụng cho"

    CUSTOMER {
        int CustomerID PK
        string Name
        string Phone
        string Email
        int LoyaltyPoints
        string MembershipTier
    }

    STORE {
        int StoreID PK
        string Name
        string Location
        int ManagerID FK
        string OpenHours
        decimal MonthlySales
    }

    EMPLOYEE {
        int EmployeeID PK
        string Name
        string Role
        int StoreID FK
        date HireDate
    }

    MENU_ITEM {
        int MenuItemID PK
        string Name
        string Description
        decimal Price
        string Category
        boolean IsActive
    }

    ORDER {
        int OrderID PK
        datetime OrderTime
        string Status
        int CustomerID FK
        int StoreID FK
        decimal TotalAmount
    }

    ORDER_ITEM {
        int OrderItemID PK
        int OrderID FK
        int MenuItemID FK
        int Quantity
        decimal LineTotal
    }

    PAYMENT {
        int PaymentID PK
        decimal Amount
        string Method
        int OrderID FK
        datetime Timestamp
    }

    PROMOTION {
        int PromotionID PK
        string Code
        string DiscountType
        decimal DiscountValue
        datetime ActiveDate
        datetime ExpireDate
        string AppliesTo
    }


✅ 3. Phiên bản PlantUML 

' Sơ đồ quan hệ thực thể hệ thống đặt hàng McDonald's (PlantUML)

package "Hoạt động McDonald's" {
  entity "Khách hàng" {
    - CustomerID (PK)
    - Name
    - Phone
    - Email
    - Điểm tích lũy
    - Cấp bậc thành viên
  }

  entity "Cửa hàng" {
    - StoreID (PK)
    - Name
    - Location
    - ManagerID (FK → Nhân viên)
    - Giờ mở cửa
    - Doanh thu hàng tháng
  }

  entity "Nhân viên" {
    - EmployeeID (PK)
    - Name
    - Role (Thu ngân, Đầu bếp, Quản lý)
    - StoreID (FK → Cửa hàng)
    - Ngày tuyển dụng
  }

  entity "Món ăn" {
    - MenuItemID (PK)
    - Name
    - Description
    - Price
    - Category (Burger, Drink, Side)
    - IsActive
  }

  entity "Đơn hàng" {
    - OrderID (PK)
    - OrderTime
    - Status (Pending, Preparing, Ready, Completed)
    - CustomerID (FK → Khách hàng)
    - StoreID (FK → Cửa hàng)
    - TotalAmount
  }

  entity "Chi tiết đơn hàng" {
    - OrderItemID (PK)
    - OrderID (FK → Đơn hàng)
    - MenuItemID (FK → Món ăn)
    - Quantity
    - LineTotal
  }

  entity "Thanh toán" {
    - PaymentID (PK)
    - Amount
    - Method (Cash, CreditCard)
    - OrderID (FK → Đơn hàng)
    - Timestamp
  }

  entity "Khuyến mãi" {
    - PromotionID (PK)
    - Code (e.g., WELCOME10)
    - DiscountType (Percentage, Fixed)
    - DiscountValue
    - ActiveDate
    - ExpireDate
    - AppliesTo
  }

  Khách hàng "1" -- "0..*" Đơn hàng : "đặt"
  Đơn hàng "1" -- "0..*" Chi tiết đơn hàng : "chứa"
  Đơn hàng "1" -- "1" Thanh toán : "có"
  Đơn hàng "1" -- "1" Cửa hàng : "được đặt tại"
  Cửa hàng "1" -- "0..*" Nhân viên : "tuyển dụng"
  Món ăn "1" -- "0..*" Chi tiết đơn hàng : "xuất hiện trong"
  Khuyến mãi "0..*" -- "1" Đơn hàng : "áp dụng cho"
}

 


🔍 Mở rộng tương lai (Tùy chọn)

Nếu bạn muốn mở rộng sơ đồ ERD này, hãy cân nhắc thêm:

  • Kho hàng → Theo dõi mức tồn kho, điểm đặt hàng lại, thông tin nhà cung cấp

  • Lịch ca làm việc → Ca hàng ngày, thời gian nghỉ, phân công ca làm việc

  • Nhà cung cấp → Ai cung cấp nguyên liệu (ví dụ: “Nhà cung cấp phô mai”)

  • Thực đơn theo mùa → Các chương trình khuyến mãi đặc biệt (ví dụ: “Thực đơn BBQ mùa hè”)

  • Vị trí địa lý → Dùng để theo dõi giao hàng hoặc nhận hàng


🚀 Những suy nghĩ cuối cùng

Sơ đồ ERD này là thực tế, có thể mở rộng và phù hợp với hoạt động của McDonald’s — nó phản ánh đúng quy trình làm việc thực tế của hệ thống POS, vai trò nhân viên và hành vi khách hàng.

✅ Bây giờ bạn đã có một sơ đồ ERD hoàn chỉnh, sẵn sàng sử dụng cho hệ thống McDonald’s — dù là cho một dự án học đường, phân tích kinh doanh hay thiết kế kỹ thuật.

Sidebar Search
Loading

Signing-in 3 seconds...

Signing-up 3 seconds...