TÓM TẮT
- 1 1. Giới thiệu chung về ERD
- 2 2. Các thành phần cơ bản của ERD
- 3 3. Quy trình vẽ ERD từ A đến Z
- 3.1 Bước 1: Thu thập và phân tích yêu cầu
- 3.2 Bước 2: Xác định thực thể chính
- 3.3 Bước 3: Xác định thuộc tính cho mỗi thực thể
- 3.4 Bước 4: Xác định quan hệ giữa các thực thể
- 3.5 Bước 5: Vẽ sơ đồ ERD sơ bộ
- 3.6 Bước 6: Kiểm tra và tối ưu hóa
- 3.7 Bước 7: Chuyển đổi sang mô hình quan hệ (Relational Model)
- 3.8 Bước 8: Tạo script SQL hoặc mô hình ORM
- 3.9 Bước 9: Đánh giá với người dùng và điều chỉnh
- 3.10 Bước 10: Lưu trữ và quản lý phiên bản
- 4 4. Quy tắc đặt tên và ký hiệu chuẩn
- 5 5. Các công cụ hỗ trợ vẽ ERD phổ biến
- 6 6. Ví dụ thực tế: Vẽ ERD cho hệ thống bán hàng trực tuyến
- 7 7. Những lỗi thường gặp khi vẽ ERD và cách tránh
- 8 8. Mẹo nâng cao để làm ERD chuyên nghiệp
- 9 9. Tổng kết
1. Giới thiệu chung về ERD
Entity‑Relationship Diagram (viết tắt là ERD) là một công cụ trực quan dùng để mô tả cấu trúc dữ liệu của một hệ thống thông tin. ERD giúp các nhà phân tích, nhà phát triển và cả người dùng cuối cùng hiểu được cách các thực thể (entity) trong cơ sở dữ liệu liên kết với nhau, từ đó thiết kế được cơ sở dữ liệu chuẩn, giảm thiểu dư thừa và tăng tính toàn vẹn dữ liệu.
Trong môi trường phát triển phần mềm hiện đại, việc vẽ ERD không chỉ là một bước trong giai đoạn phân tích yêu cầu mà còn là nền tảng cho việc tạo lập mô hình dữ liệu, viết script SQL, và thậm chí là tạo mã ORM (Object‑Relational Mapping). Vì vậy, nắm vững “cách vẽ mô hình ERD” sẽ giúp bạn:
- Tiết kiệm thời gian thiết kế và triển khai database.
- Phát hiện sớm các lỗi logic trong mô hình dữ liệu.
- Giao tiếp hiệu quả hơn với các bên liên quan (stakeholder).
- Đảm bảo hệ thống có khả năng mở rộng và bảo trì tốt.
Bài viết dưới đây sẽ hướng dẫn chi tiết quy trình vẽ ERD chuẩn, từ việc chuẩn bị yêu cầu, xác định thực thể, quan hệ, thuộc tính, cho tới các quy tắc đặt tên, ký hiệu chuẩn và các công cụ hỗ trợ phổ biến. Ngoài ra, chúng tôi cũng cung cấp một số mẹo thực tiễn và ví dụ thực tế để bạn có thể áp dụng ngay trong dự án của mình.
2. Các thành phần cơ bản của ERD
2.1. Thực thể (Entity)
Thực thể là một đối tượng có thể tồn tại độc lập trong thế giới thực hoặc trong hệ thống, ví dụ: Khách hàng, Sản phẩm, Đơn hàng. Trong ERD, thực thể thường được biểu diễn bằng hình chữ nhật, trong đó viết tên thực thể bằng chữ in hoa (hoặc chữ thường tùy chuẩn công ty) và đặt ở giữa hình.

Có thể bạn quan tâm: Cách Vẽ Mô Hình Dfd: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
2.2. Thuộc tính (Attribute)
Thuộc tính là các đặc điểm, tính chất mô tả thực thể, ví dụ: Tên khách hàng, Ngày sinh, Giá bán. Thuộc tính được vẽ dưới dạng oval (hình bầu dục) hoặc đơn giản là một dòng chữ liệt kê trong hình chữ nhật thực thể (phương pháp Chen). Các loại thuộc tính quan trọng:
| Loại thuộc tính | Mô tả | Ký hiệu |
|---|---|---|
| Thuộc tính đơn (Simple) | Không thể chia nhỏ hơn | – |
| Thuộc tính phức tạp (Composite) | Gồm nhiều thành phần | — |
| Thuộc tính đa trị (Multivalued) | Có nhiều giá trị cho một thực thể | Đánh dấu vòng tròn đôi |
| Thuộc tính khóa (Key) | Dùng để nhận dạng duy nhất thực thể | Gạch chân hoặc viết in đậm |
2.3. Quan hệ (Relationship)
Quan hệ mô tả cách các thực thể tương tác với nhau, ví dụ: Khách hàng đặt Đơn hàng, Sản phẩm thuộc Danh mục. Trong ERD, quan hệ được biểu diễn bằng hình thoi (diamond) nối các thực thể. Tên quan hệ viết ở giữa thoi.
2.4. Độ bậc của quan hệ (Cardinality)
Độ bậc cho biết số lượng bản ghi của một thực thể có thể liên kết với một bản ghi của thực thể khác. Các mức độ phổ biến:
- One‑to‑One (1:1): Mỗi bản ghi của A liên kết với tối đa một bản ghi của B và ngược lại.
- One‑to‑Many (1:M): Mỗi bản ghi của A có thể liên kết với nhiều bản ghi của B, nhưng mỗi bản ghi của B chỉ liên kết với một bản ghi của A.
- Many‑to‑Many (M:N): Mỗi bản ghi của A có thể liên kết với nhiều bản ghi của B và ngược lại.
Độ bậc được ký hiệu bằng các dấu “cạnh” (cạnh 1, N, M) hoặc bằng các ký hiệu “cây” (cây “cánh” – “cánh”).

Có thể bạn quan tâm: Cách Vẽ Móng Đơn Giản: Hướng Dẫn Từng Bước Cho Người Mới Bắt Đầu
2.5. Ràng buộc (Constraint)
Ràng buộc là các quy tắc bổ sung để đảm bảo tính toàn vẹn dữ liệu, ví dụ: NOT NULL, UNIQUE, CHECK, FOREIGN KEY. Khi vẽ ERD, các ràng buộc thường được ghi chú dưới dạng chú thích (comment) hoặc trong thuộc tính khóa.
3. Quy trình vẽ ERD từ A đến Z
Bước 1: Thu thập và phân tích yêu cầu
- Phỏng vấn người dùng: Xác định các thực thể và quy trình nghiệp vụ chính.
- Xem tài liệu hiện có: Báo cáo, biểu mẫu, tài liệu hệ thống cũ.
- Lập danh sách chức năng: Ví dụ: “Quản lý khách hàng”, “Xử lý đơn hàng”.
Bước 2: Xác định thực thể chính
- Lọc các danh từ trong yêu cầu: “Khách hàng”, “Sản phẩm”, “Đơn hàng”, “Nhân viên”.
- Kiểm tra tính độc lập: Thực thể phải có ý nghĩa riêng, không phụ thuộc vào thực thể khác để tồn tại.
- Đánh dấu thực thể tiềm năng: Ghi chú trong tài liệu sơ bộ.
Bước 3: Xác định thuộc tính cho mỗi thực thể
- Liệt kê các tính chất: Tên, Địa chỉ, Số điện thoại, Giá, Số lượng.
- Xác định khóa chính (Primary Key): Thường là mã số duy nhất (ID) hoặc tổ hợp các thuộc tính.
- Phân loại thuộc tính: Đơn, phức tạp, đa trị, khóa.
Bước 4: Xác định quan hệ giữa các thực thể

Có thể bạn quan tâm: Cách Vẽ Móng Viền Trắng Đẹp, Bền Đẹp Và Thời Trang Cho Mọi Dịp
- Phân tích động từ trong yêu cầu: “đặt”, “có”, “thuộc”.
- Đặt tên quan hệ sao cho mô tả được hành động (verb) hoặc trạng thái (noun).
- Xác định độ bậc: Dựa vào quy tắc nghiệp vụ (ví dụ: một khách hàng có thể đặt nhiều đơn hàng → 1:M).
Bước 5: Vẽ sơ đồ ERD sơ bộ
- Sử dụng giấy và bút hoặc công cụ trực tuyến (draw.io, Lucidchart, Microsoft Visio, MySQL Workbench).
- Đặt thực thể ở vị trí dễ nhìn, quan hệ ở trung tâm.
- Ký hiệu độ bậc: Thêm “1”, “N”, “M” hoặc “cây” ở mỗi đầu của quan hệ.
Bước 6: Kiểm tra và tối ưu hóa
- Kiểm tra tính toàn vẹn: Mỗi thực thể có khóa chính, không có thuộc tính lặp lại.
- Rà soát độ bậc: Đảm bảo không có quan hệ M:N không được chuyển thành bảng trung gian.
- Xác định bảng trung gian (junction table) cho các quan hệ M:N, ví dụ: Order_Product.
Bước 7: Chuyển đổi sang mô hình quan hệ (Relational Model)
- Thực thể → Bảng.
- Thuộc tính → Cột.
- Khóa chính → PRIMARY KEY.
- Khóa ngoại → FOREIGN KEY (dựa trên quan hệ).
- Ràng buộc: NOT NULL, UNIQUE, CHECK.
Bước 8: Tạo script SQL hoặc mô hình ORM
- MySQL:
CREATE TABLE,ALTER TABLE. - PostgreSQL: Tương tự, thêm
SERIALcho ID. - ORM: Định nghĩa model trong Django, Sequelize, Hibernate, v.v.
Bước 9: Đánh giá với người dùng và điều chỉnh
- Trình bày ERD cho các bên liên quan, nhận phản hồi.
- Sửa đổi nếu có thực thể/quan hệ bị thiếu hoặc thừa.
Bước 10: Lưu trữ và quản lý phiên bản
- Lưu file ERD ở định dạng chuẩn (PNG, SVG, .mwb, .vsdx).
- Sử dụng Git hoặc hệ thống quản lý tài liệu để theo dõi thay đổi.
4. Quy tắc đặt tên và ký hiệu chuẩn

Có thể bạn quan tâm: Cách Vẽ Móng Chân Đẹp: Hướng Dẫn Từng Bước Để Tự Tạo Đẹp Mỗi Ngày
| Thành phần | Quy tắc đặt tên | Ký hiệu trong ERD |
|---|---|---|
| Thực thể | Danh từ danh nghĩa, số ít, viết hoa đầu (Customer) | Hình chữ nhật |
| Thuộc tính | Danh từ mô tả, viết thường, không chứa khoảng trắng (first_name) | Oval hoặc trong hình chữ nhật |
| Khóa chính | Thêm hậu tố _id hoặc ID (customer_id) |
Gạch chân hoặc in đậm |
| Khóa ngoại | Tên thực thể + _id (order_customer_id) |
Ghi chú dưới thuộc tính |
| Quan hệ | Động từ hoặc cụm danh từ (places, belongs_to) | Hình thoi |
| Độ bậc | 1, N, M hoặc “cây” | Ghi trên/đánh dấu cạnh quan hệ |
Lưu ý quan trọng:
- Tránh dùng ký tự đặc biệt, dấu cách trong tên.
- Đặt tên ngắn gọn nhưng đủ ý nghĩa.
- Giữ nhất quán trong toàn bộ mô hình (cùng một quy tắc cho tất cả thực thể).
5. Các công cụ hỗ trợ vẽ ERD phổ biến
| Công cụ | Nền tảng | Ưu điểm | Nhược điểm |
|---|---|---|---|
| MySQL Workbench | Desktop (Windows, macOS, Linux) | Tích hợp trực tiếp với MySQL, tự động tạo SQL | Chỉ hỗ trợ MySQL/MariaDB |
| Microsoft Visio | Desktop | Đồ họa chuyên nghiệp, tích hợp Office | Giá bản quyền cao |
| draw.io (diagrams.net) | Web, Desktop | Miễn phí, đa dạng mẫu, export đa định dạng | Không có tính năng tự động sinh SQL |
| Lucidchart | Web | Hợp tác thời gian thực, mẫu ERD phong phú | Gói trả phí cho tính năng nâng cao |
| ER/Studio | Desktop | Quản lý mô hình lớn, hỗ trợ nhiều DB | Phức tạp, chi phí cao |
| DbSchema | Desktop | Tự động reverse‑engineer DB, tạo diagram tương tác | Giao diện hơi cồng kềnh |
| DBeaver | Desktop | Hỗ trợ nhiều DB, tích hợp diagram | Tính năng diagram không mạnh bằng công cụ chuyên dụng |
| SQL Power Architect | Desktop | Mã nguồn mở, hỗ trợ đa DB | Giao diện cũ, ít cập nhật |
Lựa chọn công cụ nên dựa vào:
- Loại database bạn đang dùng.
- Nhu cầu cộng tác (đội ngũ làm việc từ xa hay tại chỗ).
- Ngân sách và yêu cầu bảo mật.
6. Ví dụ thực tế: Vẽ ERD cho hệ thống bán hàng trực tuyến
6.1. Yêu cầu nghiệp vụ chính
- Quản lý khách hàng (đăng ký, cập nhật thông tin).
- Quản lý sản phẩm (thêm, sửa, xóa, phân loại).
- Quản lý đơn hàng (khách hàng đặt hàng, thanh toán, giao hàng).
- Quản lý kho (theo dõi số lượng tồn).
6.2. Xác định thực thể
| Thực thể | Thuộc tính chính |
|---|---|
| Customer | customer_id (PK), first_name, last_name, email, phone, address, created_at |
| Product | product_id (PK), name, description, price, category_id (FK), stock_qty |
| Category | category_id (PK), name, parent_category_id (FK – self‑reference) |
| Order | order_id (PK), order_date, status, total_amount, customer_id (FK) |
| OrderItem | order_item_id (PK), order_id (FK), product_id (FK), quantity, unit_price |
| Supplier | supplier_id (PK), name, contact_email, phone |
| ProductSupplier | product_id (PK,FK), supplier_id (PK,FK), supply_price |
6.3. Xác định quan hệ và độ bậc
- Customer – Order: 1:M (một khách hàng có nhiều đơn)
- Order – OrderItem: 1:M (một đơn có nhiều mặt hàng)
- Product – OrderItem: 1:M (một sản phẩm có thể xuất hiện trong nhiều OrderItem)
- Category – Product: 1:M (một danh mục có nhiều sản phẩm)
- Category – Category (self‑reference): 1:M (danh mục cha – con)
- Product – Supplier: M:N → tạo bảng trung gian ProductSupplier (M:N chuyển thành 2 quan hệ 1:M)
6.4. Vẽ sơ đồ (mô tả bằng văn bản)
Customer 1---< places >---M Order 1---< contains >---M OrderItem M---belongs_to---1 Product M---belongs_to---1 Category | v Payment (optional)
- Các thực thể được đặt thành hình chữ nhật, quan hệ bằng thoi với tên “places”, “contains”, “belongs_to”.
- Độ bậc được ghi “1” và “M” ở mỗi đầu.
- Khóa chính gạch chân, khóa ngoại ghi chú dưới thuộc tính.
6.5. Chuyển sang mô hình quan hệ (SQL mẫu)

CREATE TABLE Customer ( customer_id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, phone VARCHAR(20), address TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
); CREATE TABLE Category ( category_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, parent_category_id INT, FOREIGN KEY (parent_category_id) REFERENCES Category(category_id)
); CREATE TABLE Product ( product_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(150) NOT NULL, description TEXT, price DECIMAL(10,2) NOT NULL, stock_qty INT DEFAULT 0, category_id INT, FOREIGN KEY (category_id) REFERENCES Category(category_id)
); CREATE TABLE `Order` ( order_id INT AUTO_INCREMENT PRIMARY KEY, order_date DATE NOT NULL, status VARCHAR(20) NOT NULL, total_amount DECIMAL(12,2) NOT NULL, customer_id INT, FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
); CREATE TABLE OrderItem ( order_item_id INT AUTO_INCREMENT PRIMARY KEY, order_id INT, product_id INT, quantity INT NOT NULL, unit_price DECIMAL(10,2) NOT NULL, FOREIGN KEY (order_id) REFERENCES `Order`(order_id), FOREIGN KEY (product_id) REFERENCES Product(product_id)
); CREATE TABLE Supplier ( supplier_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(150) NOT NULL, contact_email VARCHAR(100), phone VARCHAR(20)
); CREATE TABLE ProductSupplier ( product_id INT, supplier_id INT, supply_price DECIMAL(10,2) NOT NULL, PRIMARY KEY (product_id, supplier_id), FOREIGN KEY (product_id) REFERENCES Product(product_id), FOREIGN KEY (supplier_id) REFERENCES Supplier(supplier_id)
);
6.6. Kiểm tra và điều chỉnh
- Kiểm tra toàn vẹn: Mỗi bảng có PK, FK đúng.
- Ràng buộc nghiệp vụ: Thêm
CHECK (quantity > 0)choOrderItem. - Tối ưu: Tạo index trên
order_date,customer_idđể tăng tốc truy vấn.
7. Những lỗi thường gặp khi vẽ ERD và cách tránh
| Lỗi | Nguyên nhân | Cách khắc phục |
|---|---|---|
| Thiếu khóa chính | Quên đánh dấu thuộc tính duy nhất | Luôn xác định PK ngay khi tạo thực thể |
| Quan hệ M:N không chuyển thành bảng trung gian | Không nhận ra mức độ phức tạp | Khi thấy M:N → tạo bảng junction ngay |
| Thuộc tính lặp lại ở nhiều thực thể | Thiết kế không chuẩn hoá | Áp dụng chuẩn hoá (1NF, 2NF, 3NF) để tách thuộc tính chung |
| Độ bậc không chính xác | Hiểu sai quy tắc nghiệp vụ | Kiểm tra lại quy trình nghiệp vụ, hỏi stakeholder |
| Tên thực thể/thuộc tính không nhất quán | Không có quy chuẩn đặt tên | Định nghĩa style guide (ví dụ: snake_case cho DB) |
| Quên ràng buộc NOT NULL cho trường bắt buộc | Không chú ý tới yêu cầu bắt buộc | Đánh dấu các trường bắt buộc trong ERD và chuyển thành NOT NULL trong SQL |
| Biểu đồ quá rối, khó đọc | Đặt thực thể ngẫu nhiên, không sắp xếp hợp lý | Sắp xếp theo tầng (entity‑level, relationship‑level) và sử dụng màu sắc/nhóm để phân tách |
8. Mẹo nâng cao để làm ERD chuyên nghiệp
- Sử dụng màu sắc và nhóm: Đánh dấu các thực thể thuộc cùng một module (ví dụ: màu xanh cho “Customer”, màu cam cho “Order”) để tăng khả năng đọc nhanh.
- Áp dụng chuẩn Crow’s Foot: Đây là ký hiệu phổ biến cho độ bậc, giúp người xem nhanh chóng nhận ra 1:M, M:N.
- Tự động reverse‑engineer: Khi đã có cơ sở dữ liệu, dùng công cụ như MySQL Workbench, DbSchema để tạo ERD ngược lại, sau đó chỉnh sửa.
- Document annotation: Ghi chú các ràng buộc nghiệp vụ phức tạp (ví dụ: “Một khách hàng chỉ được phép có tối đa 5 đơn chưa thanh toán”) dưới dạng comment trong diagram.
- Version control: Lưu diagram dưới dạng file text (VD: .xml của draw.io) để dễ diff và merge trong Git.
- Kiểm tra chuẩn hoá: Dùng checklist chuẩn hoá 3NF để rà soát nhanh.
- Thêm layer “view”: Đối với các hệ thống lớn, tạo một layer “Logical ERD” (chỉ các thực thể chính) và “Physical ERD” (có chi tiết bảng, index, partition).
9. Tổng kết
Việc vẽ mô hình ERD không chỉ là một bước kỹ thuật mà còn là quá trình tư duy logic, phân tích nghiệp vụ và giao tiếp. Khi nắm vững các thành phần cơ bản (entity, attribute, relationship, cardinality) và tuân thủ quy trình từ thu thập yêu cầu, xác định thực thể, quan hệ, đến tối ưu hoá và chuyển đổi sang mô hình quan hệ, bạn sẽ có một cơ sở dữ liệu sạch, chuẩn và dễ bảo trì.
Hãy luôn nhớ:
- Bắt đầu bằng yêu cầu thực tế, không vội vẽ mẫu.
- Đặt tên thống nhất, tránh lỗi ngầm.
- Kiểm tra độ bậc và chuẩn hoá trước khi chuyển sang SQL.
- Sử dụng công cụ hỗ trợ phù hợp với dự án và đội ngũ.
- Lưu trữ, quản lý phiên bản để có thể theo dõi thay đổi và phục hồi khi cần.
Hy vọng bài viết “Cách vẽ mô hình ERD” đã cung cấp cho bạn một lộ trình chi tiết, từ A đến Z, để tạo ra những sơ đồ ERD chuẩn đẹp, giúp dự án của bạn tiến hành suôn sẻ và đạt được chất lượng cao. Chúc bạn thành công trong việc thiết kế cơ sở dữ liệu và xây dựng hệ thống!
