TÓM TẮT
- 1 Mở Đầu
- 2 1. Khái Niệm Cơ Bản và Các Thành Phần Của Sơ Đồ ER
- 3 2. Các Quy Tắc và Chuẩn Mực Thiết Kế ER
- 3.1 2.1. Nguyên Tắc 1: Mỗi Thực Thể Phải Có Khóa Chính
- 3.2 2.2. Nguyên Tắc 2: Không Đặt Thuộc Tính Lặp Lại
- 3.3 2.3. Nguyên Tắc 3: Xác Định Độ Bảo Đảm Đúng
- 3.4 2.4. Nguyên Tắc 4: Tránh Quan Hệ Nhiều‑Nhiều Khi Không Cần Thiết
- 3.5 2.5. Nguyên Tắc 5: Đặt Tên Rõ Ràng, Ngắn Gọn
- 3.6 2.6. Nguyên Tắc 6: Đảm Bảo Tính Tính Toán (Derivable Attributes)
- 4 3. Quy Trình Thiết Kế Sơ Đồ ER
- 5 4. Hướng Dẫn Vẽ Sơ Đồ ER Bằng Các Công Cụ Phổ Biến
- 6 5. Chuyển Đổi Sơ Đồ ER Sang Mô Hình Quan Hệ
- 7 6. Ví Dụ Thực Tế: Thiết Kế Hệ Thống Quản Lý Thư Viện
- 8 7. Những Lưu Ý Khi Thiết Kế Sơ Đồ ER Lớn
- 9 8. Tổng Kết
Mở Đầu
Sơ đồ thực thể – quan hệ (Entity‑Relationship Diagram – viết tắt là ER diagram) là một trong những công cụ quan trọng nhất trong lĩnh vực thiết kế cơ sở dữ liệu. Nó giúp chúng ta mô hình hoá các thực thể (entity), các thuộc tính (attribute) và các quan hệ (relationship) giữa chúng một cách trực quan, từ đó dễ dàng chuyển đổi thành mô hình dữ liệu quan hệ (relational model) để triển khai trên các hệ quản trị cơ sở dữ liệu (DBMS) như MySQL, PostgreSQL, Oracle, SQL Server, …
Bài viết này sẽ cung cấp cho bạn một hướng dẫn chi tiết, từng bước một, về cách vẽ sơ đồ ER. Nội dung bao gồm:
- Khái niệm cơ bản và các thành phần của sơ đồ ER.
- Các quy tắc và chuẩn mực thiết kế ER.
- Quy trình thiết kế từ thu thập yêu cầu tới hoàn thiện sơ đồ ER.
- Hướng dẫn vẽ sơ đồ ER bằng một số công cụ phổ biến (draw.io, Lucidchart, Microsoft Visio, MySQL Workbench).
- Các lưu ý khi chuyển đổi sơ đồ ER sang mô hình quan hệ.
- Một số ví dụ thực tế và mẫu sơ đồ ER cho các trường hợp thường gặp.
Bài viết sẽ đạt độ dài hơn 1500 chữ, cung cấp đủ kiến thức để người mới bắt đầu cũng như các nhà thiết kế dữ liệu có kinh nghiệm có thể áp dụng ngay vào dự án thực tế.
1. Khái Niệm Cơ Bản và Các Thành Phần Của Sơ Đồ ER
1.1. Thực Thể (Entity)
- Định nghĩa: Thực thể là một đối tượng có tồn tại trong thế giới thực hoặc trong một lĩnh vực nghiệp vụ, có thể được phân biệt một cách độc lập. Ví dụ: Khách hàng, Sản phẩm, Đơn hàng.
- Ký hiệu: Thực thể được biểu diễn bằng một hình chữ nhật, trong đó ghi tên thực thể (thường dùng danh từ số ít, viết hoa chữ đầu).
1.2. Thuộc Tính (Attribute)
- Định nghĩa: Thuộc tính là các đặc điểm mô tả thực thể. Ví dụ: thực thể Khách hàng có các thuộc tính MãKH, TênKH, Địa chỉ, Số điện thoại.
- Ký hiệu: Thuộc tính được vẽ bằng một hình elip (hoặc oval) nối với thực thể bằng một đường thẳng.
- Các loại thuộc tính:
- Thuộc tính đơn (Simple): Không thể chia nhỏ hơn (ví dụ: Tên).
- Thuộc tính phức (Composite): Gồm nhiều thành phần (ví dụ: Địa chỉ = Số nhà, Tên đường, Thành phố).
- Thuộc tính đa trị (Multi‑valued): Có thể có nhiều giá trị cho một thực thể (ví dụ: Số điện thoại của khách hàng). Được biểu diễn bằng elip đôi.
- Thuộc tính khóa (Key attribute): Được dùng để xác định duy nhất một thực thể. Thông thường được gạch chân.
1.3. Quan Hệ (Relationship)
- Định nghĩa: Quan hệ mô tả cách các thực thể tương tác, liên kết với nhau. Ví dụ: Khách hàng đặt Đơn hàng.
- Ký hiệu: Quan hệ được biểu diễn bằng một hình thoi (diamond) chứa tên quan hệ, nối với các thực thể liên quan bằng đường thẳng.
- Các loại quan hệ:
- Quan hệ một‑một (1:1): Mỗi thực thể trong tập A liên kết với tối đa một thực thể trong tập B và ngược lại.
- Quan hệ một‑nhiều (1:N): Một thực thể trong tập A có thể liên kết với nhiều thực thể trong tập B, nhưng một thực thể trong B chỉ liên kết với một thực thể trong A.
- Quan hệ nhiều‑nhiều (M:N): Một thực thể trong A có thể liên kết với nhiều thực thể trong B và ngược lại.
1.4. Độ Bảo Đảm (Cardinality) và Tính Tùy Thuộc (Optionality)
- Cardinality: Xác định số lượng tối đa và tối thiểu của các thực thể tham gia quan hệ.
- Optionality: Xác định liệu một thực thể có bắt buộc phải tham gia quan hệ hay không (có thể là 0 hoặc 1+).
Ký hiệu thường dùng:
| Độ bảo đảm | Ký hiệu (cạnh quan hệ) |
|---|---|
| 1 | Đường thẳng đơn |
| N (nhiều) | Đường thẳng ba chấm (cờ) hoặc ký hiệu “” |
| 0 hoặc 1 | Đường thẳng có vòng tròn (optional) |
| 1 hoặc N | Kết hợp dấu “ |
2. Các Quy Tắc và Chuẩn Mực Thiết Kế ER

Có thể bạn quan tâm: Cách Vẽ Sơ Đồ Dfd: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
2.1. Nguyên Tắc 1: Mỗi Thực Thể Phải Có Khóa Chính
- Mỗi thực thể cần ít nhất một thuộc tính (hoặc tập hợp thuộc tính) có khả năng nhận dạng duy nhất (Primary Key).
- Tránh sử dụng các thuộc tính có khả năng thay đổi (ví dụ: Tên). Thay vào đó dùng Mã (ID) tự động tăng hoặc UUID.
2.2. Nguyên Tắc 2: Không Đặt Thuộc Tính Lặp Lại
- Nếu một thuộc tính xuất hiện ở nhiều thực thể, cân nhắc tạo thực thể mới để chuẩn hoá. Ví dụ: Địa chỉ có thể được tách thành thực thể Địa chỉ và liên kết với Khách hàng và Nhà cung cấp.
2.3. Nguyên Tắc 3: Xác Định Độ Bảo Đảm Đúng
- Phân tích nghiệp vụ để đưa ra cardinality chính xác. Ví dụ, nếu một khách hàng có thể không bao giờ đặt đơn hàng, quan hệ Khách hàng – Đặt – Đơn hàng sẽ là (0..N) ở phía Đơn hàng và (1) ở phía Khách hàng.
2.4. Nguyên Tắc 4: Tránh Quan Hệ Nhiều‑Nhiều Khi Không Cần Thiết
- Quan hệ M:N thường được chuyển thành một thực thể trung gian (junction table) với khóa ngoại tới hai thực thể gốc. Điều này giúp việc chuyển đổi sang mô hình quan hệ dễ dàng hơn.
2.5. Nguyên Tắc 5: Đặt Tên Rõ Ràng, Ngắn Gọn
- Tên thực thể, thuộc tính và quan hệ nên phản ánh đúng khái niệm nghiệp vụ, tránh viết tắt không cần thiết.
- Ví dụ: Thay vì “KH”, dùng “KhachHang”.
2.6. Nguyên Tắc 6: Đảm Bảo Tính Tính Toán (Derivable Attributes)
- Các thuộc tính có thể tính toán từ các thuộc tính khác (ví dụ: Thành tiền = Số lượng × Đơn giá) không cần lưu trữ trong mô hình ER; chúng sẽ được tính trong ứng dụng hoặc view.
3. Quy Trình Thiết Kế Sơ Đồ ER
Bước 1: Thu Thập Yêu Cầu
- Phỏng vấn người dùng, đọc tài liệu nghiệp vụ, xác định các thực thể, thuộc tính và quan hệ chính.
- Kết quả: Danh sách các thực thể tiềm năng, các thuộc tính và các mối quan hệ cơ bản.
Bước 2: Xác Định Thực Thể và Thuộc Tính

Có thể bạn quan tâm: Cách Vẽ Sóng Mũi Cao: Hướng Dẫn Chi Tiết Từ Cơ Bản Đến Nâng Cao
- Phân loại các đối tượng thành thực thể (có tính độc lập) và các thuộc tính (các đặc tính của thực thể).
- Đánh dấu các thuộc tính khóa.
Bước 3: Xác Định Quan Hệ và Độ Bảo Đảm
- Vẽ các quan hệ giữa thực thể, đưa ra cardinality và optionality dựa trên quy tắc nghiệp vụ.
- Kiểm tra các quan hệ M:N, quyết định có tạo thực thể trung gian hay không.
Bước 4: Kiểm Tra Chuẩn Hóa (Normalization)
- Đảm bảo mô hình không có sự lặp lại dữ liệu (vi phạm chuẩn 1NF, 2NF, 3NF).
- Nếu phát hiện các thuộc tính phụ thuộc hàm vào không phải khóa, tạo thực thể mới.
Bước 5: Vẽ Sơ Đồ ER
- Sử dụng công cụ (draw.io, Lucidchart, Visio, MySQL Workbench…) để vẽ sơ đồ.
- Đặt tên, định dạng, sắp xếp sao cho dễ đọc, các thực thể và quan hệ không giao nhau quá nhiều.
Bước 6: Rà Soát và Xác Nhận
- Gửi sơ đồ cho các bên liên quan (business analyst, developer, DBA) để xác nhận.
- Sửa đổi dựa trên phản hồi.
Bước 7: Chuyển Đổi Sang Mô Hình Quan Hệ
- Từ sơ đồ ER, tạo các bảng, xác định khóa chính, khóa ngoại, ràng buộc.
- Đối với quan hệ M:N, tạo bảng trung gian với khóa ngoại tới hai bảng gốc và, nếu cần, các thuộc tính bổ sung.
4. Hướng Dẫn Vẽ Sơ Đồ ER Bằng Các Công Cụ Phổ Biến
4.1. draw.io (diagrams.net)
- Mở trang web: https://app.diagrams.net/
- Chọn “Blank Diagram” → Đặt tên file.
- Thêm hình chữ nhật → Đặt tên thực thể.
- Thêm elip → Đặt tên thuộc tính, kéo nối tới thực thể.
- Thêm hình thoi → Đặt tên quan hệ, nối tới các thực thể.
- Đặt cardinality: Click vào đường nối → “Style” → “Connector” → Thêm text “1”, “”, “0..1”.
- Lưu: File → Export as → PNG, PDF hoặc lưu trực tiếp trên Google Drive.
4.2. Lucidchart
- Đăng nhập/đăng ký Lucidchart.
- Tạo mới → “ER Diagram” template.
- Kéo “Entity” vào canvas, nhập tên và các thuộc tính (có thể thêm “PK” cho khóa).
- Dùng công cụ “Relationship” để nối các thực thể, thiết lập cardinality bằng cách click vào connector → “Properties”.
- Sử dụng “Layers” để tổ chức sơ đồ lớn.
- Export → PDF, PNG hoặc chia sẻ link.
4.3. Microsoft Visio
- Mở Visio → “Software and Database” → “Database Model Diagram”.
- Kéo “Entity” từ stencil vào canvas, nhập tên và các thuộc tính (có tùy chọn “Primary Key”).
- Dùng “Relationship” connector, thiết lập “Cardinality” trong cửa sổ “Relationship”.
- Visio hỗ trợ tự động tạo “Physical Database Model” → có thể xuất ra SQL script.
4.4. MySQL Workbench (Tích hợp)

Có thể bạn quan tâm: Cách Vẽ Sân Bóng Chuyền Chuẩn Như Chuyên Gia: Hướng Dẫn Từng Bước Chi Tiết
- Mở MySQL Workbench → “Database” → “Reverse Engineer” (nếu đã có DB) hoặc “Create EER Model”.
- Kéo “Place a New Table” → Đặt tên bảng (tương đương thực thể).
- Thêm cột, đánh dấu “PK”.
- Dùng “Place a New Relationship” → Chọn “One to Many” hoặc “Many to Many”.
- MySQL Workbench tự động sinh “Foreign Keys” và cho phép export diagram dưới dạng PNG hoặc PDF.
5. Chuyển Đổi Sơ Đồ ER Sang Mô Hình Quan Hệ
5.1. Thực Thể → Bảng
- Mỗi thực thể trở thành một bảng.
- Thuộc tính → Cột.
- Khóa chính (PK) → PRIMARY KEY.
- Các ràng buộc NOT NULL, UNIQUE dựa trên yêu cầu nghiệp vụ.
5.2. Quan Hệ 1:1
- Thêm khóa ngoại (FK) vào một trong hai bảng.
- Quyết định đặt FK ở phía nào dựa trên optionality (phía có tính tùy chọn thấp hơn thường chứa FK).
5.3. Quan Hệ 1:N
- Bảng “N” chứa khóa ngoại trỏ tới bảng “1”.
- Đảm bảo ràng buộc ON DELETE/ON UPDATE phù hợp (CASCADE, SET NULL, RESTRICT).
5.4. Quan Hệ M:N
- Tạo bảng trung gian (junction table) với:
- Hai cột khóa ngoại (FK1, FK2) tham chiếu tới bảng gốc.
- Khóa chính có thể là tổ hợp (FK1, FK2) hoặc một cột surrogate ID.
- Thêm các thuộc tính bổ sung nếu quan hệ có dữ liệu riêng (ví dụ: Ngày giao hàng trong quan hệ Đơn hàng – Sản phẩm).
5.5. Thuộc Tính Đa Giá Trị
- Tạo bảng phụ để lưu nhiều giá trị, mỗi giá trị là một dòng, cùng với FK trỏ về thực thể gốc.
5.6. Ví Dụ Chuyển Đổi
| ER Component | DB Table | Column Example |
|---|---|---|
| Thực thể KhachHang | KhachHang |
MaKH (PK), TenKH, DiaChi, SoDienThoai |
| Quan hệ Dat (1:N) giữa KhachHang và DonHang | DonHang |
MaDH (PK), MaKH (FK), NgayDH, TongTien |
| Quan hệ Chua (M:N) giữa DonHang và SanPham | ChiTietDonHang |
MaDH (FK), MaSP (FK), SoLuong, DonGia |
| Thuộc tính đa trị SoDienThoai | KhachHang_SDT |
MaKH (FK), SoDienThoai |
6. Ví Dụ Thực Tế: Thiết Kế Hệ Thống Quản Lý Thư Viện
6.1. Thu Thập Yêu Cầu

Có thể bạn quan tâm: Cách Vẽ Sách Giáo Khoa: Hướng Dẫn Chi Tiết Từ A Đến Z
- Thực thể chính: Sach, TacGia, TheLoai, DocGia, MuonTra.
- Quan hệ:
- Mỗi sách có một hoặc nhiều tác giả (M:N).
- Mỗi sách thuộc một thể loại (1:N).
- DocGia có thể mượn nhiều sách (1:N) và mỗi lần mượn tạo một bản ghi MuonTra.
- MuonTra có ngày mượn, ngày hẹn trả, ngày trả thực tế.
6.2. Định Nghĩa Thực Thể và Thuộc Tính
| Thực Thể | Thuộc Tính (khóa) |
|---|---|
| Sach | MaSach (PK), TenSach, NamXuatBan, SoLuong, MaTheLoai (FK) |
| TacGia | MaTG (PK), TenTG, QuocGia |
| TheLoai | MaTL (PK), TenTL |
| DocGia | MaDG (PK), TenDG, DiaChi, Email, NgayDangKy |
| MuonTra | MaMT (PK), MaDG (FK), MaSach (FK), NgayMuon, NgayHenTra, NgayTraThucTe |
6.3. Quan Hệ M:N: Sach – TacGia
- Tạo bảng trung gian Sach_TacGia:
MaSach(FK),MaTG(FK), PK tổ hợp (MaSach,MaTG).
6.4. Vẽ Sơ Đồ ER (bằng draw.io)
- Vẽ 5 hình chữ nhật cho các thực thể.
- Thêm các elip cho thuộc tính, gạch chân PK.
- Vẽ thoi “Viết” nối Sach và TacGia, đặt cardinality “” ở cả hai phía → M:N.
- Vẽ thoi “Thuộc” từ Sach tới TheLoai (1:N).
- Vẽ thoi “Mượn” từ DocGia tới MuonTra (1:N) và từ Sach tới MuonTra (1:N).
Kết quả là một sơ đồ ER sạch sẽ, thể hiện đầy đủ các thực thể, thuộc tính và quan hệ.
6.5. Chuyển Đổi Sang SQL (MySQL)
CREATE TABLE TheLoai ( MaTL INT PRIMARY KEY AUTO_INCREMENT, TenTL VARCHAR(100) NOT NULL
); CREATE TABLE TacGia ( MaTG INT PRIMARY KEY AUTO_INCREMENT, TenTG VARCHAR(100) NOT NULL, QuocGia VARCHAR(50)
); CREATE TABLE Sach ( MaSach INT PRIMARY KEY AUTO_INCREMENT, TenSach VARCHAR(200) NOT NULL, NamXuatBan YEAR, SoLuong INT DEFAULT 0, MaTL INT, FOREIGN KEY (MaTL) REFERENCES TheLoai(MaTL)
); CREATE TABLE Sach_TacGia ( MaSach INT, MaTG INT, PRIMARY KEY (MaSach, MaTG), FOREIGN KEY (MaSach) REFERENCES Sach(MaSach), FOREIGN KEY (MaTG) REFERENCES TacGia(MaTG)
); CREATE TABLE DocGia ( MaDG INT PRIMARY KEY AUTO_INCREMENT, TenDG VARCHAR(150) NOT NULL, DiaChi VARCHAR(250), Email VARCHAR(100), NgayDangKy DATE DEFAULT CURRENT_DATE
); CREATE TABLE MuonTra ( MaMT INT PRIMARY KEY AUTO_INCREMENT, MaDG INT, MaSach INT, NgayMuon DATE NOT NULL, NgayHenTra DATE NOT NULL, NgayTraThucTe DATE, FOREIGN KEY (MaDG) REFERENCES DocGia(MaDG), FOREIGN KEY (MaSach) REFERENCES Sach(MaSach)
);
7. Những Lưu Ý Khi Thiết Kế Sơ Đồ ER Lớn
- Phân Mảnh (Modularization)
- Khi sơ đồ quá lớn, chia thành các mô-đun con (ví dụ: “Quản lý người dùng”, “Quản lý sản phẩm”) và dùng sub‑diagram để liên kết.
- Sử Dụng Naming Conventions
- Prefix:
tbl_cho bảng,col_cho cột,fk_cho khóa ngoại, giúp đồng nhất trong toàn dự án. - Documenting
- Thêm chú thích (annotation) vào sơ đồ để giải thích các ràng buộc nghiệp vụ đặc biệt.
- Kiểm Tra Chuẩn 3NF
- Đảm bảo không có phụ thuộc bắc cầu (transitive dependency) trong bất kỳ bảng nào.
- Performance Considerations
- Khi tạo chỉ mục (index) cho các cột thường dùng trong WHERE hoặc JOIN, hãy cân nhắc trước khi hoàn thiện mô hình.
8. Tổng Kết
Việc vẽ sơ đồ ER không chỉ là một bước kỹ thuật mà còn là quá trình hiểu sâu về nghiệp vụ, cấu trúc dữ liệu và cách chúng tương tác. Bằng cách tuân thủ các nguyên tắc thiết kế, sử dụng đúng công cụ và thực hiện quy trình từng bước từ thu thập yêu cầu tới kiểm tra, bạn sẽ có được một mô hình dữ liệu mạnh mẽ, dễ bảo trì và có khả năng mở rộng.
Hãy áp dụng những kiến thức trong bài viết này vào dự án thực tế của bạn:
- Bắt đầu bằng việc liệt kê các thực thể và quan hệ.
- Vẽ sơ đồ bằng công cụ yêu thích, chú ý đến cardinality và optionality.
- Kiểm tra chuẩn hoá để tránh lặp dữ liệu.
- Chuyển đổi sang bảng quan hệ, tạo các khóa ngoại, chỉ mục.
Khi mọi thứ đã ổn định, bạn sẽ thấy việc triển khai cơ sở dữ liệu và phát triển ứng dụng trở nên nhanh chóng và ít lỗi hơn. Chúc bạn thành công trong việc thiết kế và vẽ sơ đồ ER cho mọi dự án!
