(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.
- Công cụ sơ đồ quan hệ thực thể Visual Paradigm – Tạo sơ đồ quan hệ thực thể trực tuyến: Đây là một công cụ mạnh mẽ, dựa trên web giúp người dùng dễ dàng thiết kế và trực quan hóa các lược đồ cơ sở dữ liệu bằng các tính năng kéo và thả trực quan.
- Thiết kế cơ sở dữ liệu với công cụ ERD – Hướng dẫn của Visual Paradigm: Tài nguyên này cung cấp hướng dẫn toàn diện về việc sử dụng công cụ ERD để thiết kế các cơ sở dữ liệu mạnh mẽ, có thể mở rộng với các phương pháp tốt nhất trong mô hình hóa dữ liệu và thiết kế lược đồ.
- Công cụ ERD miễn phí – Thiết kế cơ sở dữ liệu trực tuyến với Visual Paradigm: Người dùng có thể truy cập công cụ ERD miễn phí, không tính phí trực tuyến để tạo các sơ đồ mối quan hệ thực thể chuyên nghiệpkhông cần cài đặt hay đăng ký.
- Làm thế nào để vẽ các thực thể trong ERD của Visual Paradigm: Đây là hướng dẫn từng bước cho người dùng tập trung vàotạo và tùy chỉnh các thực thểtrong công cụ ERD để mô hình hóa cơ sở dữ liệu chính xác.
- Làm thế nào để mô hình hóa cơ sở dữ liệu quan hệ bằng ERD – Hướng dẫn Visual Paradigm: Hướng dẫn thực tế này chỉ ra cách sử dụng ERD để mô hình hóacác cơ sở dữ liệu quan hệ một cách hiệu quảtừ ý tưởng ban đầu đến triển khai hoàn chỉnh.
- Tạo cơ sở dữ liệu từ ERD trong Visual Paradigm: Bài viết này cung cấp hướng dẫn chi tiết vềtự động tạo lược đồ cơ sở dữ liệutrực tiếp từ một ERD bằng cách sử dụng khả năng kỹ thuật ngược.
- Tạo sơ đồ lớp từ ERD – Hướng dẫn Visual Paradigm: Tài nguyên này dạy người dùng cáchchuyển đổi một ERD thành sơ đồ lớpđể hỗ trợ quy trình thiết kế và phát triển hướng đối tượng.
- Tối ưu hóa mô hình hóa thực thể – mối quan hệ với Visual Paradigm: Hướng dẫn này giải thích cách đơn giản hóa quy trình thiết kế và triển khai các mô hình thực thể – mối quan hệ từý tưởng ban đầu đến triển khai cơ sở dữ liệu cuối cùng.
- Kỹ thuật ngược cơ sở dữ liệu thành ERD trong Visual Paradigm: Bài hướng dẫn này dạy cáchkỹ thuật ngược một cơ sở dữ liệu hiện cóthành một sơ đồ thực thể – mối quan hệ (ERD) trực quan bằng cách sử dụng giao diện thân thiện và các công cụ mô hình hóa mạnh mẽ.
- Trình soạn thảo ERD ký hiệu Chen – Mô hình hóa thực thể – mối quan hệ nâng cao: Trình soạn thảo chuyên biệt này hỗ trợ mô hình hóa cơ sở dữ liệu chính xác với đầy đủ hỗ trợ cho các thực thể, thuộc tính, mối quan hệ và tính bội số sử dụngKý hiệu Chen.











