ERD: Bí kíp “đọc vị” cơ sở dữ liệu cho BA
- Tuan Anh
- 2 ngày trước
- 8 phút đọc

Trong bài viết này, chúng ta sẽ cùng tìm hiểu về cơ sở dữ liệu (database) và biểu đồ thực thể quan hệ (ERD - Entity Relationship Diagram). Mặc dù BA không cần phải hiểu sâu về cơ sở dữ liệu, nhưng việc hiểu biết cơ bản về cách thức dữ liệu được lưu trữ và tổ chức sẽ hỗ trợ bạn giao tiếp hiệu quả với dev cũng như nâng cao khả năng phân tích.
1. Cơ sở dữ liệu là gì?
Cơ sở dữ liệu là một tập hợp dữ liệu có cấu trúc, được tổ chức và lưu trữ để cho phép truy cập, quản lý và cập nhật một cách hiệu quả. Dữ liệu này có thể bao gồm thông tin khách hàng, sản phẩm, đơn hàng, giao dịch tài chính, hồ sơ nhân sự, v.v.
Cơ sở dữ liệu đóng vai trò quan trọng trong việc vận hành của hầu hết các ứng dụng phần mềm hiện nay. Ví dụ, cơ sở dữ liệu được sử dụng để:
Lưu trữ thông tin khách hàng trong hệ thống CRM.
Quản lý sản phẩm và đơn hàng trong hệ thống bán hàng trực tuyến.
Theo dõi dữ liệu tài chính trong hệ thống kế toán
Cách thức hoạt động:
Khi bạn tương tác với một ứng dụng, ví dụ như đăng nhập vào tài khoản ngân hàng trực tuyến:
Thông tin của bạn sẽ được gửi đến cơ sở dữ liệu.
Hệ thống sẽ xác thực thông tin đăng nhập của bạn dựa trên dữ liệu từ cơ sở dữ liệu và cho phép bạn truy cập vào tài khoản của mình.
Mọi thao tác bạn thực hiện trên ứng dụng, như chuyển tiền, xem số dư, đều được ghi lại và cập nhật trong cơ sở dữ liệu.
2. Các loại cơ sở dữ liệu:
Có hai loại cơ sở dữ liệu chính là SQL và NoSQL. Các loại này cần các phần mềm, hệ thống chuyên biệt để quản lý. Các phần mềm này còn được gọi là DBMS (database management system):
Cơ sở dữ liệu quan hệ (Relational Database - RDBMS):
Dữ liệu được tổ chức theo các bảng (table) với các hàng (row) và cột (column).
Các bảng có mối quan hệ với nhau thông qua các khóa (key).
Sử dụng ngôn ngữ truy vấn có cấu trúc (SQL) để thao tác với dữ liệu.
Ví dụ về các hệ quản trị cơ sở dữ liệu quan hệ (RDBMS): MySQL, PostgreSQL, SQL Server, Oracle
Cơ sở dữ liệu phi quan hệ (NoSQL Database):
Dữ liệu được tổ chức theo nhiều cách khác nhau, không nhất thiết phải theo bảng.
Có thể xử lý các loại dữ liệu đa dạng, bao gồm dữ liệu có cấu trúc, bán cấu trúc và phi cấu trúc.
Thường được sử dụng cho các ứng dụng big data, yêu cầu khả năng mở rộng cao.
Ví dụ về các hệ quản trị cơ sở dữ liệu phi quan hệ (NoSQL): MongoDB, Cassandra, Redis.
Lưu ý:
MySQL, SQL Server là các loại DBMS, không phải là bản thân cơ sở dữ liệu. Cơ sở dữ liệu là tập hợp dữ liệu, còn DBMS là công cụ để quản lý tập hợp dữ liệu đó.
3. ERD (Entity Relationship Diagram):
ERD là một loại biểu đồ được sử dụng để mô tả mối quan hệ giữa các thực thể (entity) trong cơ sở dữ liệu. Nó giúp hình dung cấu trúc dữ liệu và cách các thực thể liên kết với nhau.
Có 2 loại ERD phổ biến là Chen ERD và Crow‘s foot ERD. Trong bài này mình chỉ đề cập đến loại phổ biến hơn với BA là Crow’s foot ERD.


3. Các ký hiệu trong ERD:
Thực thể (Entity): Đại diện cho một object (đối tượng hoặc khái niệm trong thế giới thực), ví dụ: Khách hàng, Sản phẩm, Đơn hàng.
Thuộc tính (Attribute): Mô tả đặc điểm của thực thể, ví dụ: Họ tên, Địa chỉ, Giá cả. Trong đó, ngoài thuộc tính chung của entity, còn có 2 loại khác dùng để định danh và thể hiện mối quan hệ giữa các entity:
Khóa chính (Primary Key):
Là một thuộc tính hoặc tập hợp các thuộc tính dùng để xác định duy nhất một thực thể trong bảng.
Mỗi bảng trong cơ sở dữ liệu đều phải có một khóa chính.
Khóa chính không được trùng lặp và không được để trống (null)
Ví dụ: Mã khách hàng, Mã sản phẩm.
Khóa ngoại (Foreign Key):
Là một thuộc tính hoặc tập hợp các thuộc tính trong một bảng liên kết đến khóa chính của một bảng khác, tạo nên mối quan hệ giữa hai bảng.
Hiểu đơn giản thì khoá ngoại của bảng này là khoá chính của bảng kia. Việc lưu khoá ngoại như nào bạn tham khảo mục Mối quan hệ bên dưới.
Khóa ngoại giúp tạo mối quan hệ giữa các bảng, đảm bảo tính toàn vẹn dữ liệu.
Ví dụ, trong mối quan hệ "Khách hàng đặt Đơn hàng", khóa ngoại "Mã khách hàng" trong bảng "Đơn hàng" sẽ liên kết đến khóa chính "Mã khách hàng" trong bảng "Khách hàng".
Mối quan hệ (Relationship):
Mô tả mối liên kết giữa các thực thể.
Có nhiều mối quan hệ, tuy nhiên về bản chất thì chúng ta có 3 loại như: 1-1, 1-n và n-n. Chi tiết các bạn xem bên dưới nhé.
Ví dụ: Khi “Khách hàng” đặt “Đơn hàng”, dữ liệu của bảng “Khách hàng” và “Đơn hàng” sẽ là 1 khách hàng có thể có nhiều đơn hàng. Ở chiều ngược lại, 1 đơn hàng sẽ chỉ có thể được đặt bởi 1 khách hàng.
Ví dụ:

4. Giải thích mối quan hệ trong ERD
Các ký hiệu về các mối quan hệ trong ERD (notation - cadinary) được mix từ 2 dạng cơ bản là 1 (một) và n (nhiều). (Khi mix, nảy sinh ra thêm 1 ký hiệu "o" biểu đạt việc có thể không có liên hệ cho dữ liệu cụ thể của 2 bảng)
![]() | Mối quan hệ một (1) |
![]() | Mối quan hệ nhiều (n) |
Tuy nhiên, với BA các bạn k cần quá quan tâm đến các kiểu quan hệ mix giữa 2 loại trên. Trong công việc, mình thường chỉ sử dụng ký hiệu cơ bản “1” hoặc “n” khi vẽ ERD. 2 ký hiệu này là quá đủ cho việc phân tích và mô hình hoá mối quan hệ giữa các entity trong hệ thống.
Qua đó, chúng ta sẽ có các mối quan hệ cơ bản như sau:
1-1 (One-to-one):
Một thực thể chỉ có thể liên kết với một thực thể khác. Khi này, việc lưu khoá ngoại sẽ phụ thuộc vào thiết kế của dev team. Lưu ở bảng nào cũng được.
Ví dụ: Một người chỉ có thể có một số Chứng minh nhân dân. Khi này, ProfileID của user có thể lưu thành khoá ngoại ở bảng CMND. Hoặc ngược lại, số CMND có thể lưu ở bảng User Profile đều được.
1-n (One-to-many):
Một thực thể có thể liên kết với nhiều thực thể khác. Trong trường hợp này, khoá ngoại sẽ nằm ở bảng "n".
Ví dụ: Một khách hàng có thể có nhiều tài khoản ngân hàng.
Chú ý, về mặt lý thuyết, bạn hoàn toàn có thể lưu key của bảng "n" vào bảng "1":
Khi đó, thuộc tính "khoá ngoại" ở bảng "1" cần phải thay đổi thành dạng chuỗi để có thể lưu được nhiều key khác nhau của "n".
Ví dụ: thuộc tính "TKNganHang" của bảng "Khách hàng" cần phải chuyển thành dạng chuỗi và sẽ lưu lại nhiều "SoTKNganHang" từ bảng "Tài Khoản Ngân Hàng".
Tuy nhiên cách làm này không được khuyến khích trong thực tế vì nó dẫn đến nhiều vấn đề về thiết kế, hiệu năng và bảo trì:
Cấu trúc dữ liệu phức tạp: Việc lưu trữ một chuỗi các khóa ngoại trong một thuộc tính sẽ làm cho cấu trúc dữ liệu trở nên phức tạp và khó quản lý.
Khó khăn trong việc truy vấn dữ liệu: Việc truy vấn và lọc dữ liệu dựa trên các giá trị trong chuỗi sẽ phức tạp và kém hiệu quả hơn so với việc sử dụng khóa ngoại và bảng cầu nối.
Hạn chế về tính năng của cơ sở dữ liệu: Việc lưu trữ dữ liệu theo cách này có thể hạn chế khả năng sử dụng các tính năng của cơ sở dữ liệu, chẳng hạn như tạo ràng buộc toàn vẹn dữ liệu (data integrity constraints) và thực hiện các truy vấn phức tạp.
Khó bảo trì và mở rộng: Khi hệ thống phát triển và dữ liệu tăng lên, việc bảo trì và mở rộng cơ sở dữ liệu sẽ trở nên khó khăn hơn.
Vậy nên, với mối quan hệ 1-n, bên "n" sẽ lưu khoá của "1" thành khoá ngoại.
n-n (Many-to-many):
Nhiều thực thể có thể liên kết với nhiều thực thể khác.
Ví dụ: Một học sinh có thể tham gia nhiều lớp học, và một lớp học có thể có nhiều học sinh.
Bảng phụ hay Bảng cầu nối:
Như mình giải thích bên trên về việc lưu khoá. Với mối quan hệ n-n việc kết nối trực tiếp và lưu khoá của nhau sẽ dẫn đến nhiều hệ luỵ trong việc quản lý dữ liệu. Vậy nên với mối quan hệ n-n chúng ta cần sử dụng một bảng cầu nối để thể hiện mối quan hệ giữa hai thực thể.
Bảng cầu nối sẽ chứa các khóa ngoại (foreign key) liên kết đến hai bảng chính.
Ví dụ:
Hãy tưởng tượng bạn đang thiết kế cơ sở dữ liệu cho một ứng dụng quản lý thư viện. Bạn có hai thực thể chính là "Sách" và "Tác giả". Mỗi cuốn sách có thể có nhiều tác giả, và mỗi tác giả có thể viết nhiều cuốn sách. Đây là mối quan hệ n-n.
Để thể hiện mối quan hệ này, bạn cần tạo một bảng cầu nối, ví dụ "Sách_Tác giả", chứa hai khóa ngoại: "Mã sách" (liên kết đến bảng "Sách") và "Mã tác giả" (liên kết đến bảng "Tác giả").
Bảng "Sách" chứa thông tin về các cuốn sách, ví dụ: Tên sách, Năm xuất bản, Nhà xuất bản.
Bảng "Tác giả" chứa thông tin về các tác giả, ví dụ: Tên tác giả, Quốc tịch, Năm sinh.
Bảng "Sách_Tác giả" chứa thông tin về mối quan hệ giữa sách và tác giả. Mỗi hàng trong bảng này sẽ thể hiện một mối quan hệ giữa một cuốn sách và một tác giả.
Lợi ích:
Tránh trùng lặp dữ liệu: Nếu không sử dụng bảng cầu nối, bạn sẽ phải lặp lại thông tin tác giả trong mỗi cuốn sách, gây lãng phí không gian lưu trữ và khó khăn trong việc cập nhật thông tin.
Lưu trữ thông tin bổ sung: Bảng cầu nối cho phép bạn lưu trữ thêm thông tin về mối quan hệ giữa các thực thể. Ví dụ, trong bảng "Sách_Tác giả", bạn có thể lưu trữ thông tin về vai trò của từng tác giả trong cuốn sách (tác giả chính, đồng tác giả, dịch giả,...).
Tóm lại:
ERD là một công cụ hữu ích giúp BA hình dung cấu trúc dữ liệu và mối quan hệ giữa các thực thể. Việc hiểu biết về ERD giúp BA giao tiếp hiệu quả với các bên liên quan kỹ thuật và đưa ra các quyết định thiết kế phù hợp.





Bình luận