TÓM TẮT
Mở Đầu
Sơ đồ ERD (Entity‑Relationship Diagram) là một trong những công cụ quan trọng nhất trong việc thiết kế cơ sở dữ liệu quan hệ. Nó cho phép các nhà phân tích, kiến trúc sư dữ liệu và lập trình viên mô tả một cách trực quan các thực thể (entity), các thuộc tính (attribute) và các mối quan hệ (relationship) giữa chúng. Khi được vẽ đúng cách, ERD không chỉ giúp hiểu rõ cấu trúc dữ liệu mà còn giảm thiểu lỗi trong quá trình triển khai, tối ưu hoá hiệu năng và đảm bảo tính nhất quán dữ liệu.
Bài viết này sẽ hướng dẫn chi tiết “cách vẽ sơ đồ ERD” từ những khái niệm cơ bản, chuẩn bị công cụ, các bước thực hiện, cho tới các kỹ thuật nâng cao và các lưu ý khi làm việc trong môi trường thực tế. Nội dung được chia thành các phần chính:
- Khái niệm nền tảng – Giải thích các thành phần cơ bản của ERD.
- Chuẩn bị – Lựa chọn công cụ, thu thập yêu cầu và phân tích nghiệp vụ.
- Quy trình vẽ ERD – Các bước thực hiện chi tiết, kèm ví dụ thực tế.
- Kỹ thuật nâng cao – Mô hình hoá kế thừa, đa giá trị, siêu thực thể, v.v.
- Kiểm tra và tối ưu hoá – Đánh giá tính đúng đắn, chuẩn hoá (normalization) và tối ưu hoá cấu trúc.
- Triển khai – Chuyển đổi ERD thành câu lệnh SQL và các công cụ hỗ trợ.
- Lưu ý thường gặp – Những sai lầm phổ biến và cách phòng tránh.
Mục tiêu của bài viết là cung cấp cho bạn một hướng dẫn toàn diện, có thể áp dụng ngay vào dự án thực tế, dù bạn là người mới bắt đầu hay đã có kinh nghiệm trong lĩnh vực thiết kế dữ liệu.
1. Khái Niệm Nền Tảng
1.1. Thực Thể (Entity)
Thực thể là một đối tượng có ý nghĩa trong miền nghiệp vụ, có thể tồn tại độc lập và được phân biệt bằng một định danh duy nhất (primary key). Ví dụ: Khách Hàng, Sản Phẩm, Đơn Hàng. Mỗi thực thể thường được biểu diễn bằng một hình chữ nhật trong ERD.
1.2. Thuộc Tính (Attribute)

Có thể bạn quan tâm: Cách Vẽ Rau Củ Quả: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
Thuộc tính là các đặc điểm mô tả thực thể. Mỗi thuộc tính có một kiểu dữ liệu (số, chuỗi, ngày tháng…) và có thể có các ràng buộc (NOT NULL, UNIQUE…). Ví dụ: thực thể Khách Hàng có các thuộc tính CustomerID, Name, Email, Phone.
- Thuộc tính khóa (Key Attribute): là thuộc tính dùng làm định danh, thường là primary key (PK).
- Thuộc tính không khóa (Non‑Key Attribute): các thuộc tính còn lại.
- Thuộc tính đa giá trị (Multivalued Attribute): có thể chứa nhiều giá trị cho một thực thể (ví dụ:
PhoneNumberscủa khách hàng). Được biểu diễn bằng hình elip gấp đôi.
1.3. Mối Quan Hệ (Relationship)
Mối 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, Đơn Hàng chứa Sản Phẩm. Mối quan hệ được biểu diễn bằng hình thoi (diamond) và thường có tên (verb) mô tả hành động.
1.3.1. Độ Tham Chiếu (Cardinality)
- One‑to‑One (1:1): Mỗi bản ghi của thực thể A liên kết với tối đa một bản ghi của thực thể B và ngược lại.
- One‑to‑Many (1:N): Một bản ghi A có thể liên kết với nhiều bản ghi B, nhưng mỗi bản ghi B chỉ liên kết với một A.
- Many‑to‑Many (M:N): Một bản ghi A có thể liên kết với nhiều B và ngược lại. Để triển khai trong DBMS quan hệ, M:N thường phải chuyển thành hai quan hệ 1:N qua một bảng trung gian (junction table).
1.3.2. Tùy Chọn Tham Chiếu (Optionality)
- Mandatory: Bắt buộc phải có (đánh dấu bằng “|” hoặc “1”).
- Optional: Không bắt buộc (đánh dấu bằng “0” hoặc “O”).
1.4. Kiểu ERD
- Chen Notation: Dùng hình elip cho thuộc tính, hình thoi cho quan hệ, hình chữ nhật cho thực thể. Phổ biến trong sách giáo khoa.
- Crow’s Foot Notation: Được sử dụng rộng rãi trong công cụ phần mềm (Visio, Lucidchart, MySQL Workbench). Đặc trưng là “chân gà” (crow’s foot) biểu thị độ tham chiếu.
2. Chuẩn Bị Trước Khi Vẽ
2.1. Thu Thập Yêu Cầu
- Phân tích nghiệp vụ: Phỏng vấn người dùng cuối, nhà quản lý, xem tài liệu quy trình.
- Xác định các thực thể chính: Ghi lại những danh mục quan trọng (khách hàng, sản phẩm, đơn hàng…).
- Xác định các chức năng hệ thống: Các thao tác CRUD (Create, Read, Update, Delete) và các báo cáo cần thiết.
2.2. Lựa Chọn Công Cụ

Có thể bạn quan tâm: Cách Vẽ Quần Áo Chibi: Hướng Dẫn Từ Cơ Bản Đến Nâng Cao Cho Người Mới Bắt Đầu
| Công Cụ | Ưu Điểm | Nhược Điểm |
|---|---|---|
| MySQL Workbench | Miễn phí, tích hợp trực tiếp với MySQL, hỗ trợ forward/reverse engineering | Chỉ hỗ trợ MySQL, giao diện hơi cồng kềnh |
| Microsoft Visio | Đa dạng mẫu, tích hợp Office, hỗ trợ nhiều chuẩn | Có phí bản quyền, không tự động sinh SQL |
| Lucidchart | Web‑based, cộng tác thời gian thực, mẫu ERD phong phú | Giới hạn số diagram trong bản miễn phí |
| draw.io (diagrams.net) | Miễn phí, hỗ trợ lưu trên Google Drive/OneDrive | Không có tính năng reverse engineering |
| ER/Studio | Công cụ chuyên nghiệp, hỗ trợ nhiều DBMS | Đắt tiền, yêu cầu máy mạnh |
Chọn công cụ phù hợp với môi trường làm việc và ngân sách. Đối với dự án nhỏ hoặc học tập, draw.io hoặc Lucidchart là lựa chọn tốt. Đối với dự án doanh nghiệp, MySQL Workbench hoặc ER/Studio thường được ưu tiên.
2.3. Xây Dựng Tài Liệu Đầu Vào
- Document Specification (DS): Mô tả chi tiết các thực thể, thuộc tính, kiểu dữ liệu và ràng buộc.
- Business Rules: Các quy tắc nghiệp vụ (ví dụ: “Mỗi khách hàng chỉ có một địa chỉ giao hàng mặc định”).
- Data Dictionary: Bảng từ điển dữ liệu, liệt kê tên, mô tả, định dạng, độ dài, giá trị mặc định.
3. Quy Trình Vẽ ERD
Bước 1: Xác Định Thực Thể Chính
- Đọc lại DS và Business Rules.
- Liệt kê các danh mục (entity) xuất hiện trong các quy trình nghiệp vụ.
- Đặt tên thực thể bằng danh từ số nhiều hoặc số ít tùy chuẩn (ví dụ:
CustomerhoặcCustomers). - Vẽ hình chữ nhật cho mỗi thực thể trên bản vẽ.
Bước 2: Xác Định Thuộc Tính
- Đối với mỗi thực thể, liệt kê các thuộc tính đã xác định trong DS.
- Đánh dấu PK (Primary Key) – thường là
EntityID. - Nếu có FK (Foreign Key) – đánh dấu bằng “FK” và liên kết tới PK của thực thể tham chiếu.
- Nếu thuộc tính đa giá trị, vẽ elip gấp đôi và nối với thực thể.
Bước 3: Xác Định Mối Quan Hệ
- Dựa vào Business Rules, xác định các quan hệ giữa thực thể.
- Đặt tên quan hệ bằng động từ (verb) ở dạng hiện tại (ví dụ: “places”, “contains”).
- Vẽ thoi (diamond) và nối tới các thực thể tham gia.
- Xác định độ tham chiếu (1:1, 1:N, M:N) và vẽ ký hiệu tương ứng (crow’s foot, một đường thẳng, hoặc hai đường thẳng).
Bước 4: Xác Định Ràng Buộc và Tùy Chọn Tham Chiếu
- Đánh dấu mandatory (không thể null) bằng “|” hoặc “1”.
- Đánh dấu optional bằng “O” hoặc “0”.
- Đối với M:N, tạo bảng trung gian (junction table) ngay trong diagram, đặt PK là tổng hợp PK của hai thực thể gốc, và thêm các thuộc tính phụ nếu cần.
Bước 5: Kiểm Tra Tính Đúng Đắn

Có thể bạn quan tâm: Cách Vẽ Pokemon Hệ Lửa: Hướng Dẫn Từ Cơ Bản Đến Nâng Cao Cho Người Mới Bắt Đầu
- Kiểm tra vòng lặp: Không để có mối quan hệ vòng tròn không cần thiết.
- Kiểm tra khóa ngoại: Mỗi FK phải trỏ tới một PK hợp lệ.
- Kiểm tra định danh: Mỗi thực thể phải có một PK duy nhất, không trùng lặp.
Bước 6: Đánh Giá Chuẩn Hoá (Normalization)
Sơ đồ ERD ban đầu thường chưa chuẩn hoá. Thực hiện các bước chuẩn hoá:
- First Normal Form (1NF): Loại bỏ thuộc tính đa giá trị, tạo bảng phụ nếu cần.
- Second Normal Form (2NF): Đảm bảo mọi thuộc tính không khóa phụ thuộc toàn phần vào PK.
- Third Normal Form (3NF): Loại bỏ phụ thuộc chuyển tiếp (transitive dependency).
Nếu yêu cầu cao hơn, cân nhắc Boyce‑Codd Normal Form (BCNF) hoặc Fourth Normal Form (4NF).
Bước 7: Hoàn Thiện và Ghi Nhãn
- Thêm mô tả (description) cho mỗi thực thể và quan hệ nếu cần.
- Đánh số các thực thể (optional) để dễ tham chiếu trong tài liệu.
- Kiểm tra lại ngôn ngữ: dùng tiếng Anh cho quốc tế hoặc tiếng Việt cho dự án nội bộ, nhưng giữ nhất quán.
4. Kỹ Thuật Nâng Cao
4.1. Mô Hình Hoá Kế Thừa (Inheritance)
Khi một thực thể con chia sẻ một tập hợp thuộc tính với thực thể cha, có thể dùng:
- Generalization/Specialization (hình tam giác lên trên các thực thể con).
- Table‑Per‑Hierarchy (TPH): Tất cả thuộc tính của cha và con lưu trong một bảng, dùng cột “type” để phân biệt.
- Table‑Per‑Subclass (TPS): Bảng cha chứa PK và các thuộc tính chung, mỗi lớp con có bảng riêng chứa PK (FK tới bảng cha) và các thuộc tính riêng.
4.2. Siêu Thực Thể (Super‑Entity)
Khi nhiều thực thể có các thuộc tính chung, có thể tạo một super‑entity để giảm sự lặp lại. Ví dụ: Person (có Name, DOB) làm siêu thực thể cho Customer và Employee.
4.3. Thuộc Tính Tính Toán (Derived Attribute)

Có thể bạn quan tâm: Cách Vẽ Pikachu Dễ Nhất: Hướng Dẫn Từng Bước Cho Người Mới Bắt Đầu
Nếu một thuộc tính có thể tính toán từ các thuộc tính khác (ví dụ: Age từ DateOfBirth), không cần lưu trữ trong DB, chỉ đánh dấu là “derived”. Trên ERD, thường biểu diễn bằng elip gạch chéo.
4.4. Quan Hệ Tự Tham Chiếu (Recursive Relationship)
Một thực thể có thể liên kết tới chính nó (ví dụ: Employee “manages” Employee). Vẽ quan hệ từ thực thể tới chính nó, kèm độ tham chiếu (1:N) và mô tả (Manager‑Subordinate).
4.5. Multi‑Valued Relationships
Khi một quan hệ có thể có nhiều bản ghi cho một cặp thực thể, thường chuyển thành một bảng trung gian với các thuộc tính phụ (ví dụ: Student “enrolls in” Course – tạo bảng Enrollment lưu ngày đăng ký, điểm).
5. Kiểm Tra và Tối Ưu Hoá
5.1. Kiểm Tra Logic

- Consistency Check: Đảm bảo mỗi FK chỉ trỏ tới một PK duy nhất, không có FK “dangling”.
- Redundancy Check: Kiểm tra các thuộc tính lặp lại giữa các thực thể, xem có thể di chuyển lên super‑entity hay không.
- Cycle Detection: Loại bỏ các vòng lặp không cần thiết gây khó khăn trong việc xác định thứ tự insert/delete.
5.2. Đánh Giá Hiệu Suất
- Indexing: Đánh dấu các thuộc tính thường được truy vấn (FK, cột tìm kiếm) để tạo index.
- Denormalization: Trong một số trường hợp (báo cáo, OLAP), có thể tách ra một số bảng để giảm join, nhưng phải cân nhắc chi phí lưu trữ và rủi ro mất tính nhất quán.
- Partitioning: Khi bảng quá lớn, xem xét chia theo range hoặc hash để tối ưu query.
5.3. Tài Liệu Hóa
- Data Dictionary: Cập nhật đầy đủ cho mọi thực thể, thuộc tính, ràng buộc.
- ER Diagram Documentation: Ghi chú chi tiết cho mỗi quan hệ (business rule), ví dụ: “Một khách hàng có thể có nhiều địa chỉ, nhưng chỉ một địa chỉ mặc định”.
- Version Control: Lưu trữ ERD trong hệ thống quản lý phiên bản (Git) để theo dõi thay đổi.
6. Triển Khai: Từ ERD Đến Cơ Sở Dữ Liệu Thực Tế
6.1. Forward Engineering
Hầu hết các công cụ ERD hiện đại hỗ trợ Forward Engineering – tự động sinh câu lệnh SQL từ diagram:
CREATE TABLE Customer ( CustomerID INT AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(100) NOT NULL, Email VARCHAR(150) UNIQUE, Phone VARCHAR(20)
); CREATE TABLE Order ( OrderID INT AUTO_INCREMENT PRIMARY KEY, OrderDate DATE NOT NULL, CustomerID INT NOT NULL, FOREIGN KEY (CustomerID) REFERENCES Customer(CustomerID)
);
6.2. Reverse Engineering
Nếu đã có cơ sở dữ liệu hiện có, có thể dùng Reverse Engineering để tạo ERD từ schema, giúp kiểm tra sự đồng nhất giữa thiết kế và thực tế.
6.3. Migration Scripts
Khi thay đổi ERD (thêm bảng, sửa PK/FK), tạo script migration (ALTER TABLE) để
