Chương 1 / Tổng quan
Bài tập

1.1 Khái niệm cơ sở dữ liệu

Chương 1 - Tổng quan về CSDL
0:00
Khái niệm cơ sở dữ liệu. Trong thực tế các hoạt động quản lý đều gắn với lưu trữ, xử lý và khai thác thông tin. Ví dụ quản lý hồ sơ sinh viên, nhân sự, bán hàng, tài chính. Khi dữ liệu ngày càng tăng về số lượng và độ phức tạp, cách lưu trữ rời rạc trong các tệp tin riêng lẻ của từng ứng dụng bộc lộ nhiều hạn chế như trùng lặp dữ liệu, khó bảo đảm tính nhất quán, khó chia sẻ thông tin và khó bảo mật. Cơ sở dữ liệu là một tập hợp dữ liệu có liên quan với nhau, được tổ chức, lưu trữ và quản lý một cách có cấu trúc trên các thiết bị lưu trữ, nhằm phục vụ hiệu quả cho việc khai thác, cập nhật và chia sẻ thông tin của nhiều người dùng theo các yêu cầu xác định. So với tệp tin truyền thống, cơ sở dữ liệu tổ chức dữ liệu tập trung có cấu trúc, giảm dư thừa, bảo đảm nhất quán nhờ ràng buộc, dễ chia sẻ cho nhiều người dùng, do hệ quản trị kiểm soát toàn vẹn tự động, phân quyền chi tiết, có tính độc lập cao, dễ mở rộng, truy vấn linh hoạt, sao lưu phục hồi tự động, hỗ trợ nhiều người dùng đồng thời và tối ưu cho dữ liệu lớn. Ví dụ thay vì mỗi phòng ban giữ một tệp Excel riêng về sinh viên, một cơ sở dữ liệu sinh viên dùng chung giúp tránh trùng lặp và bảo đảm mọi phòng ban thấy cùng một thông tin.

1.1 Khái niệm cơ sở dữ liệu

Đặt vấn đề: Trong thực tế, các hoạt động quản lý và điều hành đều gắn liền với lưu trữ, xử lý và khai thác thông tin. Ví dụ quản lý hồ sơ sinh viên, nhân sự, bán hàng, tài chính. Khi dữ liệu ngày càng tăng về số lượng và độ phức tạp, cách lưu trữ rời rạc trong các tệp tin riêng lẻ của từng ứng dụng bộc lộ nhiều hạn chế: trùng lặp dữ liệu, khó bảo đảm tính nhất quán, khó chia sẻ thông tin, khó bảo mật.

Định nghĩa: Cơ sở dữ liệu là một tập hợp dữ liệu có liên quan với nhau, được tổ chức, lưu trữ và quản lý một cách có cấu trúc trên các thiết bị lưu trữ, nhằm phục vụ hiệu quả cho việc khai thác, cập nhật và chia sẻ thông tin của nhiều người dùng theo các yêu cầu xác định.

So sánh với tệp tin truyền thống:

  • Tổ chức dữ liệu: tệp tin rời rạc trong các tệp riêng lẻ; cơ sở dữ liệu tổ chức tập trung, có cấu trúc.
  • Dư thừa dữ liệu: tệp tin cao, dễ trùng lặp; cơ sở dữ liệu giảm tối đa dư thừa.
  • Tính nhất quán: tệp tin khó bảo đảm khi cập nhật; cơ sở dữ liệu bảo đảm nhờ ràng buộc.
  • Chia sẻ dữ liệu: tệp tin khó chia sẻ, thường theo từng ứng dụng; cơ sở dữ liệu dễ chia sẻ cho nhiều người dùng.
  • Toàn vẹn dữ liệu: tệp tin phụ thuộc chương trình; cơ sở dữ liệu do hệ quản trị kiểm soát tự động.
  • Bảo mật: tệp tin thô sơ, khó phân quyền; cơ sở dữ liệu phân quyền chi tiết, linh hoạt.
  • Độc lập dữ liệu: tệp tin phụ thuộc chặt vào chương trình; cơ sở dữ liệu có tính độc lập cao.
  • Khả năng mở rộng: tệp tin khó mở rộng, bảo trì; cơ sở dữ liệu dễ mở rộng và nâng cấp.
  • Truy vấn dữ liệu: tệp tin cần lập trình riêng; cơ sở dữ liệu truy vấn linh hoạt.
  • Sao lưu - phục hồi: tệp tin thủ công, không đồng bộ; cơ sở dữ liệu hỗ trợ tự động, an toàn.
  • Xử lý đồng thời: tệp tin hạn chế, dễ xung đột; cơ sở dữ liệu hỗ trợ nhiều người dùng.
  • Hiệu suất tổng thể: tệp tin giảm khi dữ liệu lớn; cơ sở dữ liệu tối ưu cho dữ liệu lớn.

Ví dụ: Thay vì mỗi phòng ban trong trường đại học giữ một tệp Excel riêng về sinh viên, một cơ sở dữ liệu sinh viên dùng chung giúp tránh trùng lặp và bảo đảm mọi phòng ban thấy cùng một thông tin.

1.2 Vai trò của cơ sở dữ liệu trong hệ thống thông tin

Chương 1 - Tổng quan về CSDL
0:00
Vai trò của cơ sở dữ liệu trong hệ thống thông tin. Cơ sở dữ liệu là nền tảng của hệ thống thông tin, bảo đảm dữ liệu được tổ chức, lưu trữ, khai thác và bảo vệ hiệu quả. Các vai trò chính gồm tổ chức và quản lý dữ liệu, bảo đảm toàn vẹn dữ liệu, bảo mật và phân quyền truy cập, xử lý truy cập đồng thời, bảo đảm tính nhất quán trong giao dịch theo ACID, tính độc lập dữ liệu, hiệu năng và tối ưu truy vấn, sao lưu và phục hồi dữ liệu. ACID gồm nguyên tố nghĩa là giao dịch thực hiện toàn bộ hoặc không thực hiện gì, nhất quán đưa cơ sở dữ liệu từ trạng thái nhất quán này sang trạng thái nhất quán khác, cô lập các giao dịch đồng thời không ảnh hưởng lẫn nhau, bền vững các giao dịch được lưu trữ vĩnh viễn dù hệ thống bị sập. Tóm tắt lợi ích là lưu trữ và quản lý dữ liệu tập trung phục vụ toàn bộ hệ thống thông tin, cung cấp dữ liệu chính xác kịp thời cho các chức năng nghiệp vụ, hỗ trợ chia sẻ và truy cập đồng thời, bảo đảm an toàn toàn vẹn và nhất quán dữ liệu, là nền tảng cho phân tích báo cáo và hỗ trợ ra quyết định.

1.2 Vai trò của cơ sở dữ liệu trong hệ thống thông tin

Cơ sở dữ liệu là nền tảng của hệ thống thông tin, bảo đảm dữ liệu được tổ chức, lưu trữ, khai thác và bảo vệ hiệu quả. Các vai trò chính:

  • Tổ chức và quản lý dữ liệu: dữ liệu phải được tổ chức có cấu trúc, phản ánh đúng thế giới thực; hạn chế dư thừa, bảo đảm tính nhất quán khi cập nhật; hỗ trợ lưu trữ lâu dài và truy xuất hiệu quả.
  • Đảm bảo toàn vẹn dữ liệu: kiểm soát ràng buộc miền giá trị như kiểu dữ liệu và phạm vi; bảo đảm ràng buộc khóa không trùng, không rỗng; bảo đảm ràng buộc tham chiếu giữa các quan hệ; ngăn chặn dữ liệu không hợp lệ hoặc mâu thuẫn.
  • Bảo mật và phân quyền truy cập: xác định ai được phép xem, thêm, sửa, xóa dữ liệu; ngăn chặn truy cập trái phép; bảo vệ dữ liệu nhạy cảm.
  • Xử lý truy cập đồng thời: nhiều người dùng có thể thao tác cùng lúc; tránh xung đột dữ liệu, mất mát hoặc sai lệch thông tin; bảo đảm các giao dịch không ảnh hưởng lẫn nhau.
  • Đảm bảo tính nhất quán trong giao dịch: mỗi giao dịch phải thỏa mãn các tính chất ACID: nguyên tố (Atomicity) thực hiện toàn bộ hoặc không thực hiện gì; nhất quán (Consistency) đưa cơ sở dữ liệu từ trạng thái nhất quán này sang trạng thái nhất quán khác; cô lập (Isolation) các giao dịch đồng thời không ảnh hưởng lẫn nhau; bền vững (Durability) các giao dịch được lưu trữ vĩnh viễn dù hệ thống bị sập.
  • Tính độc lập dữ liệu: thay đổi cấu trúc lưu trữ hoặc lược đồ không làm ảnh hưởng đến chương trình ứng dụng; giảm chi phí bảo trì và nâng cấp.
  • Hiệu năng và tối ưu truy vấn: bảo đảm truy vấn nhanh khi dữ liệu lớn; tối ưu lưu trữ, chỉ mục, kế hoạch thực thi; cân bằng giữa hiệu năng và tài nguyên hệ thống.
  • Sao lưu và phục hồi dữ liệu: phòng ngừa sự cố phần cứng, phần mềm hoặc lỗi người dùng; cho phép khôi phục dữ liệu về trạng thái đúng; bảo đảm dữ liệu không bị mất.

Tóm tắt lợi ích: lưu trữ và quản lý dữ liệu tập trung phục vụ toàn bộ hệ thống thông tin; cung cấp dữ liệu chính xác, kịp thời cho các chức năng nghiệp vụ; hỗ trợ chia sẻ và truy cập đồng thời; bảo đảm an toàn, toàn vẹn và nhất quán dữ liệu; là nền tảng cho phân tích, báo cáo và hỗ trợ ra quyết định.

1.3 Hệ quản trị cơ sở dữ liệu (DBMS)

Chương 1 - Tổng quan về CSDL
0:00
Hệ quản trị cơ sở dữ liệu. Hệ quản trị cơ sở dữ liệu, viết tắt là DBMS, là công cụ dùng để tạo lập, lưu trữ, quản lý và khai thác cơ sở dữ liệu một cách có hệ thống. DBMS đóng vai trò trung gian giữa người dùng hoặc ứng dụng với cơ sở dữ liệu, bảo đảm dữ liệu được truy cập, cập nhật đúng, an toàn, nhất quán và hiệu quả. Một số hệ quản trị phổ biến là MySQL, PostgreSQL, Microsoft SQL Server, Oracle Database và MongoDB. Các chức năng chính gồm ngôn ngữ giao tiếp với DDL định nghĩa dữ liệu, DML thao tác dữ liệu, SQL truy vấn dữ liệu và DCL điều khiển dữ liệu; từ điển dữ liệu mô tả siêu dữ liệu; cơ chế giải quyết tranh chấp dữ liệu; cơ chế sao lưu và phục hồi; bảo đảm tính độc lập giữa dữ liệu và chương trình. Kiến trúc chung gồm ba mức: mức ngoài là giao diện làm việc với người dùng và chương trình ứng dụng với nhiều khung nhìn; mức khái niệm mô tả cấu trúc logic tổng thể của toàn bộ cơ sở dữ liệu; mức trong mô tả cách dữ liệu được lưu trữ vật lý trên thiết bị nhớ. Các thành phần cốt lõi khác gồm bộ xử lý truy vấn, quản lý lưu trữ, quản lý giao dịch, điều khiển truy cập đồng thời và quản lý quyền truy cập. Kiến trúc ba mức giúp bảo đảm tính độc lập dữ liệu và hiệu quả quản lý.

1.3 Hệ quản trị cơ sở dữ liệu (DBMS)

Định nghĩa: Hệ quản trị cơ sở dữ liệu (Database Management System - DBMS) là công cụ dùng để tạo lập, lưu trữ, quản lý và khai thác cơ sở dữ liệu một cách có hệ thống. DBMS đóng vai trò trung gian giữa người dùng hoặc ứng dụng với cơ sở dữ liệu, bảo đảm dữ liệu được truy cập, cập nhật đúng, an toàn, nhất quán và hiệu quả. Một số hệ quản trị cơ sở dữ liệu phổ biến: MySQL, PostgreSQL, Microsoft SQL Server, Oracle Database, MongoDB (NoSQL).

Các chức năng chính:

  • Ngôn ngữ giao tiếp: ngôn ngữ định nghĩa dữ liệu DDL khai báo cấu trúc cơ sở dữ liệu, bảng, mối liên hệ và ràng buộc; ngôn ngữ thao tác dữ liệu DML thêm, sửa, xóa dữ liệu; ngôn ngữ truy vấn SQL truy vấn và khai thác thông tin; ngôn ngữ điều khiển dữ liệu DCL quản lý bảo mật, phân quyền và kiểm soát quyền truy cập.
  • Từ điển dữ liệu: mô tả và quản lý siêu dữ liệu về cấu trúc như bảng, thuộc tính, kiểu dữ liệu, khóa và ràng buộc; ghi nhận mối quan hệ giữa các bảng, khóa chính, khóa ngoại; cung cấp thông tin cấu trúc và thống kê phục vụ phân tích và tối ưu truy vấn; lưu trữ ràng buộc toàn vẹn, thông tin người dùng và quyền truy cập; hỗ trợ quản trị, bảo trì và mở rộng.
  • Cơ chế giải quyết tranh chấp dữ liệu: cho phép nhiều giao dịch truy cập đồng thời nhưng bảo đảm tính nhất quán và cô lập; sử dụng cơ chế khóa để kiểm soát quyền đọc và ghi; lập lịch và cô lập giao dịch ngăn các hiện tượng bất thường như mất cập nhật, đọc không lặp lại; cho phép đọc và ghi song song để tăng hiệu năng; phát hiện và xử lý bế tắc (deadlock) để hệ thống tiếp tục hoạt động ổn định.
  • Cơ chế sao lưu và phục hồi: tạo bản sao lưu định kỳ phòng ngừa mất mát dữ liệu; phục hồi về trạng thái ổn định gần nhất khi xảy ra lỗi phần cứng, phần mềm hoặc thao tác sai; hỗ trợ sao lưu toàn bộ và gia tăng; sử dụng nhật ký giao dịch (log) để phục hồi chính xác các thay đổi sau lần sao lưu cuối.
  • Bảo đảm tính độc lập giữa dữ liệu và chương trình: thay đổi cấu trúc lưu trữ hoặc lược đồ không ảnh hưởng đến chương trình khai thác; hỗ trợ độc lập vật lý và độc lập logic; nhờ cơ chế mô tả dữ liệu và từ điển dữ liệu, ứng dụng chỉ làm việc với giao diện logic.

Kiến trúc chung (3 mức):

  • Mức ngoài (External Level): giao diện làm việc với người dùng và chương trình ứng dụng; mỗi người dùng nhìn thấy một phần cơ sở dữ liệu (khung nhìn) phù hợp theo nhu cầu và quyền hạn; có thể có nhiều khung nhìn khác nhau. Đối tượng tương tác là người dùng, chương trình ứng dụng. Ngôn ngữ sử dụng SQL với lệnh SELECT và DML với lệnh INSERT, UPDATE, DELETE.
  • Mức khái niệm (Conceptual Level): mô tả cấu trúc logic của toàn bộ cơ sở dữ liệu, ẩn đi chi tiết lưu trữ vật lý; định nghĩa tất cả thực thể, thuộc tính, mối quan hệ và ràng buộc toàn vẹn; cho cái nhìn thống nhất của quản trị viên. Sử dụng DDL với các lệnh CREATE, ALTER, mô hình dữ liệu logic (phổ biến nhất là mô hình quan hệ), ràng buộc toàn vẹn và từ điển dữ liệu (metadata).
  • Mức trong (Internal Level): mô tả cách dữ liệu được lưu trữ vật lý trên các thiết bị nhớ; bao gồm tệp dữ liệu, chỉ mục (index), phương thức truy xuất, nhật ký giao dịch, cơ chế sao lưu và phục hồi; là mối quan tâm của kỹ sư hệ thống.

Các thành phần cốt lõi khác: Query Processor phân tích và tối ưu truy vấn; Storage Manager quản lý lưu trữ; Transaction Manager điều khiển giao dịch; Concurrency Control xử lý tranh chấp dữ liệu; Authorization Manager quản lý quyền truy cập.

1.4 Người sử dụng cơ sở dữ liệu

Chương 1 - Tổng quan về CSDL
0:00
Người sử dụng cơ sở dữ liệu. Người sử dụng cơ sở dữ liệu là các cá nhân hoặc chương trình khai thác và sử dụng dữ liệu thông qua hệ quản trị cơ sở dữ liệu. Gồm các nhóm chính là người quản trị cơ sở dữ liệu, người phát triển ứng dụng, người dùng cuối và người thiết kế cơ sở dữ liệu. Người quản trị cơ sở dữ liệu có quyền cao nhất, quản lý và kiểm soát toàn bộ hệ thống, thiết kế và quản lý lược đồ, cấp quyền và kiểm soát bảo mật, sao lưu và phục hồi, giám sát hiệu năng và xử lý sự cố. Người phát triển ứng dụng xây dựng chương trình khai thác cơ sở dữ liệu, viết mã sử dụng SQL và API, thiết kế giao diện và logic nghiệp vụ, bảo đảm tuân thủ ràng buộc dữ liệu. Người dùng cuối khai thác dữ liệu thông qua ứng dụng hoặc công cụ truy vấn, gồm người dùng thông thường như nhân viên bán hàng sử dụng form và menu có sẵn mà không cần biết SQL, và người dùng có hiểu biết như chuyên viên phân tích dữ liệu truy vấn trực tiếp bằng SQL. Người thiết kế cơ sở dữ liệu phân tích yêu cầu nghiệp vụ, xây dựng mô hình thực thể liên kết và chuyển đổi sang mô hình quan hệ, quyết định chất lượng cấu trúc ngay từ đầu. Hệ quản trị cơ sở dữ liệu hỗ trợ phân quyền và kiểm soát truy cập cho từng loại người dùng, bảo đảm an toàn và sử dụng hiệu quả dữ liệu.

1.4 Người sử dụng cơ sở dữ liệu

Người sử dụng cơ sở dữ liệu là các cá nhân hoặc chương trình khai thác và sử dụng dữ liệu thông qua hệ quản trị cơ sở dữ liệu. Gồm các nhóm chính với vai trò, quyền hạn và mức độ truy cập khác nhau:

  • Người quản trị cơ sở dữ liệu (DBA): quản lý và kiểm soát toàn bộ hệ thống cơ sở dữ liệu; có quyền cao nhất. Nhiệm vụ: thiết kế và quản lý lược đồ cơ sở dữ liệu; cấp quyền và kiểm soát bảo mật; sao lưu và phục hồi dữ liệu; giám sát hiệu năng và xử lý sự cố.
  • Người phát triển ứng dụng (Application Programmer/Developer): xây dựng các chương trình ứng dụng khai thác cơ sở dữ liệu. Nhiệm vụ: viết mã chương trình sử dụng SQL, API để truy cập dữ liệu; thiết kế giao diện và logic nghiệp vụ; bảo đảm chương trình tuân thủ các ràng buộc dữ liệu. Không trực tiếp quản trị cơ sở dữ liệu nhưng tác động lớn đến việc sử dụng dữ liệu.
  • Người dùng cuối (End Users): khai thác dữ liệu thông qua ứng dụng hoặc công cụ truy vấn.
    • Người dùng thông thường (Naive Users): ví dụ nhân viên bán hàng; sử dụng các form, menu có sẵn; không cần biết SQL hay cấu trúc cơ sở dữ liệu.
    • Người dùng có hiểu biết (Casual/Sophisticated Users): ví dụ chuyên viên phân tích dữ liệu; truy vấn trực tiếp bằng SQL hoặc công cụ phân tích; có kiến thức nhất định về cơ sở dữ liệu.
  • Người thiết kế cơ sở dữ liệu (Database Designer): thiết kế mô hình dữ liệu cho hệ thống. Nhiệm vụ: phân tích yêu cầu nghiệp vụ; xây dựng mô hình thực thể liên kết; chuyển đổi sang mô hình quan hệ. Nhóm này quyết định chất lượng cấu trúc cơ sở dữ liệu ngay từ đầu.

Hệ quản trị cơ sở dữ liệu hỗ trợ phân quyền và kiểm soát truy cập cho từng loại người dùng, bảo đảm an toàn và sử dụng hiệu quả dữ liệu trong toàn hệ thống.

1.5 Một số mô hình dữ liệu

Chương 1 - Tổng quan về CSDL
0:00
Một số mô hình dữ liệu. Mô hình dữ liệu là cách thức biểu diễn, tổ chức và quản lý dữ liệu trong hệ thống cơ sở dữ liệu, làm cơ sở cho việc thiết kế và xây dựng cơ sở dữ liệu. Các mô hình dữ liệu chia thành hai nhóm chính là mô hình dữ liệu SQL truyền thống có cấu trúc chặt chẽ lược đồ xác định trước và mô hình dữ liệu NoSQL hiện đại linh hoạt mở rộng lớn phù hợp dữ liệu phi cấu trúc. Mô hình SQL gồm mô hình phân cấp tổ chức dữ liệu theo cấu trúc cây cha con, mỗi nút con chỉ có một nút cha, ứng dụng hệ thống quản lý thư mục; mô hình mạng biểu diễn dữ liệu bằng đồ thị, một nút có thể có nhiều nút cha, biểu diễn tốt các mối quan hệ phức tạp; mô hình thực thể liên kết mô tả dữ liệu thông qua thực thể, thuộc tính và liên kết, dùng trong giai đoạn đầu thiết kế, là cầu nối giữa phân tích nghiệp vụ và thiết kế cơ sở dữ liệu; mô hình quan hệ tổ chức dữ liệu dưới dạng bảng gồm các bộ và thuộc tính, có lược đồ xác định trước, hỗ trợ ràng buộc toàn vẹn, sử dụng SQL, hệ quản trị tiêu biểu MySQL, PostgreSQL, Oracle, SQL Server; mô hình hướng đối tượng biểu diễn dữ liệu dưới dạng đối tượng bao gồm thuộc tính và phương thức, hỗ trợ kế thừa bao gói đa hình, phù hợp dữ liệu phức tạp. Mô hình NoSQL gồm Key-Value lưu cặp khóa giá trị, truy xuất rất nhanh như Redis, DynamoDB; Document lưu tài liệu JSON hoặc XML, linh hoạt dễ mở rộng như MongoDB, CouchDB; Graph biểu diễn bằng đỉnh và cạnh, tối ưu xử lý mối quan hệ như Neo4j, Amazon Neptune. So sánh SQL và NoSQL: SQL dùng bảng lược đồ cố định, ràng buộc mạnh, nhất quán ACID, mở rộng dọc, phù hợp giao dịch phức tạp và hệ thống nghiệp vụ; NoSQL linh hoạt, thường theo BASE, mở rộng ngang, phù hợp dữ liệu lớn và hệ thống phân tán. Ví dụ hệ thống bán hàng dùng PostgreSQL bảo đảm ACID, mạng xã hội dùng Neo4j để gợi ý bạn bè và MongoDB để lưu hồ sơ người dùng linh hoạt.

1.5 Một số mô hình dữ liệu

Mô hình dữ liệu là cách thức biểu diễn, tổ chức và quản lý dữ liệu trong hệ thống cơ sở dữ liệu, làm cơ sở cho việc thiết kế và xây dựng cơ sở dữ liệu. Các mô hình dữ liệu chia thành hai nhóm chính: mô hình dữ liệu SQL (truyền thống) có cấu trúc chặt chẽ, lược đồ xác định trước; và mô hình dữ liệu NoSQL (hiện đại) linh hoạt, mở rộng lớn, phù hợp dữ liệu phi cấu trúc.

1.5.1 Mô hình dữ liệu SQL:

  • Mô hình phân cấp (Hierarchical Model): tổ chức dữ liệu theo cấu trúc cây, thể hiện mối quan hệ cha - con giữa các kiểu bản ghi. Mỗi nút con chỉ có một nút cha; truy cập dữ liệu theo đường dẫn cố định; cấu trúc đơn giản nhưng kém linh hoạt. Ứng dụng: hệ thống quản lý thư mục.
  • Mô hình mạng (Network Model): biểu diễn dữ liệu bằng đồ thị, trong đó một kiểu bản ghi có thể liên kết với nhiều kiểu bản ghi khác. Một nút có thể có nhiều nút cha; biểu diễn tốt các mối quan hệ phức tạp; cấu trúc và thao tác phức tạp. Ứng dụng: các hệ thống cơ sở dữ liệu thế hệ cũ.
  • Mô hình thực thể - liên kết (Entity-Relationship): mô tả dữ liệu thông qua thực thể, thuộc tính và liên kết, dùng trong giai đoạn đầu của thiết kế cơ sở dữ liệu. Trực quan, dễ hiểu; thể hiện rõ yêu cầu nghiệp vụ; không dùng trực tiếp để lưu trữ dữ liệu. Vai trò: cầu nối giữa phân tích nghiệp vụ và thiết kế cơ sở dữ liệu.
  • Mô hình dữ liệu quan hệ (Relational Model): tổ chức dữ liệu dưới dạng bảng (quan hệ) gồm các bộ (tuple) và thuộc tính. Có lược đồ dữ liệu xác định trước; hỗ trợ ràng buộc toàn vẹn; sử dụng SQL để thao tác dữ liệu. Hệ quản trị tiêu biểu: MySQL, PostgreSQL, Oracle, SQL Server.
  • Mô hình dữ liệu hướng đối tượng (Object-Oriented Model): dữ liệu biểu diễn dưới dạng đối tượng, bao gồm thuộc tính và phương thức, tương tự lập trình hướng đối tượng. Hỗ trợ kế thừa, bao gói, đa hình; phù hợp dữ liệu phức tạp; ít phổ biến hơn mô hình quan hệ. Ứng dụng: GIS, đa phương tiện.

1.5.2 Mô hình dữ liệu NoSQL:

  • Key-Value: dữ liệu lưu dưới dạng cặp khóa - giá trị. Cấu trúc đơn giản; truy xuất rất nhanh; không hỗ trợ truy vấn phức tạp. Hệ quản trị: Redis, DynamoDB.
  • Document: dữ liệu lưu trữ dưới dạng tài liệu (JSON/XML). Không cố định lược đồ; linh hoạt, dễ mở rộng; phù hợp dữ liệu bán cấu trúc. Hệ quản trị: MongoDB, CouchDB.
  • Graph: dữ liệu biểu diễn bằng đỉnh (node) và cạnh (edge). Tối ưu cho xử lý mối quan hệ; truy vấn quan hệ nhanh; phù hợp mạng xã hội, khuyến nghị. Hệ quản trị: Neo4j, Amazon Neptune.

1.5.3 So sánh SQL và NoSQL:

  • Mô hình dữ liệu: SQL dùng bảng (quan hệ), lược đồ cố định; NoSQL dùng Key-Value, Document, Graph, Column.
  • Lược đồ: SQL xác định trước, chặt chẽ; NoSQL linh hoạt, thay đổi dễ dàng.
  • Ngôn ngữ truy vấn: SQL sử dụng SQL; NoSQL tùy từng hệ quản trị.
  • Ràng buộc toàn vẹn: SQL mạnh, rõ ràng (miền giá trị, khóa, tham chiếu); NoSQL hạn chế hoặc do ứng dụng kiểm soát.
  • Tính nhất quán: SQL theo ACID; NoSQL thường theo BASE.
  • Mở rộng: SQL chủ yếu mở rộng dọc (scale up); NoSQL mở rộng ngang (scale out).
  • Hiệu năng: SQL tốt với giao dịch phức tạp; NoSQL tốt với dữ liệu lớn, truy cập nhanh.
  • Ứng dụng phù hợp: SQL cho hệ thống nghiệp vụ, tài chính; NoSQL cho Big Data, web, mạng xã hội.
  • Hệ quản trị: SQL có MySQL, PostgreSQL, Oracle, SQL Server; NoSQL có MongoDB, Redis, Neo4j.

Ví dụ: Một hệ thống bán hàng truyền thống dùng PostgreSQL (SQL) để bảo đảm giao dịch ACID; một mạng xã hội dùng Neo4j (Graph) để gợi ý bạn bè và MongoDB (Document) để lưu hồ sơ người dùng linh hoạt.

Khái niệm thực thể, thuộc tính và khóa

Chương 2 - Lý thuyết Mô hình ERD
0:00
Mô hình thực thể liên kết là một trong những phương pháp mô hình hóa dữ liệu nền tảng và được sử dụng rộng rãi nhất trong phân tích, thiết kế hệ thống thông tin và cơ sở dữ liệu. Mô hình do Peter Chen đề xuất năm 1976, cho phép mô tả cấu trúc dữ liệu ở mức độ trừu tượng, hỗ trợ các nhà phân tích, kiến trúc sư dữ liệu và lập trình viên hiểu rõ thành phần, đặc tính và mối quan hệ giữa các đối tượng trong một hệ thống. Mô hình đóng vai trò cầu nối giữa yêu cầu nghiệp vụ và thiết kế cơ sở dữ liệu logic. Cụ thể, mô hình giúp biểu diễn các đối tượng có ý nghĩa trong miền nghiệp vụ, xác định các thuộc tính mô tả đặc trưng của từng thực thể, thiết lập và mô tả rõ các mối quan hệ giữa các thực thể, đồng thời giảm thiểu sai sót trong quá trình thiết kế cơ sở dữ liệu nhờ chuẩn hóa mô hình từ đầu. Việc sử dụng mô hình mang lại cái nhìn trực quan và hệ thống về dữ liệu, giúp phân tích đầy đủ yêu cầu trước khi triển khai, hỗ trợ trao đổi thông tin giữa nhóm nghiệp vụ và nhóm kỹ thuật, đồng thời là tiền đề cho việc chuyển đổi sang mô hình logic và vật lý. Mục đích chính là mô tả thế giới dữ liệu thực đầy đủ và gần với quan niệm của con người, xác định chính xác các thành phần dữ liệu cốt lõi, hỗ trợ xây dựng cấu trúc dữ liệu tối ưu, dễ bảo trì và có khả năng mở rộng, tránh trùng lặp dữ liệu và đảm bảo tính nhất quán trong toàn hệ thống. Thực thể là một sự vật, đối tượng hoặc khái niệm cụ thể tồn tại và phân biệt được với các đối tượng khác, ví dụ một quyển sách cụ thể. Kiểu thực thể là tập hợp các thực thể có cùng các đặc trưng chung, là sự trừu tượng hóa các thực thể trong cùng một nhóm, có tên riêng thường là danh từ. Giữa kiểu thực thể và thực thể có sự khác biệt về khái niệm, số lượng, bản chất và thể hiện: kiểu thực thể là khung chứa dữ liệu, thực thể là dữ liệu cụ thể. Biểu diễn đồ họa của kiểu thực thể là hình chữ nhật gồm tên kiểu thực thể và các đặc trưng chung. Thuộc tính là đặc trưng của kiểu thực thể hoặc kiểu liên kết, có tên riêng, kiểu dữ liệu và miền giá trị. Thuộc tính có thể là đơn, đa trị hoặc phức hợp. Khóa là một hay tập thuộc tính dùng để phân biệt hai thực thể bất kỳ, giá trị khóa là duy nhất. Cần nghiên cứu và phân tích dữ liệu để xác định đúng kiểu thực thể, đặc trưng chung và khóa, làm nền tảng cho các bước xây dựng mô hình tiếp theo.

1. Thực thể và kiểu thực thể

Mô hình thực thể liên kết (Entity-Relationship Model) do Peter Chen đề xuất năm 1976 là phương pháp mô hình hóa dữ liệu khái niệm, dùng để mô tả cấu trúc dữ liệu ở mức trừu tượng. Thành phần cơ bản nhất là thực thể: một "sự vật", "đối tượng" hoặc "khái niệm" cụ thể tồn tại và có thể phân biệt được với các đối tượng khác trong thế giới thực. Ví dụ, một quyển sách cụ thể tồn tại độc lập và phân biệt với các quyển sách khác.

Kiểu (tập) thực thể là tập hợp các thực thể có cùng các đặc trưng chung; đây là sự trừu tượng hóa các thực thể trong cùng một nhóm. Mỗi kiểu thực thể có tên riêng, thường là danh từ. Ví dụ, kiểu thực thể SACH với các đặc trưng chung: Mã sách, Tên sách, ... Kiểu thực thể SINH VIÊN có các đặc trưng: Mã sinh viên, Họ và tên, Ngày sinh, Giới tính.

Tiêu thứcKiểu thực thểThực thể
Khái niệmMột tập hợp các đối tượngMột đối tượng cụ thể
Số lượngNhiềuMột
Bản chất"Khung" chứa dữ liệuDữ liệu cụ thể
Thể hiệnTên kiểu thực thể và tên các đặc trưngBộ các giá trị tương ứng với các đặc trưng

Biểu diễn đồ họa của kiểu thực thể là hình chữ nhật gồm 2 phần: tên kiểu thực thể và các đặc trưng chung.

2. Thuộc tính

Thuộc tính là một đặc trưng của một kiểu thực thể hoặc một kiểu liên kết. Mỗi thuộc tính có tên riêng, kiểu dữ liệu và miền giá trị tương ứng. Ví dụ, kiểu thực thể SINH VIÊN có thuộc tính Mã sinh viên; giữa NHÂN VIÊN và SẢN PHẨM có kiểu liên kết "bán", thuộc tính Số lượng là thuộc tính của kiểu liên kết vì phụ thuộc đồng thời vào cả hai kiểu thực thể.

  • Thuộc tính đơn: giá trị đối với một thực thể là một giá trị đơn. Ví dụ, Mã sinh viên chỉ có một giá trị 4551050001.
  • Thuộc tính đa trị (lặp): giá trị đối với một thực thể là một dãy các giá trị đơn. Ví dụ, Ngoại ngữ có thể có nhiều giá trị: Anh, Nga, ...
  • Thuộc tính phức hợp: là sự kết tập từ nhiều thuộc tính khác. Ví dụ, Quê quán cấu thành bởi Xã, Tỉnh.

3. Khóa

Khóa của kiểu thực thể E là một hay một tập thuộc tính dùng để phân biệt hai thực thể bất kỳ trong E, tức là giá trị của khóa là duy nhất. Ví dụ, khóa của SINH VIÊN là Mã sinh viên; của LỚP là Mã lớp; của KHOA là Mã khoa; của HỌC PHẦN là Mã học phần. Khóa có thể là một thuộc tính hoặc nhiều thuộc tính; nếu kiểu thực thể chưa có thuộc tính khóa, cần bổ sung thuộc tính khóa.

Liên kết và bản số

Chương 2 - Lý thuyết Mô hình ERD
0:00
Liên kết là sự kết hợp giữa hai hay nhiều thực thể phản ánh sự ràng buộc trong quản lý, trong đó mỗi thực thể đóng một vai trò nhất định. Kiểu liên kết là tập hợp các liên kết có cùng ý nghĩa giữa các kiểu thực thể. Biểu diễn đồ họa của kiểu liên kết là hình thoi chứa tên kiểu liên kết, thường là động từ. Nếu kiểu liên kết hai ngôi, cần xác định bản số ở hai đầu. Bản số của kiểu thực thể trong kiểu liên kết là cặp số m..n, biểu thị số tối thiểu và tối đa các thực thể ở một phía có thể liên kết với một thực thể ở phía còn lại. Ví dụ kiểu liên kết dạy giữa THẦY và TRÒ có bản số phía THẦY là 0..2 và phía TRÒ là 1..2. Từ bản số, ta phân biệt ba kiểu liên kết phổ biến. Liên kết một-một: mỗi thực thể của kiểu A liên kết với đúng một thực thể của kiểu B và ngược lại, ví dụ sinh viên và khóa luận tốt nghiệp. Liên kết một-nhiều: một thực thể của kiểu A liên kết với nhiều thực thể của kiểu B, còn mỗi thực thể của kiểu B chỉ liên kết với một thực thể của kiểu A, ví dụ lớp sinh hoạt và sinh viên. Liên kết nhiều-nhiều: mỗi thực thể của kiểu A liên kết với nhiều thực thể của kiểu B và ngược lại, ví dụ giảng viên và sinh viên. Việc xác định đúng bản số là rất quan trọng để mô hình phản ánh đúng nghiệp vụ. Nếu bản số sai, thiết kế cơ sở dữ liệu sau này sẽ không biểu diễn đúng ràng buộc giữa các đối tượng. Do đó, cần khảo sát yêu cầu, phỏng vấn người dùng, nghiên cứu tài liệu và quan sát có ghi chép để xác định đầy đủ kiểu thực thể, đặc trưng chung và kiểu liên kết. Sau khi xác định kiểu liên kết và bản số, ta cũng cần xác định thuộc tính của kiểu thực thể hoặc thuộc tính của kiểu liên kết, đồng thời xác định khóa của kiểu thực thể. Đây là cơ sở để chuyển sang các trường hợp mở rộng và các bước xây dựng mô hình ERD hoàn chỉnh.

1. Liên kết và kiểu liên kết

Liên kết (còn gọi là quan hệ) là sự kết hợp giữa hai hay nhiều thực thể phản ánh sự ràng buộc trong quản lý, trong đó mỗi thực thể đóng một vai trò nhất định. Ví dụ, sinh viên Nguyễn Văn An đăng ký khóa học Nhập môn cơ sở dữ liệu.

Kiểu liên kết là tập hợp các liên kết có cùng ý nghĩa, hay tập hợp các liên kết cùng loại giữa các kiểu thực thể. Ví dụ, tồn tại kiểu liên kết "Đăng ký" giữa hai kiểu thực thể SINH VIÊN và KHÓA HỌC. Biểu diễn đồ họa của kiểu liên kết là hình thoi, bên trong là tên kiểu liên kết; tên kiểu liên kết thường là động từ. Nếu kiểu liên kết 2 ngôi, cần xác định bản số ở hai đầu.

2. Bản số (ứng số)

Trong một kiểu liên kết hai ngôi R ⊆ T1 × T2, bản số của R về phía T1 (hoặc T2) là một cặp số m..n, trong đó m và n là các số tối thiểu và tối đa các thực thể trong T1 (tương ứng T2) có thể liên kết qua R với một thực thể trong T2 (tương ứng T1). Ví dụ, kiểu liên kết dạy giữa THẦY và TRÒ có bản số phía THẦY là 0..2 (số thầy mà một trò có thể học) và phía TRÒ là 1..2 (số trò mà một thầy có thể dạy).

3. Các kiểu liên kết theo bản số

  • Liên kết một - một (1-1): Một thực thể của kiểu A quan hệ với một thực thể của kiểu B và ngược lại. Ví dụ, một sinh viên làm một khóa luận tốt nghiệp và một khóa luận chỉ có một sinh viên làm.
  • Liên kết một - nhiều (1-n): Một thực thể của kiểu A quan hệ với nhiều thực thể của kiểu B, và một thực thể của kiểu B quan hệ với chỉ một thực thể của kiểu A. Ví dụ, một lớp sinh hoạt có nhiều sinh viên, một sinh viên chỉ thuộc một lớp sinh hoạt.
  • Liên kết nhiều - nhiều (n-n): Một thực thể của kiểu A quan hệ với nhiều thực thể của kiểu B và ngược lại. Ví dụ, một giảng viên dạy nhiều sinh viên và một sinh viên được dạy bởi nhiều giảng viên.

Cần nghiên cứu và phân tích dữ liệu để xác định đúng bản số các thực thể tham gia vào kiểu liên kết, từ đó xác định chính xác kiểu liên kết giữa các kiểu thực thể trong hệ thống dữ liệu thực.

ERD mở rộng: thực thể con, liên kết đệ quy, liên kết nhiều ngôi và các trường hợp đặc biệt

Chương 2 - Lý thuyết Mô hình ERD
0:00
Mô hình thực thể liên kết mở rộng bổ sung nhiều khái niệm để mô tả đầy đủ các tình huống thực tế phức tạp. Kiểu thực thể con là dạng mở rộng của kiểu thực thể tổng quát, kế thừa các thuộc tính chung từ thực thể cha và có thêm thuộc tính riêng, thể hiện quan hệ phân cấp IS-A. Ví dụ NHÂN VIÊN và ĐẢNG VIÊN: đảng viên kế thừa thông tin nhân viên và có thêm thông tin về đảng. Kiểu liên kết đệ quy là kiểu liên kết trong đó một kiểu thực thể quan hệ với chính nó, thường dùng cho cấu trúc phân cấp hoặc quản lý, ví dụ nhân viên quản lý nhân viên. Nhiều kiểu liên kết giữa hai kiểu thực thể cho phép mô tả nhiều quan hệ nghiệp vụ khác nhau, ví dụ người thuê và sở hữu căn hộ. Kiểu liên kết có thuộc tính riêng là thuộc tính gắn với chính kiểu liên kết, không thuộc về kiểu thực thể nào, thường xuất hiện trong liên kết nhiều-nhiều, ví dụ thời gian đăng ký và điểm trung bình trong liên kết đăng ký giữa sinh viên và khóa học. Kiểu liên kết 2 ngôi nhiều-nhiều rất phổ biến trong thực tiễn, ví dụ giảng viên dạy sinh viên. Kiểu liên kết nhiều ngôi có từ ba kiểu thực thể trở lên tham gia, dùng để diễn đạt hoạt động liên quan nhiều đối tượng cùng lúc, ví dụ cung cấp sản phẩm từ nhà cung cấp đến cửa hàng, có thể có thuộc tính riêng và không xác định bản số như liên kết hai ngôi. Tóm lại, các trường hợp mở rộng này giúp mô hình ERD phản ánh đầy đủ nghiệp vụ thực tế, tránh mất thông tin và hỗ trợ tốt cho thiết kế cơ sở dữ liệu sau này. Khi chuyển sang mô hình kinh điển, các khái niệm mở rộng như thuộc tính đa trị, thuộc tính phức hợp, kiểu thực thể con, liên kết nhiều-nhiều và nhiều ngôi phải được xử lý nhất quán bằng các quy tắc chuyển đổi, tạo kiểu thực thể mới khi cần để bảo toàn ý nghĩa nghiệp vụ.

1. Kiểu thực thể con (Subtype) - tổng quát hóa

Kiểu thực thể con là dạng mở rộng của một kiểu thực thể tổng quát (supertype). Kiểu thực thể con kế thừa các thuộc tính chung từ kiểu thực thể cha và có thêm các thuộc tính riêng. Quan hệ phân cấp giữa chúng là kiểu liên kết IS-A. Đặc điểm: thể hiện quan hệ phân cấp; mỗi thực thể con là một trường hợp cụ thể của thực thể cha; dùng để mô tả hệ thống có các nhóm đối tượng khác nhau nhưng chia sẻ thông tin chung.

Ví dụ: NHÂN VIÊN có các thuộc tính Mã nhân viên, Họ và tên, Ngày sinh, Giới tính. Từ đó có kiểu thực thể con ĐẢNG VIÊN, kế thừa từ NHÂN VIÊN, có thêm các thuộc tính Mã đảng viên, Ngày vào Đảng, Ngày chính thức, Nơi vào Đảng. Quan hệ phân cấp giữa ĐẢNG VIÊN và NHÂN VIÊN là kiểu liên kết IS-A.

2. Kiểu liên kết đệ quy

Là kiểu liên kết trong đó một kiểu thực thể quan hệ với chính nó. Dùng để miêu tả cấu trúc phân cấp, quản lý hoặc thành phần cấu trúc. Thường có số ngôi là 2 nhưng trên cùng một kiểu thực thể. Ví dụ: NHÂN VIÊN có kiểu liên kết "Quản lý" trong chính nó; mỗi nhân viên có thể được quản lý bởi một nhân viên khác, một nhân viên có thể quản lý nhiều nhân viên dưới quyền. Đây là kiểu liên kết đệ quy 1-nhiều.

3. Nhiều kiểu liên kết giữa hai kiểu thực thể

Giữa hai kiểu thực thể có thể tồn tại hơn một kiểu liên kết, phản ánh các mối quan hệ nghiệp vụ khác nhau; các kiểu liên kết có bản chất và ràng buộc khác nhau. Ví dụ, giữa NGƯỜI và CĂN HỘ có thể có kiểu liên kết "Thuê" (một người có thể thuê nhiều căn hộ, một căn hộ có 1 người thuê) và kiểu liên kết "Sở hữu" (một người có thể sở hữu nhiều căn hộ, một căn hộ có 1 người sở hữu).

4. Kiểu liên kết có thuộc tính riêng

Đây là thuộc tính riêng của chính kiểu liên kết, không thuộc về kiểu thực thể nào mà thuộc về kiểu liên kết, liên quan đến các kiểu thực thể tham gia. Thường xuất hiện trong kiểu liên kết nhiều-nhiều; biểu diễn mối quan hệ giữa kiểu liên kết với thuộc tính riêng là đoạn thẳng có nét đứt. Ví dụ, SINH VIÊN và KHÓA HỌC có kiểu liên kết "Đăng ký" với thuộc tính riêng Thời gian đăng ký và Điểm trung bình.

5. Kiểu liên kết 2 ngôi nhiều-nhiều

Là kiểu liên kết giữa hai kiểu thực thể, trong đó mỗi thực thể của một bên có thể liên kết với nhiều thực thể của bên kia; rất phổ biến trong các hệ thống cơ sở dữ liệu thực tiễn. Ví dụ, giữa SINH VIÊN và GIẢNG VIÊN có kiểu liên kết "Dạy": một sinh viên được dạy bởi nhiều giảng viên, một giảng viên dạy nhiều sinh viên.

6. Kiểu liên kết nhiều ngôi

Là kiểu liên kết có từ ba kiểu thực thể trở lên tham gia, dùng để diễn đạt các hoạt động thực tế liên quan nhiều kiểu thực thể cùng lúc. Không xác định bản số như kiểu liên kết 2 ngôi vì mô tả mối quan hệ ràng buộc chung; kiểu liên kết có thể có thuộc tính riêng. Ví dụ, trong hệ thống phân phối hàng hóa, kiểu liên kết "Cung cấp" giữa NHÀ CUNG CẤP, SẢN PHẨM và CỬA HÀNG, với thuộc tính riêng Giá bán, Ngày giao, Số lượng.

Trường hợp đặc biệtÝ nghĩa
Kiểu thực thể conKế thừa, phân cấp (IS-A)
Kiểu liên kết đệ quyKiểu thực thể quan hệ với chính nó
Nhiều kiểu liên kết giữa hai thực thểMô tả nhiều quan hệ nghiệp vụ
Kiểu liên kết có thuộc tính riêngThuộc tính gắn với kiểu liên kết
Kiểu liên kết 2 ngôi nhiều-nhiềuQuan hệ nhiều-nhiều
Kiểu liên kết nhiều ngôiQuan hệ từ 3 kiểu thực thể trở lên

Các bước xây dựng ERD (4 bước)

Chương 2 - Lý thuyết Mô hình ERD
0:00
Quy trình xây dựng mô hình thực thể liên kết được thực hiện theo bốn bước rõ ràng. Bước một là xác định danh sách các thuộc tính: từ các hồ sơ dữ liệu đã thu thập, phân tích yêu cầu nghiệp vụ, liệt kê toàn bộ thuộc tính, phân loại theo bản chất đơn, phức hợp, đa trị, loại bỏ trùng lặp, thống nhất và chính xác hóa tên gọi. Kết quả là danh sách thuộc tính đã được chính xác hóa, là dữ liệu đầu vào cho các bước sau. Bước hai là xác định kiểu thực thể, danh sách thuộc tính của từng kiểu thực thể và thuộc tính khóa. Cần xác định nhóm đối tượng có cùng bản chất, cùng các thuộc tính mô tả, với tiêu chí có ý nghĩa tồn tại độc lập, có thể phân biệt bằng khóa và có ý nghĩa quản lý rõ ràng. Gán thuộc tính cho từng kiểu thực thể, chọn khóa phân biệt từng thực thể, có thể là một hoặc nhiều thuộc tính, bổ sung nếu chưa có. Kết quả là danh sách kiểu thực thể cùng tập thuộc tính và khóa. Bước ba là xác định kiểu liên kết và thuộc tính riêng của kiểu liên kết nếu có. Nhận diện kiểu liên kết dựa vào yêu cầu nghiệp vụ, xác định bản số đối với liên kết hai ngôi để phân loại 1-1, 1-nhiều, nhiều-nhiều, đệ quy; với IS-A và liên kết nhiều ngôi không cần bản số. Xác định thuộc tính riêng liên quan đến các kiểu thực thể tham gia. Lưu ý mỗi thuộc tính chỉ xuất hiện một lần và cần sử dụng hết tất cả thuộc tính. Bước bốn là vẽ mô hình thực thể liên kết mở rộng, thể hiện đầy đủ kiểu thực thể, kiểu liên kết, kiểu thực thể con, liên kết đệ quy, liên kết nhiều ngôi và ràng buộc bản số. Sau đó có thể chuyển về mô hình kinh điển bằng các quy tắc xử lý thuộc tính đa trị, phức hợp, kiểu thực thể con, liên kết 1-1 và liên kết nhiều-nhiều hoặc nhiều ngôi. Kiểm tra mô hình đảm bảo đúng nghiệp vụ, nhất quán và dễ hiểu.

Quy trình xây dựng mô hình E-R (4 bước)

  1. Bước 1: Xác định danh sách các thuộc tính
    • Phân tích yêu cầu nghiệp vụ: đọc mô tả bài toán, nghiên cứu tài liệu, phỏng vấn người dùng.
    • Liệt kê toàn bộ thuộc tính, ví dụ Họ và tên khách hàng, Ngày sinh, Số điện thoại, Mã sản phẩm, Số lượng bán.
    • Phân loại thuộc tính theo bản chất: đơn, phức hợp, đa trị.
    • Loại bỏ thuộc tính trùng lặp, chỉ giữ một thuộc tính và bổ sung thuộc tính còn thiếu.
    • Sử dụng thống nhất tên gọi; chính xác hóa tên gọi khi cùng tên nhưng khác ý nghĩa, ví dụ Ngày xe vào và Ngày xe ra.
    • Sử dụng tên thuộc tính ngắn gọn, dễ hiểu, có tính gợi ý.

    Kết quả: danh sách tất cả các thuộc tính đã được chính xác hóa, là dữ liệu đầu vào cho bước 2 và 3.

  2. Bước 2: Xác định kiểu thực thể, danh sách thuộc tính và khóa
    • Xác định kiểu thực thể là nhóm đối tượng có cùng bản chất, cùng các thuộc tính mô tả.
    • Tiêu chí nhận diện: có ý nghĩa tồn tại độc lập; có thể phân biệt các đối tượng bằng khóa; có ý nghĩa quản lý rõ ràng.
    • Thường là thông tin liên quan đến con người, tài sản (KHÁCH HÀNG, MẶT HÀNG, PHÒNG) hoặc khái niệm trừu tượng (PHƯƠNG TIỆN GIAO THÔNG, NGƯỜI DÙNG).
    • Gán thuộc tính cho từng kiểu thực thể: chỉ đưa vào những thuộc tính mô tả bản chất của kiểu thực thể đó.
    • Chọn thuộc tính khóa (primary key) phân biệt được từng thực thể; có thể là một hoặc nhiều thuộc tính; nếu chưa có thì bổ sung.

    Kết quả: danh sách kiểu thực thể cùng tập thuộc tính và khóa xác định.

  3. Bước 3: Xác định kiểu liên kết và thuộc tính riêng
    • Nhận diện kiểu liên kết dựa vào yêu cầu nghiệp vụ.
    • Xác định bản số đối với kiểu liên kết 2 ngôi để xác định kiểu liên kết 1-1, 1-nhiều, nhiều-nhiều, đệ quy. Đối với IS-A và liên kết nhiều ngôi không cần xác định bản số.
    • Xác định thuộc tính riêng của liên kết nếu có, liên quan đến các kiểu thực thể tham gia, ví dụ liên kết "Mua" giữa KHÁCH HÀNG và SẢN PHẨM có Ngày mua, Số lượng mua.

    Kết quả: danh sách các kiểu liên kết, bản số và thuộc tính riêng.

    Lưu ý: mỗi thuộc tính chỉ xuất hiện một lần trong một kiểu thực thể hoặc một kiểu liên kết; cần sử dụng hết tất cả thuộc tính; thuộc tính được xác định từ các thuộc tính khác hoặc gán tự động không cần xem xét, ví dụ Thành tiền = Số lượng × Đơn giá.

  4. Bước 4: Vẽ mô hình thực thể liên kết
    • Kiểu thực thể: hình chữ nhật 2 phần, phần trên tên thực thể, bên dưới danh sách thuộc tính.
    • Kiểu liên kết: hình thoi chứa tên kiểu liên kết.
    • Kiểu thực thể con: hình chữ nhật bên trong là mối quan hệ IS-A.
    • Kiểu liên kết đệ quy: một thực thể nối với chính nó.
    • Kiểu liên kết nhiều ngôi: hình thoi nối ba hoặc nhiều kiểu thực thể.

    Kết quả: mô hình thực thể liên kết mở rộng. Công cụ có thể dùng: Draw.io, Microsoft Visio, Lucidchart, ERDPlus, dbdiagram.io, StarUML.

Sau khi xây dựng mô hình mở rộng, có thể chuyển về mô hình E-R kinh điển bằng các quy tắc: xử lý thuộc tính đa trị, xử lý thuộc tính phức hợp, xử lý kiểu thực thể con, xử lý kiểu liên kết 1-1, xử lý kiểu liên kết nhiều-nhiều hoặc nhiều ngôi.

Ví dụ minh họa tổng hợp

Chương 2 - Lý thuyết Mô hình ERD
0:00
Ví dụ minh họa tổng hợp áp dụng toàn bộ lý thuyết Chương 2 cho hệ thống quản lý đào tạo đại học. Trước hết xác định danh sách thuộc tính từ hồ sơ và yêu cầu nghiệp vụ, bao gồm thông tin sinh viên, giảng viên, khóa học, lớp học và kết quả đăng ký. Sau đó nhóm các thuộc tính thành các kiểu thực thể SINH VIÊN, GIẢNG VIÊN, KHÓA HỌC, LỚP HỌC, xác định khóa cho từng kiểu thực thể như Mã sinh viên, Mã giảng viên, Mã khóa học, Mã lớp học. Bước ba xác định các kiểu liên kết và bản số: sinh viên thuộc lớp sinh hoạt là liên kết nhiều-một; giảng viên dạy khóa học là liên kết nhiều-nhiều; sinh viên đăng ký khóa học là liên kết nhiều-nhiều có thuộc tính riêng Thời gian đăng ký và Điểm trung bình; giảng viên phụ trách lớp học là liên kết một-nhiều; sinh viên tham gia lớp học là liên kết nhiều-nhiều. Bước bốn vẽ mô hình ERD mở rộng thể hiện đầy đủ các thực thể và liên kết, ràng buộc bản số và thuộc tính riêng. Khi chuyển sang mô hình kinh điển, các liên kết nhiều-nhiều có thuộc tính riêng như Đăng ký sẽ được chuyển thành kiểu thực thể mới với khóa tổ hợp và các thuộc tính riêng, nối với các kiểu thực thể gốc bằng liên kết một-nhiều. Ví dụ này cho thấy ERD không chỉ mô tả dữ liệu mà còn phản ánh đúng nghiệp vụ, giúp các nhóm kỹ thuật và nghiệp vụ trao đổi thông tin hiệu quả. Kiểm tra mô hình sau khi xây dựng để đảm bảo đúng nghiệp vụ, nhất quán, không dư thừa và sẵn sàng chuyển sang mô hình quan hệ. Đây là bước quan trọng trước khi thiết kế cơ sở dữ liệu logic và vật lý.

Ví dụ minh họa tổng hợp: Hệ thống quản lý đào tạo

Áp dụng bốn bước xây dựng mô hình ERD cho hệ thống quản lý đào tạo đại học. Mục tiêu là quản lý sinh viên, giảng viên, khóa học, lớp học và kết quả đăng ký.

Bước 1 - Danh sách thuộc tính (trích)

  • Mã sinh viên, Họ và tên sinh viên, Ngày sinh, Giới tính, Email, Mã lớp sinh hoạt.
  • Mã giảng viên, Họ và tên giảng viên, Khoa, Học vị.
  • Mã khóa học, Tên khóa học, Số tín chỉ.
  • Thời gian đăng ký, Điểm trung bình.
  • Mã lớp học, Phòng học, Ca học.

Bước 2 - Kiểu thực thể và khóa

Kiểu thực thểThuộc tínhKhóa
SINH VIÊNMã sinh viên, Họ và tên, Ngày sinh, Giới tính, Email, Mã lớp sinh hoạtMã sinh viên
GIẢNG VIÊNMã giảng viên, Họ và tên, Khoa, Học vịMã giảng viên
KHÓA HỌCMã khóa học, Tên khóa học, Số tín chỉMã khóa học
LỚP HỌCMã lớp học, Phòng học, Ca họcMã lớp học

Bước 3 - Kiểu liên kết và bản số

  • SINH VIÊN - LỚP SINH HOẠT: liên kết "Thuộc" (n-1): nhiều sinh viên thuộc một lớp sinh hoạt.
  • GIẢNG VIÊN - KHÓA HỌC: liên kết "Dạy" (n-n): một giảng viên dạy nhiều khóa học, một khóa học có nhiều giảng viên.
  • SINH VIÊN - KHÓA HỌC: liên kết "Đăng ký" (n-n) có thuộc tính riêng Thời gian đăng ký và Điểm trung bình.
  • GIẢNG VIÊN - LỚP HỌC: liên kết "Phụ trách" (1-n): một giảng viên phụ trách nhiều lớp học.
  • SINH VIÊN - LỚP HỌC: liên kết "Tham gia" (n-n) có thể có thuộc tính riêng như Ngày tham gia.

Bước 4 - Mô hình ERD mở rộng

Sơ đồ ERD mở rộng thể hiện các kiểu thực thể SINH VIÊN, GIẢNG VIÊN, KHÓA HỌC, LỚP HỌC và các liên kết nêu trên, trong đó liên kết "Đăng ký" và "Tham gia" là liên kết nhiều-nhiều có thuộc tính riêng. Nếu cần chuyển về mô hình kinh điển, liên kết "Đăng ký" sẽ được chuyển thành kiểu thực thể mới DÒNG ĐĂNG KÝ với khóa là Mã sinh viên và Mã khóa học, chứa các thuộc tính Thời gian đăng ký và Điểm trung bình, nối với SINH VIÊN và KHÓA HỌC bằng liên kết 1-nhiều.

Ví dụ này tổng hợp các khái niệm: thực thể, thuộc tính, khóa, liên kết, bản số, liên kết nhiều-nhiều, thuộc tính riêng của liên kết và chuyển đổi sang mô hình kinh điển.

Bài tập tình huống - TMĐT kết hợp mạng xã hội

Chương 2 - Mô hình thực thể liên kết
0:00
Bài tập tình huống về hệ thống thương mại điện tử kết hợp mạng xã hội. Trong giai đoạn đầu toàn bộ dữ liệu lưu trong hệ quản trị cơ sở dữ liệu quan hệ SQL. Tuy nhiên khi số lượng người dùng tăng nhanh, hệ thống gặp nhiều vấn đề về hiệu năng và khả năng mở rộng. Chỉ dùng SQL không còn phù hợp cho toàn bộ hệ thống. Dựa theo mục một chấm năm về các mô hình dữ liệu, đề xuất giải pháp tổ chức dữ liệu. Với quản lý người dùng, đơn hàng và thanh toán, nên dùng SQL vì cần tính nhất quán và ACID. Với mạng xã hội và gợi ý sản phẩm theo mối quan hệ và hành vi, nên dùng cơ sở dữ liệu đồ thị như Neo4j để lưu các mối quan hệ và duyệt nhanh. Với hồ sơ người dùng và catalog sản phẩm linh hoạt, nên dùng cơ sở dữ liệu tài liệu như MongoDB. Với lưu trữ hành vi người dùng như lượt xem, lượt thích, bình luận với khối lượng lớn, nên dùng cơ sở dữ liệu cột rộng như Cassandra. Redis dùng làm cache và quản lý session để tăng tốc truy cập. Elasticsearch dùng cho tìm kiếm sản phẩm và nội dung. Kết hợp nhiều mô hình dữ liệu giúp cân bằng giữa nhất quán, hiệu năng và khả năng mở rộng. Đây là cách tiếp cận polyglot persistence, mỗi loại dữ liệu dùng mô hình phù hợp nhất. Việc chọn mô hình phù hợp giúp hệ thống mở rộng theo chiều ngang và giảm chi phí vận hành. Sinh viên cần hiểu rằng không có một mô hình dữ liệu nào phù hợp cho mọi bài toán. SQL vẫn quan trọng cho dữ liệu giao dịch, còn NoSQL giải quyết bài toán khối lượng lớn và linh hoạt.

Bài tập tình huống - Hệ thống thương mại điện tử kết hợp mạng xã hội

Hệ thống chỉ dùng SQL không còn phù hợp khi số người dùng tăng nhanh. Đề xuất tổ chức dữ liệu theo mô hình polyglot persistence:

  • SQL (RDBMS): quản lý người dùng, đơn hàng, thanh toán - dữ liệu cần ACID và nhất quán.
  • Graph DB (Neo4j): lưu mối quan hệ người dùng và gợi ý sản phẩm theo quan hệ/hành vi.
  • Document/NoSQL (MongoDB): hồ sơ người dùng linh hoạt, catalog sản phẩm.
  • Wide-column/Time-series (Cassandra): lưu hành vi người dùng (lượt xem, thích, bình luận) khối lượng lớn.
  • Redis: cache và session để tăng tốc.
  • Elasticsearch: tìm kiếm sản phẩm và nội dung.

Kết hợp nhiều mô hình dữ liệu giúp cân bằng nhất quán, hiệu năng và khả năng mở rộng.

NGƯỜI DÙNG Mã ND (PK) Họ tên, ... SẢN PHẨM Mã SP (PK) Tên SP, Giá, ... ĐƠN HÀNG Mã ĐH (PK) Ngày đặt, ... BÀI ĐĂNG Mã BD (PK) Nội dung, ... BÌNH LUẬN Mã BL (PK) Nội dung, ... đặt hàng (1:N) chứa (M:N) đăng (1:N) có (1:N)

Hướng giải mẫu - Bài tập 2_1 (4 bước)

Chương 2 - Mô hình thực thể liên kết
0:00
Hướng giải mẫu bài tập 2_1 theo bốn bước. Bước một xác định thuộc tính từ hai hóa đơn và chính xác hóa tên thuộc tính. Bước hai xác định kiểu thực thể: khách hàng với khóa mã khách và hàng với khóa mã hàng. Bước ba xác định kiểu liên kết đặt và giao, mỗi liên kết mang các thuộc tính như số hóa đơn, ngày, số lượng, địa chỉ giao. Bước bốn vẽ mô hình thực thể liên kết mở rộng gồm hai thực thể và hai liên kết nhiều nhiều. Đây là mẫu để sinh viên làm theo cho các bài khác. Mô hình mở rộng cho phép liên kết mang thuộc tính riêng, khác với mô hình ER cơ bản. Sinh viên cần chú ý bản số ở hai đầu liên kết và khóa của từng thực thể. Hướng giải mẫu này là khung để làm các bài tập còn lại. Khi làm bài, nên bắt đầu từ các mẫu hồ sơ, liệt kê thuộc tính, rồi gom thành thực thể. Sau đó xác định liên kết và bản số, cuối cùng vẽ ERD theo ký hiệu chuẩn. Luyện tập nhiều sẽ giúp nắm vững mô hình thực thể liên kết. Bước một là nền tảng, nếu liệt kê thiếu thuộc tính thì các bước sau sẽ sai. Bước hai cần phân biệt rõ thuộc tính nào thuộc thực thể nào và khóa là gì. Bước ba cần xác định đúng bản số để tránh mất thông tin. Bước bốn vẽ ERD theo đúng ký hiệu để người khác đọc được. Hy vọng hướng giải mẫu này giúp sinh viên tự tin làm các bài tập còn lại. Mỗi bài tập đều có thể giải theo bốn bước như mẫu. Chúc các bạn học tốt môn cơ sở dữ liệu.

Hướng giải mẫu - Bài tập 2_1 (4 bước)

Phần 1: Phát biểu bài toán - Cửa hàng mỹ phẩm với hóa đơn đặt hàng và hóa đơn bán/giao hàng.

Bước 1: Xác định thuộc tính - Liệt kê và chính xác hóa tên thuộc tính từ hai hóa đơn (Số HĐ đặt/giao, Mã khách, Họ tên khách, Địa chỉ, Ngày đặt/giao, Địa chỉ giao, Mã hàng, Tên hàng, ĐVT, Đơn giá, Số lượng đặt/giao, ...).

Bước 2: Xác định kiểu thực thể, thuộc tính, khóa

  • KHÁCH HÀNG(Mã khách, Họ tên khách, Địa chỉ).
  • HÀNG(Mã hàng, Tên hàng, ĐVT, Đơn giá).

Bước 3: Xác định kiểu liên kết, thuộc tính liên kết

  • Liên kết đặt: Số HĐ đặt, Ngày đặt, Số lượng đặt.
  • Liên kết giao: Số HĐ giao, Ngày giao, Địa chỉ giao, Số lượng giao.

Bước 4: Vẽ mô hình thực thể liên kết mở rộng - Hai thực thể và hai liên kết nhiều nhiều, mỗi liên kết mang thuộc tính riêng.

ERD text:
KHÁCH HÀNG (Mã khách PK, Họ tên, Địa chỉ)
   || (đặt) M:N || (giao) M:N
HÀNG (Mã hàng PK, Tên hàng, ĐVT, Đơn giá)
KHÁCH HÀNG Mã khách (PK) Họ tên, Địa chỉ HÀNG Mã hàng (PK) Tên hàng, ĐVT, Đơn giá đặt (M:N) giao (M:N)

Khái niệm quan hệ, tuple, miền, lược đồ

Chương 3 - Lý thuyết Mô hình quan hệ
0:00
Mô hình quan hệ là nền tảng của cơ sở dữ liệu quan hệ, trong đó dữ liệu được tổ chức thành các quan hệ biểu diễn bằng bảng. Thuộc tính là đơn vị mô tả nhỏ nhất, mỗi thuộc tính có tên và miền giá trị xác định kiểu dữ liệu và phạm vi hợp lệ. Về mặt toán học, mỗi thuộc tính A_i được gắn với miền Dom(A_i) khác rỗng, và thuộc tính là biến nhận giá trị trong miền đó. Ví dụ quan hệ SINH_VIÊN có các thuộc tính MãSV, HọTên, NgàySinh, GiớiTính với các miền Text, Date, Logic tương ứng. Bộ là một bản ghi trong quan hệ, biểu diễn một đối tượng cụ thể. Mỗi bộ là ánh xạ từ tập thuộc tính sang các giá trị cụ thể trong miền tương ứng; nếu tập thuộc tính là U = {A1, ..., An} thì bộ được viết t = (a1, ..., an) với ai thuộc Dom(Ai). Ví dụ bộ (4451050002, Nguyễn Văn A, 10/10/02, 1) mô tả thông tin một sinh viên cụ thể. Quan hệ R trên tập thuộc tính U là tập hữu hạn các bộ, là tập con của tích Descartes các miền Dom(Ai). Trực quan, quan hệ là bảng với cột là thuộc tính và dòng là bộ. Quan hệ không cho phép hai bộ hoàn toàn giống nhau, và thứ tự thuộc tính hay bộ không mang ý nghĩa. Lược đồ quan hệ mô tả cấu trúc logic của quan hệ, bao gồm tên quan hệ, tập thuộc tính và các ràng buộc trên các thuộc tính đó, được biểu diễn R(U, F). Lược đồ là định nghĩa ở mức thiết kế, còn quan hệ là thể hiện dữ liệu ở mức vận hành. Mọi ràng buộc về miền, khóa và tham chiếu đều được xác định trên lược đồ, và lược đồ quyết định cách lưu trữ, truy vấn dữ liệu. Các ký hiệu truyền thống giúp thống nhất cách biểu diễn: tên quan hệ viết hoa R, S, T; R(U) và R(U, F); thuộc tính đơn bằng chữ hoa đầu bảng, tập thuộc tính bằng chữ hoa cuối bảng; bộ bằng chữ thường t, s, t1; hạn chế của bộ trên tập X ký hiệu t[X] hoặc t.X. Quy ước gạch chân khóa và in nghiêng thuộc tính tham chiếu giúp đọc lược đồ chính xác. Việc nắm vững các khái niệm này là cơ sở để hiểu khóa, ràng buộc toàn vẹn và các quy tắc chuyển đổi từ mô hình thực thể liên kết sang mô hình quan hệ.

1. Thuộc tính và miền giá trị

Thuộc tính là một đặc trưng dùng để mô tả một khía cạnh của đối tượng trong thế giới thực được lưu trữ trong cơ sở dữ liệu. Mỗi thuộc tính có tên thuộc tính và miền giá trị, trong đó miền giá trị bao gồm kiểu dữ liệu và phạm vi giá trị hợp lệ. Về mặt toán học, mỗi thuộc tính A_i được gắn với một miền giá trị Dom(A_i), với Dom(A_i) ≠ ∅. Thuộc tính được hiểu như một biến nhận giá trị trong một tập xác định (miền).

Ví dụ, cho quan hệ SINH_VIÊN với các thuộc tính MãSV, HọTên, NgàySinh, GiớiTính, ta có Dom(MãSV) = Text(10), Dom(HọTên) = Text(100), Dom(NgàySinh) = Date(8), Dom(GiớiTính) = Logic(1). Các miền này xác định rõ kiểu và phạm vi dữ liệu hợp lệ cho từng thuộc tính.

2. Bộ (tuple)

Một bộ là một bản ghi trong quan hệ, biểu diễn một đối tượng cụ thể. Mỗi bộ là một ánh xạ từ tập thuộc tính sang các giá trị cụ thể trong miền tương ứng. Một bộ t trên tập thuộc tính U là hàm ánh xạ t: U → ⋃_{A∈U} Dom(A), sao cho ∀A ∈ U, t(A) ∈ Dom(A). Cách viết tương đương: nếu U = {A1, A2, ..., An} thì t = (a1, a2, ..., an) với ai ∈ Dom(Ai).

Ví dụ, trong quan hệ SINH_VIÊN, bộ (4451050002, Nguyễn Văn A, 10/10/02, 1) mô tả thông tin của sinh viên có mã sinh viên 4451050002. Mỗi giá trị trong bộ phải thuộc miền của thuộc tính tương ứng.

3. Quan hệ (relation)

Một quan hệ R trên tập thuộc tính U = {A1, A2, ..., An} là một tập hữu hạn các bộ, tức là R ⊆ Dom(A1) × Dom(A2) × ... × Dom(An), hay nói cách khác R = { t | t là một bộ trên U }. Trực quan, mỗi quan hệ R(U) là một bảng: mỗi cột là một thuộc tính, mỗi dòng là một bộ. Ký hiệu t[U] là một bộ trên tập thuộc tính U.

MãSVHọTênNgàySinhGiớiTính
4451050002Nguyễn Văn A10/10/021
4451130014Hồ Ngọc Hà25/11/010
4454030114Tô Ngọc Long11/02/021
4451050123Vũ Như Cẩn24/12/011

Tóm tắt và lời khuyên: thuộc tính là đơn vị mô tả nhỏ nhất của dữ liệu; bộ biểu diễn một cá thể cụ thể trong thế giới thực; quan hệ chỉ lưu trữ dữ liệu, không lưu trữ cấu trúc; trong một quan hệ không cho phép tồn tại hai bộ hoàn toàn giống nhau; thứ tự thuộc tính hay bộ không mang ý nghĩa trong mô hình quan hệ.

4. Lược đồ quan hệ (schema)

Lược đồ quan hệ mô tả cấu trúc logic của một quan hệ trong cơ sở dữ liệu, bao gồm tên quan hệ, tập các thuộc tính và các ràng buộc tham chiếu trên các thuộc tính đó. Lược đồ quan hệ không chứa dữ liệu cụ thể, mà chỉ mô tả khuôn dạng (schema) của dữ liệu. Trong lý thuyết cơ sở dữ liệu, lược đồ quan hệ thường được biểu diễn R(U, F), trong đó R là tên quan hệ, U là tập thuộc tính, F là tập các ràng buộc (phụ thuộc hàm) xác định trên U. Trong một cơ sở dữ liệu sẽ bao gồm một hay nhiều lược đồ quan hệ.

Tiêu chíLược đồ quan hệQuan hệ
Khái niệmMô tả cấu trúc logic của dữ liệuTập dữ liệu cụ thể tuân theo lược đồ
Bản chấtĐịnh nghĩa (schema)Thể hiện (instance)
Thành phầnTên quan hệ, tập thuộc tính, ràng buộcTập các bộ (tuple)
Mức trừu tượngMức thiết kếMức vận hành
KhóaĐược xác định trên lược đồGiá trị khóa xuất hiện trong dữ liệu
Ràng buộcĐịnh nghĩa ràng buộc miền, khóa, tham chiếuPhải tuân thủ các ràng buộc

Lược đồ quan hệ là cơ sở của thiết kế cơ sở dữ liệu; mọi ràng buộc về khóa, miền giá trị và tham chiếu đều được xác định trên lược đồ; lược đồ quyết định cách lưu trữ và truy vấn dữ liệu.

5. Các ký hiệu truyền thống

  • Ký hiệu lược đồ quan hệ: R, S, T,... là tên quan hệ (viết hoa); R(U) là lược đồ quan hệ R với tập thuộc tính U; R(U, F) là lược đồ quan hệ R với tập thuộc tính U và tập phụ thuộc hàm F xác định trên U.
  • Ký hiệu thuộc tính: chữ Latin hoa đầu bảng A, B, C,... cho thuộc tính đơn; A_i là thuộc tính thứ i; chữ Latin hoa cuối bảng U, V,..., X, Y, Z cho tập thuộc tính; U = ABC hoặc U = {A, B, C} biểu diễn các phần tử trong một tập thuộc tính.
  • Ký hiệu bộ của quan hệ: các bộ biểu diễn bằng chữ cái Latin thường (có thể có chỉ số) t, s, t1, t2,...; với mỗi bộ t trong quan hệ R(U) và mỗi tập con thuộc tính X ⊆ U, ký hiệu t[X] hoặc t.X là hạn chế của bộ t trên tập thuộc tính X.
  • Quy ước khác: tên quan hệ chữ in hoa (SINH_VIÊN); tên thuộc tính chữ cái đầu viết hoa hoặc thường (MãSV, HọTên); khóa của lược đồ quan hệ được gạch chân; tập thuộc tính tham chiếu in nghiêng.

Ví dụ, với lược đồ quan hệ SINH_VIÊN(MãSV, HọTên, NgàySinh, GiớiTính), ta có U = {MãSV, HọTên, NgàySinh, GiớiTính, MãHP}; t = (4451150001, Nguyễn Văn A, 12/12/01, 1); X = {HọTên, NgàySinh} ⊆ U; t.X = t[X] = (Nguyễn Văn A, 12/12/01).

Khóa của quan hệ (siêu khóa, khóa ứng viên, khóa chính, khóa ngoại)

Chương 3 - Lý thuyết Mô hình quan hệ
0:00
Khóa là khái niệm trung tâm của mô hình quan hệ, đảm bảo mỗi bộ trong quan hệ được phân biệt duy nhất và là cơ sở để liên kết các quan hệ với nhau. Siêu khóa là tập con các thuộc tính sao cho không có hai bộ nào có cùng giá trị trên tập đó; hình thức ∀t1, t2 ∈ R, t1[K] = t2[K] ⇒ t1 = t2. Tập tất cả thuộc tính luôn là siêu khóa, nhưng thường không tối thiểu. Khóa ứng viên là siêu khóa tối thiểu, nghĩa là không có tập con thực sự nào của nó cũng là siêu khóa. Khóa ứng viên phải xác định được giá trị của mọi thuộc tính, và không có tập con thực sự nào có thể làm điều đó. Một quan hệ có thể có nhiều khóa ứng viên, mỗi khóa đều có khả năng phân biệt duy nhất các bộ. Khóa chính là khóa ứng viên được chọn để đại diện cho quan hệ, thường gạch chân trong lược đồ. Khóa chính phải duy nhất và không được rỗng theo ràng buộc toàn vẹn thực thể. Khi có nhiều khóa ứng viên, nên chọn khóa đơn giản, ổn định, ngắn gọn và ít thay đổi theo thời gian, ví dụ MãSV trong SINH_VIÊN. Khóa ngoại là tập thuộc tính trong quan hệ R tham chiếu đến khóa của quan hệ S. Giá trị khóa ngoại phải tồn tại trong quan hệ được tham chiếu hoặc NULL nếu cho phép. Khóa ngoại cùng miền giá trị với khóa được tham chiếu. Một thuộc tính có thể vừa là khóa, vừa là khóa ngoại; một khóa ngoại chỉ tham chiếu đến khóa trên cùng một cơ sở dữ liệu; có thể có nhiều khóa ngoại cùng tham chiếu đến cùng một khóa. Ví dụ với SINH_VIÊN, HỌC_PHẦN và SV_HP: MãSV là khóa của SINH_VIÊN, MãHP là khóa của HỌC_PHẦN, (MãSV, MãHP) là khóa của SV_HP. Ràng buộc tham chiếu gồm SINH_VIÊN.MãHP tham chiếu HỌC_PHẦN.MãHP, SV_HP.MãSV tham chiếu SINH_VIÊN.MãSV và SV_HP.MãHP tham chiếu HỌC_PHẦN.MãHP. Khóa có thể là đơn hoặc tổ hợp. Khóa tổ hợp thường xuất hiện trong quan hệ liên kết nhiều-nhiều. Việc xác định đúng khóa là tiền đề để thiết lập ràng buộc toàn vẹn và đảm bảo dữ liệu không trùng lặp.

1. Siêu khóa (superkey)

Siêu khóa là một tập con K ⊆ U của các thuộc tính sao cho không có hai bộ nào trong quan hệ có cùng giá trị trên K. Hình thức: ∀t1, t2 ∈ R, t1[K] = t2[K] ⇒ t1 = t2. Siêu khóa đảm bảo tính duy nhất của bộ. Tập tất cả thuộc tính U luôn là một siêu khóa, nhưng thường không tối thiểu và không thuận tiện để sử dụng.

2. Khóa ứng viên (candidate key)

Khóa ứng viên là siêu khóa tối thiểu: không tồn tại K' ⊂ K sao cho K' cũng là siêu khóa. Điều kiện tối thiểu: K xác định được giá trị của mọi thuộc tính Ai (i = 1..n), và không tồn tại K' ⊂ K có thể xác định được giá trị của mọi Ai. Một quan hệ có thể có nhiều khóa ứng viên; mỗi khóa ứng viên đều có khả năng phân biệt duy nhất các bộ.

3. Khóa chính (primary key)

Khóa chính là khóa ứng viên được chọn để đại diện cho quan hệ, thường được gạch chân trong lược đồ. Khóa chính phải duy nhất và không được rỗng (NULL) theo ràng buộc toàn vẹn thực thể. Khi có nhiều khóa ứng viên, ưu tiên chọn khóa đơn giản, ổn định, ngắn gọn và ít thay đổi theo thời gian. Ví dụ, trong quan hệ SINH_VIÊN, MãSV là khóa chính.

4. Khóa ngoại (foreign key)

Khóa ngoại là tập thuộc tính trong quan hệ R tham chiếu đến tập thuộc tính khóa (thường là khóa chính) của quan hệ S. Điều kiện: cùng miền giá trị; giá trị của khóa ngoại phải tồn tại trong quan hệ được tham chiếu (hoặc NULL nếu cho phép). Ràng buộc tham chiếu đảm bảo tính nhất quán giữa các quan hệ. Một số nhận xét:

  • Trong một quan hệ, một thuộc tính có thể vừa tham gia thuộc tính khóa, vừa tham gia thuộc tính tham chiếu.
  • Tập thuộc tính tham chiếu chỉ tham chiếu đến tập thuộc tính khóa trên cùng một cơ sở dữ liệu.
  • Có thể có nhiều thuộc tính tham chiếu cùng tham chiếu đến tập thuộc tính khóa.

5. Ví dụ xác định khóa và khóa ngoại

Cho các quan hệ: SINH_VIÊN(MãSV, HọTên, NgàySinh, GiớiTính, MãHP), HỌC_PHẦN(MãHP, TênHP, SốTC), SV_HP(MãSV, MãHP, Ngày_Đăng_Ký, ĐiểmHP).

  • Quan hệ SINH_VIÊN có khóa là MãSV; quan hệ HỌC_PHẦN có khóa là MãHP; quan hệ SV_HP có khóa là (MãSV, MãHP).
  • Ràng buộc tham chiếu: SINH_VIÊN.MãHP tham chiếu đến khóa HỌC_PHẦN.MãHP; SV_HP.MãSV tham chiếu đến khóa SINH_VIÊN.MãSV và SV_HP.MãHP tham chiếu đến khóa HỌC_PHẦN.MãHP.

Khóa có thể là đơn (một thuộc tính) hoặc tổ hợp (nhiều thuộc tính). Khóa tổ hợp thường xuất hiện trong quan hệ liên kết nhiều-nhiều, nơi không có thuộc tính đơn nào đủ để phân biệt duy nhất các bộ.

Các ràng buộc toàn vẹn (thực thể, tham chiếu, miền)

Chương 3 - Lý thuyết Mô hình quan hệ
0:00
Ràng buộc toàn vẹn là tập hợp các quy tắc đảm bảo dữ liệu trong cơ sở dữ liệu quan hệ luôn đúng, nhất quán và hợp lệ. Ràng buộc miền giá trị yêu cầu mọi giá trị của thuộc tính phải thuộc miền đã xác định, ví dụ tuổi phải từ 18 đến 60 và giới tính chỉ nhận 1 hoặc 0. Ràng buộc này ngăn chặn dữ liệu sai ngay từ lúc nhập. Ràng buộc khóa đảm bảo mỗi bộ trong quan hệ được phân biệt duy nhất bởi giá trị khóa, tránh trùng lặp và tạo nền tảng cho việc liên kết giữa các quan hệ. Nếu hai bộ có cùng giá trị khóa thì dữ liệu không hợp lệ. Ràng buộc toàn vẹn thực thể yêu cầu giá trị khóa chính không được rỗng. Khóa chính phải tồn tại và duy nhất cho mỗi bộ, đảm bảo mỗi thực thể được nhận diện rõ ràng. Ràng buộc tham chiếu đảm bảo giá trị của tập thuộc tính tham chiếu trong một quan hệ phải tồn tại trong tập thuộc tính khóa của quan hệ được tham chiếu. Điều kiện bao gồm cùng miền giá trị và sự tồn tại của giá trị trong quan hệ đích. Ràng buộc này đảm bảo tính nhất quán giữa các quan hệ. Một thuộc tính có thể vừa là khóa vừa là khóa ngoại; khóa ngoại chỉ tham chiếu đến khóa trên cùng một cơ sở dữ liệu; có thể có nhiều khóa ngoại cùng tham chiếu đến cùng một khóa. Ví dụ minh họa với SINH_VIÊN, HỌC_PHẦN và SV_HP cho thấy các khóa và ràng buộc tham chiếu giữa chúng. Ba ràng buộc bổ trợ lẫn nhau: miền giá trị kiểm soát giá trị, khóa kiểm soát bộ, tham chiếu kiểm soát mối quan hệ giữa các quan hệ. Lời khuyên là xác định miền giá trị càng chặt chẽ càng tốt, mỗi quan hệ bắt buộc phải có ít nhất một khóa, ưu tiên khóa đơn giản ổn định ngắn gọn, và xác định rõ hướng tham chiếu cùng ý nghĩa nghiệp vụ. Mọi thao tác thêm, sửa, xóa phải tuân thủ các ràng buộc này; khi sửa hoặc xóa cần dùng điều kiện chính xác để tránh mất dữ liệu; thay đổi giá trị khóa hoặc khóa ngoại dễ vi phạm toàn vẹn tham chiếu và gây lỗi dây chuyền.

1. Ràng buộc miền giá trị (domain constraint)

Ràng buộc miền giá trị yêu cầu mọi giá trị của một thuộc tính phải thuộc miền giá trị xác định của thuộc tính đó: ∀t ∈ R, t[A] ∈ Dom(A). Ràng buộc này đảm bảo tính hợp lệ của dữ liệu, ngăn chặn giá trị sai kiểu hoặc sai phạm vi. Ví dụ, trong quan hệ SINH_VIÊN(MãSV, Tuổi, GiớiTính): Dom(Tuổi) = { x ∈ ℕ | 18 ≤ x ≤ 60 }, Dom(GiớiTính) = {1, 0}.

2. Ràng buộc khóa (key constraint)

Ràng buộc khóa đảm bảo mỗi bộ trong quan hệ được phân biệt duy nhất bởi giá trị khóa: ∀t1, t2 ∈ R, t1[K] = t2[K] ⇒ t1 = t2. Khóa K xác định được giá trị của Ai (i = 1..n), và không tồn tại K' ⊂ K có thể xác định được giá trị của Ai. Ý nghĩa: tránh dữ liệu trùng lặp và tạo nền tảng cho việc liên kết giữa các quan hệ. Ví dụ, trong quan hệ SINH_VIÊN(MãSV, HọTên, NgàySinh), hai bộ t1 = (SV01, Nguyễn Văn A, 10/10/02) và t2 = (SV01, Nguyễn Thị B, 25/11/01) là không hợp lệ vì cùng khóa MãSV.

3. Ràng buộc toàn vẹn thực thể (entity integrity)

Ràng buộc toàn vẹn thực thể yêu cầu giá trị khóa chính không được rỗng (NULL). Ví dụ, trong quan hệ SINH_VIÊN(MãSV, HọTên, NgàySinh) với khóa là MãSV, bộ t1 = (NULL, Nguyễn Văn A, 10/10/02) là không hợp lệ. Khóa chính phải tồn tại và duy nhất cho mỗi bộ, đảm bảo mỗi thực thể được nhận diện rõ ràng.

4. Ràng buộc tham chiếu (referential integrity)

Ràng buộc tham chiếu: một bộ trong quan hệ R, tại tập thuộc tính X nếu nhận giá trị từ tập thuộc tính Y của quan hệ S, ta gọi R tham chiếu S. Tập thuộc tính Y của S phải có cùng miền giá trị với tập thuộc tính X của R; giá trị của tập thuộc tính Y là một bộ t1 ∈ S bằng giá trị tập thuộc tính X của một bộ t2 ∈ R. Nói cách khác, giá trị của tập thuộc tính tham chiếu trong một quan hệ phải tồn tại trong tập thuộc tính khóa của quan hệ được tham chiếu. Ý nghĩa: đảm bảo tính nhất quán giữa các quan hệ.

  • Trong một quan hệ, một thuộc tính có thể vừa tham gia thuộc tính khóa, vừa tham gia thuộc tính tham chiếu.
  • Tập thuộc tính tham chiếu chỉ tham chiếu đến tập thuộc tính khóa trên cùng một cơ sở dữ liệu.
  • Có thể có nhiều thuộc tính tham chiếu cùng tham chiếu đến tập thuộc tính khóa.

Ví dụ: quan hệ SINH_VIÊN(MãSV, HọTên, NgàySinh, MãHP) và HỌC_PHẦN(MãHP, TênHP, SốTC); ràng buộc tham chiếu: SINH_VIÊN.MãHP tham chiếu đến khóa HỌC_PHẦN.MãHP.

Ví dụ minh họa tổng hợp: SINH_VIÊN(MãSV, HọTên, NgàySinh, GiớiTính, MãHP), HỌC_PHẦN(MãHP, TênHP, SốTC), SV_HP(MãSV, MãHP, Ngày_Đăng_Ký, ĐiểmHP). Thuộc tính khóa: SINH_VIÊN có khóa MãSV; HỌC_PHẦN có khóa MãHP; SV_HP có khóa (MãSV, MãHP). Ràng buộc tham chiếu: SINH_VIÊN.MãHP tham chiếu HỌC_PHẦN.MãHP; SV_HP.MãSV tham chiếu SINH_VIÊN.MãSV và SV_HP.MãHP tham chiếu HỌC_PHẦN.MãHP.

5. Ba ràng buộc bổ trợ nhau

Ràng buộcVai trò
Miền giá trịKiểm soát giá trị của từng thuộc tính, ngăn chặn dữ liệu sai ngay từ lúc nhập
KhóaKiểm soát bộ, tránh trùng lặp, tạo nền tảng liên kết
Tham chiếuKiểm soát mối quan hệ giữa các quan hệ, đảm bảo nhất quán

Miền giá trị kiểm soát giá trị, khóa kiểm soát bộ, tham chiếu kiểm soát mối quan hệ giữa các quan hệ. Lời khuyên: xác định miền giá trị càng chặt chẽ càng tốt, chỉ cho phép các giá trị hợp lệ theo nghiệp vụ thực tế; mỗi quan hệ bắt buộc phải có ít nhất một khóa; ưu tiên chọn khóa đơn giản, ổn định và ngắn gọn; xác định rõ hướng tham chiếu giữa các quan hệ và ý nghĩa nghiệp vụ của mối liên kết. Việc thay đổi giá trị của các thuộc tính khóa, thuộc tính tham chiếu dễ vi phạm toàn vẹn tham chiếu và làm phát sinh lỗi dây chuyền, nên khi sửa hoặc xóa cần sử dụng điều kiện WHERE chính xác.

Quy tắc chuyển đổi ERD sang mô hình quan hệ

Chương 3 - Lý thuyết Mô hình quan hệ
0:00
Các quy tắc chuyển đổi từ mô hình thực thể liên kết sang mô hình quan hệ nhằm bảo toàn ngữ nghĩa của mô hình ERD, giảm dư thừa, tăng tính nhất quán và tối ưu cấu trúc dữ liệu. Quy tắc một: mỗi kiểu thực thể được chuyển thành một quan hệ; tên quan hệ trùng tên kiểu thực thể; các thuộc tính trở thành thuộc tính của quan hệ; thuộc tính khóa trở thành khóa của quan hệ. Ví dụ kiểu thực thể SINH VIÊN trở thành quan hệ SINH_VIÊN(MãSV, HọVàTên, NgàySinh, GiớiTính). Quy tắc hai xử lý kiểu liên kết một-một: áp dụng quy tắc một, sau đó đưa khóa của một quan hệ sang quan hệ còn lại làm thuộc tính tham chiếu; các thuộc tính của kiểu liên kết, nếu có, đưa vào quan hệ chứa thuộc tính tham chiếu. Ví dụ NHÂN VIÊN và TÀI KHOẢN liên kết một-một: NHÂN_VIÊN(MãNV, HọVàTên) và TÀI_KHOẢN(MãTK, TênĐăngNhập, MậtKhẩu, MãNV), với MãNV là khóa ngoại; nếu có thuộc tính NgàyCấp thì đưa vào TÀI_KHOẢN. Quy tắc ba xử lý kiểu liên kết một-nhiều: đưa khóa của phía bên một sang phía bên nhiều làm thuộc tính tham chiếu; thuộc tính của kiểu liên kết đưa vào phía bên nhiều. Ví dụ KHOA và SINH_VIÊN: KHOA(MãKhoa, TênKhoa) và SINH_VIÊN(MãSV, HọVàTên, NgàySinh, MãKhoa), với MãKhoa là khóa ngoại; nếu có NgàyNhậpKhoa thì đưa vào SINH_VIÊN. Liên kết nhiều-nhiều thường được xử lý bằng cách tạo quan hệ mới với khóa tổ hợp gồm khóa của các kiểu thực thể tham gia, cùng thuộc tính riêng của kiểu liên kết, sau đó nối với các kiểu thực thể gốc bằng liên kết một-nhiều. Ví dụ SV_KH(MãSV, MãKH, ThờiGianĐăngKý, ĐiểmTB) với khóa (MãSV, MãKH). Việc áp dụng đúng các quy tắc này quyết định chất lượng thiết kế cơ sở dữ liệu quan hệ, giúp mô hình quan hệ phản ánh đúng nghiệp vụ, dễ triển khai và bảo trì.

Mục tiêu và ý nghĩa

Các quy tắc chuyển đổi nhằm bảo toàn ngữ nghĩa của mô hình thực thể liên kết khi chuyển sang mô hình quan hệ, giảm dư thừa, tăng tính nhất quán và tối ưu cấu trúc dữ liệu. Việc áp dụng đúng các quy tắc này quyết định chất lượng thiết kế cơ sở dữ liệu quan hệ.

Quy tắc 1: Chuyển kiểu thực thể thành quan hệ

  • Mỗi kiểu thực thể trong mô hình thực thể liên kết được chuyển thành một quan hệ trong mô hình quan hệ.
  • Tên quan hệ trùng với tên kiểu thực thể.
  • Các thuộc tính của kiểu thực thể trở thành các thuộc tính của quan hệ.
  • Thuộc tính khóa của kiểu thực thể trở thành khóa của quan hệ.

Ví dụ: kiểu thực thể SINH VIÊN được chuyển thành quan hệ SINH_VIÊN(MãSV, HọVàTên, NgàySinh, GiớiTính).

Quy tắc 2: Kiểu liên kết 1-1

  • Áp dụng quy tắc 1 để chuyển kiểu thực thể thành quan hệ.
  • Đưa khóa của một quan hệ sang quan hệ còn lại làm thuộc tính tham chiếu.
  • Các thuộc tính của kiểu liên kết (nếu có) đưa vào quan hệ chứa thuộc tính tham chiếu.

Ví dụ, giữa NHÂN VIÊN và TÀI KHOẢN có kiểu liên kết 1-1 "Có", vì mỗi nhân viên có đúng một tài khoản do đơn vị cấp. Áp dụng quy tắc 2:

  • Quan hệ NHÂN_VIÊN(MãNV, HọVàTên).
  • Quan hệ TÀI_KHOẢN(MãTK, TênĐăngNhập, MậtKhẩu, MãNV).

Trong quan hệ TÀI_KHOẢN, MãNV là khóa ngoại tham chiếu đến khóa NHÂN_VIÊN.MãNV. Giả sử kiểu liên kết có thuộc tính NgàyCấp, thuộc tính này được đưa vào quan hệ TÀI_KHOẢN.

Quy tắc 3: Kiểu liên kết 1-nhiều

  • Áp dụng quy tắc 1 để chuyển kiểu thực thể thành quan hệ.
  • Đưa khóa của quan hệ phía bên một sang quan hệ phía bên nhiều làm thuộc tính tham chiếu.
  • Các thuộc tính của kiểu liên kết (nếu có) đưa vào quan hệ phía bên nhiều.

Ví dụ, giữa SINH VIÊN và KHOA có kiểu liên kết 1-nhiều "Thuộc", vì mỗi sinh viên thuộc một khoa và một khoa có nhiều sinh viên. Áp dụng quy tắc 3:

  • Quan hệ KHOA(MãKhoa, TênKhoa).
  • Quan hệ SINH_VIÊN(MãSV, HọVàTên, NgàySinh, MãKhoa).

Quan hệ SINH_VIÊN nhận thuộc tính khóa MãKhoa của quan hệ KHOA làm thuộc tính tham chiếu. Giả sử kiểu liên kết có thuộc tính NgàyNhậpKhoa, thuộc tính này được đưa vào quan hệ SINH_VIÊN.

Ghi chú về liên kết nhiều-nhiều

Liên kết nhiều-nhiều không thuộc ba quy tắc trên nhưng thường được xử lý bằng cách tạo một quan hệ mới (quan hệ liên kết) với khóa tổ hợp gồm khóa của các kiểu thực thể tham gia, cùng các thuộc tính riêng của kiểu liên kết; sau đó nối với các kiểu thực thể gốc bằng liên kết một-nhiều. Ví dụ, liên kết "Đăng ký" giữa SINH VIÊN và KHÓA HỌC có thuộc tính riêng Thời gian đăng ký và Điểm trung bình, tạo quan hệ SV_KH(MãSV, MãKH, ThờiGianĐăngKý, ĐiểmTB) với khóa (MãSV, MãKH), trong đó MãSV tham chiếu SINH_VIÊN.MãSV và MãKH tham chiếu KHÓA_HỌC.MãKH.

Ví dụ minh họa

Chương 3 - Lý thuyết Mô hình quan hệ
0:00
Ví dụ minh họa tổng hợp áp dụng toàn bộ lý thuyết Chương 3 cho hệ thống quản lý đào tạo đại học. Trước hết, chuyển mỗi kiểu thực thể thành quan hệ: KHOA, SINH_VIÊN, GIẢNG_VIÊN, KHÓA_HỌC, LỚP_HỌC, với khóa tương ứng MãKhoa, MãSV, MãGV, MãKH, MãLH. Tiếp theo xử lý liên kết một-nhiều giữa KHOA và SINH_VIÊN: đưa MãKhoa vào SINH_VIÊN làm khóa ngoại, thể hiện mỗi sinh viên thuộc một khoa. Liên kết một-một minh họa giữa NHÂN VIÊN và TÀI KHOẢN: đưa MãNV vào TÀI_KHOẢN làm khóa ngoại, đồng thời đưa thuộc tính riêng NgàyCấp vào TÀI_KHOẢN. Liên kết nhiều-nhiều giữa SINH_VIÊN và KHÓA_HỌC qua 'Đăng ký' có thuộc tính riêng Thời gian đăng ký và Điểm trung bình; tạo quan hệ SV_KH với khóa tổ hợp (MãSV, MãKH) và các thuộc tính riêng, trong đó MãSV và MãKH là khóa ngoại tham chiếu đến SINH_VIÊN và KHÓA_HỌC. Lược đồ quan hệ tổng hợp gồm KHOA, SINH_VIÊN, GIẢNG_VIÊN, KHÓA_HỌC và SV_KH, với khóa gạch chân và khóa ngoại in nghiêng. Kiểm tra mô hình đảm bảo mỗi quan hệ có khóa, các khóa ngoại tham chiếu đúng, thuộc tính riêng của liên kết được bảo toàn, không còn liên kết nhiều-nhiều trực tiếp. Mọi thao tác thêm, sửa, xóa trên các quan hệ phải tuân thủ ràng buộc miền giá trị, khóa và tham chiếu để đảm bảo tính toàn vẹn dữ liệu. Khi sửa hoặc xóa, cần sử dụng điều kiện chính xác để tránh làm thay đổi hoặc mất dữ liệu không mong muốn; thay đổi giá trị khóa hoặc khóa ngoại dễ vi phạm toàn vẹn tham chiếu và gây lỗi dây chuyền. Việc kiểm tra mô hình sau chuyển đổi giúp phát hiện sớm các sai sót về khóa, khóa ngoại và thuộc tính, đảm bảo cơ sở dữ liệu quan hệ được triển khai chính xác, nhất quán và dễ bảo trì.

Ví dụ minh họa: Hệ thống quản lý đào tạo

Xuất phát từ mô hình thực thể liên kết, áp dụng các quy tắc chuyển đổi để thu được mô hình quan hệ cho hệ thống quản lý đào tạo đại học.

1. Chuyển kiểu thực thể thành quan hệ

  • KHOA(MãKhoa, TênKhoa)
  • SINH_VIÊN(MãSV, HọVàTên, NgàySinh, GiớiTính)
  • GIẢNG_VIÊN(MãGV, HọVàTên, Khoa, HọcVị)
  • KHÓA_HỌC(MãKH, TênKH, SốTC)
  • LỚP_HỌC(MãLH, PhòngHọc, CaHọc)

2. Liên kết 1-nhiều: Khoa - Sinh viên

KHOA 1 - n SINH_VIÊN "Thuộc". Đưa khóa MãKhoa của KHOA vào SINH_VIÊN làm khóa ngoại:

SINH_VIÊN(MãSV, HọVàTên, NgàySinh, GiớiTính, MãKhoa)

3. Liên kết 1-1: Nhân viên - Tài khoản (minh họa)

NHÂN_VIÊN(MãNV, HọVàTên); TÀI_KHOẢN(MãTK, TênĐăngNhập, MậtKhẩu, MãNV, NgàyCấp), trong đó MãNV là khóa ngoại tham chiếu NHÂN_VIÊN.MãNV.

4. Liên kết nhiều-nhiều: Sinh viên - Khóa học

Liên kết "Đăng ký" có thuộc tính riêng Thời gian đăng ký và Điểm trung bình. Tạo quan hệ SV_KH:

SV_KH(MãSV, MãKH, ThờiGianĐăngKý, ĐiểmTB), với MãSV tham chiếu SINH_VIÊN.MãSV và MãKH tham chiếu KHÓA_HỌC.MãKH.

5. Lược đồ quan hệ tổng hợp

Quan hệThuộc tính (khóa gạch chân, khóa ngoại in nghiêng)
KHOAMãKhoa, TênKhoa
SINH_VIÊNMãSV, HọVàTên, NgàySinh, GiớiTính, MãKhoa
GIẢNG_VIÊNMãGV, HọVàTên, Khoa, HọcVị
KHÓA_HỌCMãKH, TênKH, SốTC
SV_KHMãSV, MãKH, ThờiGianĐăngKý, ĐiểmTB

Kiểm tra mô hình: mỗi quan hệ có khóa; các khóa ngoại tham chiếu đúng; thuộc tính riêng của liên kết được bảo toàn; không còn liên kết nhiều-nhiều trực tiếp. Các thao tác thêm, sửa, xóa trên các quan hệ phải tuân thủ ràng buộc miền giá trị, khóa và tham chiếu.

Khái niệm đại số quan hệ

Chương 4 - Lý thuyết Đại số quan hệ
0:00
Đại số quan hệ là ngôn ngữ truy vấn hình thức được xây dựng trên cơ sở lý thuyết tập hợp và logic quan hệ, dùng để thao tác và khai thác dữ liệu trong các hệ quản trị cơ sở dữ liệu quan hệ. Ngôn ngữ này mô tả cách truy vấn dữ liệu thông qua một tập các phép toán toán học tác động trực tiếp lên các quan hệ, từ đó tạo ra các quan hệ mới làm kết quả trung gian hoặc kết quả cuối cùng. Đại số quan hệ còn đóng vai trò nền tảng lý thuyết cho các hệ quản trị cơ sở dữ liệu quan hệ hiện đại, là cơ sở để xây dựng và tối ưu hóa các ngôn ngữ truy vấn bậc cao như SQL. Mặc dù người dùng cuối thường không làm việc trực tiếp với đại số quan hệ, nhưng mọi truy vấn SQL đều có thể được ánh xạ về các biểu thức đại số quan hệ tương ứng trong quá trình tối ưu và thực thi truy vấn. Việc nắm vững đại số quan hệ giúp hiểu rõ bản chất xử lý dữ liệu, cách kết hợp, lọc, chiếu và nối các quan hệ một cách chặt chẽ và chính xác, đồng thời là cơ sở để thiết kế truy vấn hiệu quả và phân tích tối ưu truy vấn. Trong ngôn ngữ đại số quan hệ, các phép toán được chia thành hai nhóm chính phản ánh nguồn gốc lý thuyết và phạm vi áp dụng. Nhóm thứ nhất là các phép toán lý thuyết tập hợp gồm hợp, giao, trừ và tích Descartes, là những phép toán kế thừa trực tiếp từ lý thuyết tập hợp, áp dụng cho các quan hệ có cùng một lược đồ quan hệ, cho phép kết hợp hoặc so sánh các tập bộ dữ liệu theo quy tắc hình thức chặt chẽ. Nhóm thứ hai là các phép toán trên cơ sở dữ liệu quan hệ gồm chọn, chiếu, kết nối và chia, được thiết kế riêng để thao tác dữ liệu trong CSDL quan hệ, phản ánh trực tiếp các nhu cầu truy vấn thực tế, giúp trích lọc, liên kết và tái cấu trúc dữ liệu một cách linh hoạt và hiệu quả. Để áp dụng các phép toán lý thuyết tập hợp như hợp, giao, trừ, hai quan hệ phải tương thích hay khả hợp, nghĩa là cùng số thuộc tính, cùng miền giá trị và cùng thứ tự thuộc tính. Tích Descartes không yêu cầu điều kiện này. Mỗi phép toán nhận đầu vào là quan hệ và trả về quan hệ mới, không thay đổi dữ liệu gốc, và kết quả luôn là tập các bộ không trùng lặp. Đây là đặc trưng quan trọng phân biệt đại số quan hệ với các mô hình dữ liệu khác và là nền tảng để xây dựng biểu thức truy vấn phức tạp.

1. Định nghĩa đại số quan hệ

Đại số quan hệ là ngôn ngữ truy vấn hình thức được xây dựng trên cơ sở lý thuyết tập hợp và logic quan hệ, dùng để thao tác và khai thác dữ liệu trong các hệ quản trị cơ sở dữ liệu quan hệ. Ngôn ngữ này mô tả cách truy vấn dữ liệu thông qua một tập các phép toán toán học tác động trực tiếp lên các quan hệ (bảng), từ đó tạo ra các quan hệ mới làm kết quả trung gian hoặc kết quả cuối cùng.

2. Vai trò trong cơ sở dữ liệu quan hệ

  • Là nền tảng lý thuyết cho các hệ quản trị cơ sở dữ liệu quan hệ hiện đại.
  • Là cơ sở để xây dựng và tối ưu hóa các ngôn ngữ truy vấn bậc cao như SQL.
  • Mọi truy vấn SQL đều có thể được ánh xạ về các biểu thức đại số quan hệ tương ứng trong quá trình tối ưu và thực thi truy vấn.
  • Giúp người học hiểu rõ bản chất xử lý dữ liệu: kết hợp, lọc, chiếu và nối các quan hệ một cách chặt chẽ và chính xác.

3. Hai nhóm phép toán chính

Nhóm phép toánCác phép toánĐặc điểm
Phép toán lý thuyết tập hợpHợp (∪), giao (∩), trừ (−), tích Descartes (×)Kế thừa trực tiếp từ lý thuyết tập hợp; thường yêu cầu các quan hệ tương thích (khả hợp), trừ tích Descartes
Phép toán trên CSDL quan hệChọn (σ), chiếu (π), kết nối (*), chia (÷)Thiết kế riêng cho CSDL quan hệ, phản ánh trực tiếp nhu cầu truy vấn thực tế

4. Quan hệ tương thích (khả hợp)

Giả thiết U = {A1, A2, ..., An} và V = {B1, B2, ..., Bn}. Hai quan hệ R(U) và S(V) được gọi là tương thích khi và chỉ khi U = V, tức là chúng có cùng cấu trúc lược đồ. Nói cách khác: số bậc (ngôi) của R và S bằng nhau; các thuộc tính tương ứng có cùng miền giá trị dom(Ai) = dom(Bi) (1 ≤ i ≤ n) và được sắp theo cùng một thứ tự. Điều kiện này là tiền đề để áp dụng hợp, giao, trừ.

5. Tính chất chung của phép toán

Mỗi phép toán trong đại số quan hệ nhận đầu vào là một hoặc nhiều quan hệ và trả về một quan hệ mới. Phép toán không làm thay đổi dữ liệu gốc mà tạo ra quan hệ kết quả, có thể dùng tiếp làm đầu vào cho phép toán khác để tạo thành biểu thức đại số quan hệ. Kết quả luôn là một tập các bộ không trùng lặp (tính chất quan hệ).

Các phép toán cơ bản (hợp, giao, trừ, tích Descartes)

Chương 4 - Lý thuyết Đại số quan hệ
0:00
Các phép toán cơ bản của đại số quan hệ gồm hợp, giao, trừ và tích Descartes, là các phép toán lý thuyết tập hợp được kế thừa trực tiếp từ lý thuyết tập hợp. Phép hợp là phép toán dùng để kết hợp các bộ dữ liệu của hai quan hệ tương thích thành một quan hệ mới, trong đó mỗi bộ xuất hiện duy nhất một lần. Điều kiện áp dụng là hai quan hệ phải cùng số thuộc tính, cùng miền giá trị và cùng thứ tự thuộc tính. Kết quả có cùng lược đồ với hai quan hệ đầu vào và không có bộ trùng lặp. Ví dụ gộp SV_TTNT và SV_KHMT thành SV_CNTT cho thấy cách hợp nhất dữ liệu cùng loại từ nhiều nguồn. Phép trừ xác định các bộ xuất hiện trong quan hệ thứ nhất nhưng không xuất hiện trong quan hệ thứ hai, cũng yêu cầu hai quan hệ tương thích. Phép trừ không giao hoán, tức là R trừ S khác S trừ R, và thường được dùng để loại trừ dữ liệu theo điều kiện nghiệp vụ như SV_HP bằng SV_ĐĂNG_KÝ trừ SV_HỦY. Phép giao xác định các bộ xuất hiện đồng thời trong cả hai quan hệ, giao hoán và kết hợp, thường dùng để tìm tập dữ liệu thỏa mãn đồng thời nhiều điều kiện, ví dụ SV_HP bằng SV_ĐĂNG_KÝ giao SV_ĐẠT. Phép tích Descartes kết hợp mọi bộ của quan hệ thứ nhất với mọi bộ của quan hệ thứ hai để tạo thành quan hệ mới. Phép này không yêu cầu tương thích, số thuộc tính kết quả bằng tổng số thuộc tính của hai quan hệ, số bộ kết quả bằng tích số bộ của hai quan hệ. Tích Descartes thường tạo ra khối lượng dữ liệu rất lớn nên hiếm khi dùng trực tiếp trong truy vấn thực tế, nhưng là phép toán nền tảng để xây dựng các phép nối. Trong thực hành, tích Descartes thường được kết hợp với phép chọn để tạo phép kết nối có điều kiện. Trong SQL, hợp tương ứng UNION, trừ tương ứng EXCEPT hoặc MINUS, giao tương ứng INTERSECT. Việc áp dụng đúng điều kiện tương thích và hiểu rõ đặc tính giao hoán hay không giao hoán giúp tránh sai sót khi biểu diễn yêu cầu nghiệp vụ.

1. Phép hợp (∪)

Phép hợp kết hợp các bộ dữ liệu của hai quan hệ tương thích thành một quan hệ mới, mỗi bộ xuất hiện duy nhất một lần. Cho R(U) và S(U): R ∪ S = { t | t ∈ R hoặc t ∈ S }. Điều kiện áp dụng: R và S phải tương thích. Kết quả có cùng lược đồ với R và S, không có bộ trùng lặp.

RSR ∪ S
ABABAB
a1b1a1b2a1b1
a1b2a2b3a1b2
a2b1a2b1
a2b3

Ví dụ thực tế: SV_CNTT = SV_TTNT ∪ SV_KHMT gộp danh sách sinh viên công nghệ thông tin từ hai lớp chuyên ngành.

2. Phép trừ (−)

Phép trừ xác định các bộ xuất hiện trong quan hệ thứ nhất nhưng không xuất hiện trong quan hệ thứ hai: R − S = { t | t ∈ R và t ∉ S }. Điều kiện: R và S tương thích. Kết quả có cùng lược đồ với R, không có bộ trùng lặp. Phép trừ không giao hoán: R − S ≠ S − R.

ABABAB
a1b1a1b2a1b1
a1b2a2b3a2b1
a2b1

Ví dụ thực tế: SV_HP = SV_ĐĂNG_KÝ − SV_HỦY xác định sinh viên còn đăng ký học phần sau khi hủy.

3. Phép giao (∩)

Phép giao xác định các bộ xuất hiện đồng thời trong cả hai quan hệ: R ∩ S = { t | t ∈ R và t ∈ S }. Điều kiện: R và S tương thích. Phép giao giao hoán và kết hợp. Trong SQL tương ứng INTERSECT.

ABABAB
a1b1a1b2a1b2
a1b2a2b3
a2b1

Ví dụ thực tế: SV_HP = SV_ĐĂNG_KÝ ∩ SV_ĐẠT xác định sinh viên đã đăng ký và đạt học phần.

4. Phép tích Descartes (×)

Phép tích Descartes kết hợp mọi bộ của quan hệ thứ nhất với mọi bộ của quan hệ thứ hai: R × S = { (a1,...,am,b1,...,bn) | (a1,...,am) ∈ R và (b1,...,bn) ∈ S }. Không yêu cầu tương thích. Số thuộc tính kết quả bằng tổng số thuộc tính của hai quan hệ; số bộ kết quả bằng tích số bộ của hai quan hệ.

ABCDABCD
a1b1c1d2a1b1c1d2
a1b2c2d3a1b1c2d3
a2b1a1b2c1d2
a1b2c2d3
a2b1c1d2
a2b1c2d3

Ví dụ thực tế: SV_HP = SINH_VIÊN × HỌC_PHẦN tạo mọi cặp sinh viên - học phần, thường kết hợp với phép chọn để tạo kết nối có điều kiện.

5. Tóm tắt lời khuyên

  • Chỉ áp dụng hợp, giao, trừ cho các quan hệ tương thích.
  • Dùng giao và trừ để diễn đạt rõ các yêu cầu nghiệp vụ mang tính lọc - loại trừ.
  • Hạn chế dùng tích Descartes trực tiếp trên quan hệ lớn, nên kết hợp với phép chọn hoặc kết nối để tránh bùng nổ dữ liệu.
  • Xem các phép toán tập hợp như công cụ tư duy logic, hỗ trợ phân tích bài toán trước khi viết SQL.

Các phép toán chuyên biệt (chọn, chiếu, kết nối, chia)

Chương 4 - Lý thuyết Đại số quan hệ
0:00
Các phép toán chuyên biệt trên CSDL quan hệ gồm chọn, chiếu, kết nối và chia, được thiết kế riêng để thao tác dữ liệu trong cơ sở dữ liệu quan hệ. Phép chọn lọc các bộ trong một quan hệ dựa trên điều kiện xác định, không làm thay đổi lược đồ mà chỉ thay đổi tập các bộ. Ký hiệu thường là R(E) hoặc σ_E(R), với E là biểu thức logic so sánh giữa các thuộc tính hoặc giữa thuộc tính với hằng. Phép chọn tương ứng trực tiếp với mệnh đề WHERE trong SQL và là phép toán được sử dụng thường xuyên nhất. Áp dụng phép chọn sớm giúp giảm kích thước dữ liệu trung gian, nâng cao hiệu năng xử lý. Phép chiếu trích ra một tập con các thuộc tính từ quan hệ và loại bỏ các bộ trùng lặp trong kết quả. Ký hiệu R[X] hoặc π_X(R). Phép chiếu làm giảm số lượng thuộc tính, không làm thay đổi bản chất dữ liệu, và số bộ kết quả luôn ít hơn hoặc bằng số bộ của quan hệ ban đầu. Phép chiếu tương ứng với mệnh đề SELECT danh sách cột trong SQL. Phép kết nối tự nhiên kết hợp các bộ của hai quan hệ dựa trên điều kiện bằng nhau của các thuộc tính có cùng tên và loại bỏ các cột trùng lặp trong kết quả. Ký hiệu R * S, yêu cầu tập thuộc tính chung khác rỗng. Đây là phép toán quan trọng nhất trong đại số quan hệ, trong SQL tương ứng NATURAL JOIN hoặc JOIN ... ON ... với điều kiện bằng. Khi sử dụng cần cẩn trọng với các thuộc tính trùng tên không mang cùng ý nghĩa để tránh kết nối sai. Phép chia là phép toán dẫn xuất dùng để trả lời các truy vấn dạng với mọi, tức là tìm những đối tượng liên quan đầy đủ đến tất cả các phần tử của một tập khác. Kết quả chứa tập thuộc tính X và không chứa thuộc tính Y dùng để chia. Phép chia thường dùng trong các truy vấn như ai tham gia tất cả các dự án, hoặc sinh viên nào học đầy đủ các môn bắt buộc. Trong SQL, phép chia không có toán tử trực tiếp, thường được mô phỏng bằng NOT EXISTS hoặc GROUP BY kết hợp HAVING COUNT. Việc hiểu rõ từng phép toán giúp xây dựng biểu thức truy vấn chính xác và hiệu quả.

1. Phép chọn (σ)

Phép chọn lọc các bộ trong một quan hệ dựa trên điều kiện xác định, không làm thay đổi lược đồ mà chỉ thay đổi tập các bộ. Ký hiệu R(E) hoặc σ_E(R). Định nghĩa hình thức: R(E) = { t | t ∈ R và E(t) = TRUE }. Có thể dùng các toán tử so sánh =, ≠, <, ≤, >, ≥ và kết hợp điều kiện bằng AND (∧), OR (∨), NOT (¬).

ABCDABCD
a1b112a1b112
a1b124a1b124
a3b357a2b164
a2b164

Điều kiện E = (D < 5). Ví dụ thực tế: SINH_VIÊN(Giới tính = 'Nữ') chọn sinh viên nữ.

2. Phép chiếu (π)

Phép chiếu trích ra một tập con các thuộc tính từ quan hệ và loại bỏ các bộ trùng lặp. Ký hiệu R[X] hoặc π_X(R), với X ⊆ U. Định nghĩa hình thức: R[X] = { t.X | t ∈ R }. Kết quả chỉ chứa các thuộc tính được chọn, số bộ luôn ít hơn hoặc bằng số bộ của R.

ABCDABAC
a1b1c1d1a1b1a1c1
a1b1c1d2a2b2a2c2
a2b2c2d2a2c3
a2b2c3d3

T1 = R[AB], T2 = R[AC]. Ví dụ thực tế: SINH_VIÊN[Lớp, Khoa] lấy danh sách lớp và khoa.

3. Phép kết nối tự nhiên (*)

Phép kết nối tự nhiên kết hợp các bộ của hai quan hệ dựa trên điều kiện bằng nhau của các thuộc tính có cùng tên và loại bỏ các cột trùng lặp. Ký hiệu R * S. Yêu cầu U ∩ V ≠ ∅. Định nghĩa hình thức: R * S = { t, s.(V − X) | t, s ∈ (R × S), t.X = s.X }, với X = U ∩ V. Kết quả không lặp lại các thuộc tính dùng để nối.

ABCCDEABCDE
a1111d1e1a111d1e1
a2212d2e2a221d1e1
a3223d3e3a322d2e2

Ví dụ thực tế: SV_LỚP = SINH_VIÊN * LỚP nối sinh viên với thông tin lớp theo Mã lớp.

4. Phép chia (÷)

Phép chia là phép toán dẫn xuất dùng để trả lời các truy vấn dạng 'với mọi' (FOR ALL). Cho R(X, Y) và S(Y), với Y là tập thuộc tính chung và X là tập thuộc tính còn lại của R. Định nghĩa: R ÷ S = { x | ∀y ∈ S, (x, y) ∈ R }. Kết quả có tập thuộc tính X, không chứa Y. Ý nghĩa: tìm những giá trị X sao cho kết hợp với mọi giá trị Y trong S đều tồn tại trong R.

ABCDCDAB
a1b1c1d1c1d1a2b1
a2b1c2d3c2d3
a2b1c1d1
a3b1c1d3

Chỉ có bộ (a2, b1) kết hợp được với tất cả các bộ của S. Ví dụ thực tế: T = ĐĂNG_KÝ ÷ HP_BẮT_BUỘC tìm sinh viên đã đăng ký tất cả học phần bắt buộc.

5. Tóm tắt lời khuyên

  • Ưu tiên phép chọn để lọc dữ liệu trước, nhằm giảm kích thước dữ liệu và tăng hiệu năng.
  • Dùng phép chiếu cho những thuộc tính cần thiết để giới hạn thuộc tính.
  • Sử dụng kết nối phải chính xác, xác định rõ điều kiện nối và quan hệ nghiệp vụ.
  • Cân nhắc sử dụng phép chia, kiểm tra kỹ dữ liệu mẫu để đảm bảo kết quả phản ánh đúng logic nghiệp vụ.

Phép đổi tên và biểu thức

Chương 4 - Lý thuyết Đại số quan hệ
0:00
Phép đổi tên và biểu thức là phần mở rộng quan trọng của đại số quan hệ, giúp biểu diễn các truy vấn phức tạp một cách rõ ràng. Phép đổi tên ρ dùng để đổi tên quan hệ hoặc các thuộc tính của quan hệ. Ký hiệu ρ_S(R) đổi tên quan hệ, ρ_{B1,...,Bn}(R) đổi tên các thuộc tính, và ρ_{S(B1,...,Bn)}(R) đổi cả tên quan hệ và thuộc tính. Phép đổi tên thường dùng khi kết nối một quan hệ với chính nó hoặc khi cần làm rõ ý nghĩa các cột trong kết quả. Biểu thức đại số quan hệ là sự kết hợp tuần tự các phép toán để biến đổi một hoặc nhiều quan hệ đầu vào thành quan hệ kết quả thỏa mãn yêu cầu nghiệp vụ. Khi viết biểu thức cần đảm bảo mỗi phép toán nhận đầu vào là quan hệ và trả về quan hệ, biểu thức được xây dựng theo thứ tự logic xử lý dữ liệu và kết quả phản ánh đúng ý nghĩa nghiệp vụ. Ngoài các phép toán cơ bản và chuyên biệt, đại số quan hệ còn sử dụng toán tử logic AND, OR, NOT và các toán tử so sánh =, ≠, <, >, ≤, ≥ để biểu diễn điều kiện. Các hàm tiện ích như UPPER, LOWER, LENGTH, YEAR, MONTH, DAY và các hàm gom nhóm COUNT, SUM, AVG, MAX, MIN giúp mở rộng khả năng biểu đạt, trong đó ký hiệu gom nhóm TÊN_HÀM(B; R, A) với R là quan hệ, A là thuộc tính cần tính và B là thuộc tính gom nhóm. Việc áp dụng đúng thứ tự phép toán, đặt tên rõ ràng và kiểm tra điều kiện giúp biểu thức dễ đọc, dễ tối ưu và ánh xạ chính xác sang SQL.

1. Phép đổi tên (Rename) ρ

Phép đổi tên dùng để đổi tên quan hệ hoặc các thuộc tính của quan hệ, giúp biểu diễn rõ ràng các biểu thức và xử lý các trường hợp thuộc tính trùng tên. Ký hiệu: ρ_{S}(R) đổi tên quan hệ R thành S; ρ_{B1,...,Bn}(R) đổi tên các thuộc tính; ρ_{S(B1,...,Bn)}(R) đổi cả tên quan hệ và thuộc tính.

Biểu thứcÝ nghĩa
ρ_{T}(R)Đổi tên quan hệ R thành T, giữ nguyên các thuộc tính
ρ_{A1,B1}(R(A,B))Đổi tên thuộc tính A thành A1, B thành B1
ρ_{R1(A,B)}(R)Đổi tên quan hệ thành R1 và các thuộc tính tương ứng

Phép đổi tên thường dùng khi kết nối một quan hệ với chính nó (self-join) hoặc khi cần làm rõ ý nghĩa các cột trong kết quả.

2. Biểu thức đại số quan hệ

Biểu thức đại số quan hệ là sự kết hợp tuần tự các phép toán để biến đổi một hoặc nhiều quan hệ đầu vào thành quan hệ kết quả thỏa mãn yêu cầu nghiệp vụ. Mỗi phép toán nhận đầu vào là quan hệ và trả về một quan hệ; biểu thức được xây dựng theo thứ tự logic xử lý dữ liệu; kết quả phản ánh đúng ý nghĩa nghiệp vụ.

3. Toán tử logic và so sánh

LoạiKý hiệuÝ nghĩaVí dụ
Logic∧ (AND)Đúng khi tất cả điều kiện đúngSINH_VIÊN(GiớiTính='Nữ' AND NămSinh>2000)
Logic∨ (OR)Đúng khi ít nhất một điều kiện đúngĐĂNG_KÝ(TênHP='CSDL' OR TênHP='Mạng')
Logic¬ (NOT)Phủ định điều kiệnSINH_VIÊN(¬(GiớiTính='Nữ'))
So sánh=, ≠, <, >, ≤, ≥So sánh giá trị thuộc tính hoặc hằngHỌC_PHẦN(SốTC ≥ 3)

4. Hàm tiện ích và hàm gom nhóm

NhómHàmÝ nghĩaVí dụ
ChuỗiUPPER(), LOWER(), LENGTH()Chuyển chữ hoa, chữ thường, độ dài chuỗiSINH_VIÊN(LOWER(HọTên))
Ngày thángYEAR(), MONTH(), DAY()Trích xuất năm, tháng, ngàySINH_VIÊN(YEAR(NgàySinh)=2001)
Gom nhómCOUNT(), SUM(), AVG(), MAX(), MIN()Thống kê, tổng hợp dữ liệuCOUNT(MãHP; ĐĂNG_KÝ, MãSV)

Ký hiệu gom nhóm: TÊN_HÀM(B; R, A), trong đó R là quan hệ, A là thuộc tính cần tính, B là thuộc tính gom nhóm. Ví dụ AVG(MãHP; ĐĂNG_KÝ, Điểm) tính điểm trung bình theo mã học phần.

5. Nguyên tắc viết biểu thức

  1. Mỗi phép toán nhận đầu vào là quan hệ và trả về một quan hệ.
  2. Biểu thức được xây dựng theo thứ tự logic xử lý dữ liệu: thường chọn trước, chiếu sau, kết nối khi cần.
  3. Kết quả phải phản ánh đúng ý nghĩa nghiệp vụ.
  4. Khi dùng hàm gom nhóm, cần xác định rõ thuộc tính gom nhóm và thuộc tính cần tính.

6. Ví dụ biểu thức

Cho các quan hệ: SINH_VIÊN(MãSV, HọTên, NgàySinh, GiớiTính), HỌC_PHẦN(MãHP, TênHP, SốTC), ĐĂNG_KÝ(MãSV, MãHP, NgàyĐK, Điểm).

  • Yêu cầu 1 - Sinh viên Nam sinh sau năm 2000: SINH_VIÊN(GiớiTính='Nam' AND YEAR(NgàySinh)>2000).
  • Yêu cầu 2 - Sinh viên có điểm ≥ 8 ở bất kỳ học phần: (SINH_VIÊN * ĐĂNG_KÝ)(Điểm ≥ 8).
  • Yêu cầu 3 - Sinh viên đăng ký học phần từ 3 tín chỉ và điểm < 5: (ĐĂNG_KÝ * HỌC_PHẦN)(SốTC ≥ 3 AND Điểm < 5).
  • Yêu cầu 4 - Danh sách sinh viên Nam có điểm > điểm trung bình của học phần: (SINH_VIÊN * ĐĂNG_KÝ)(GiớiTính='Nam' AND (Điểm > AVG(MãHP; ĐĂNG_KÝ, Điểm)))[MãSV, HọTên].
  • Yêu cầu 5 - Sinh viên Nữ sinh sau 2001, đăng ký học phần ≥ 3 tín chỉ và điểm ≥ 8: (SINH_VIÊN * ĐĂNG_KÝ * HỌC_PHẦN)(GiớiTính='Nữ' AND YEAR(NgàySinh)>2001 AND SốTC ≥ 3 AND Điểm ≥ 8).

Ví dụ minh họa từng bước

Chương 4 - Lý thuyết Đại số quan hệ
0:00
Ví dụ minh họa từng bước giúp liên kết lý thuyết đại số quan hệ với dữ liệu cụ thể. Xuất phát từ ba quan hệ SINH_VIÊN, HỌC_PHẦN và ĐĂNG_KÝ cùng dữ liệu mẫu, mỗi yêu cầu nghiệp vụ được phân rã thành các bước chọn, chiếu, kết nối hoặc chia. Yêu cầu tìm sinh viên Nam sinh sau năm 2000 chỉ cần áp dụng phép chọn trên SINH_VIÊN với điều kiện GiớiTính bằng Nam và năm sinh lớn hơn 2000, kết quả là SV01 An. Yêu cầu tìm sinh viên có điểm từ 8 trở lên ở bất kỳ học phần nào cần kết nối SINH_VIÊN với ĐĂNG_KÝ, chọn các bộ có Điểm lớn hơn hoặc bằng 8, sau đó chiếu lấy MãSV và HọTên, kết quả là SV01 An và SV02 Bình. Yêu cầu tìm sinh viên đăng ký học phần từ 3 tín chỉ và điểm dưới 5 cần kết nối ĐĂNG_KÝ với HỌC_PHẦN, chọn các bộ có SốTC lớn hơn hoặc bằng 3 và Điểm nhỏ hơn 5, rồi chiếu lấy thông tin sinh viên, kết quả là SV04 Dũng. Yêu cầu phức tạp hơn về sinh viên Nữ sinh sau 2001, đăng ký học phần từ 3 tín chỉ và điểm từ 8 trở lên cần kết nối cả ba quan hệ, chọn đồng thời nhiều điều kiện và chiếu lấy MãSV, HọTên, kết quả là SV02 Bình. Cuối cùng, yêu cầu tìm sinh viên đã đăng ký tất cả học phần bắt buộc minh họa phép chia: chiếu ĐĂNG_KÝ lấy MãSV và MãHP, sau đó chia cho HP_BẮT_BUỘC, kết quả là SV01 vì sinh viên này đăng ký đủ cả HP01 và HP02. Các ví dụ này cho thấy thứ tự thực hiện phép toán ảnh hưởng đến hiệu quả và độ chính xác của kết quả, và việc phân rã bài toán thành các bước nhỏ giúp xây dựng biểu thức đại số quan hệ đúng nghiệp vụ.

Ví dụ tổng hợp: Hệ thống quản lý đào tạo

Cho ba quan hệ:

  • SINH_VIÊN(MãSV, HọTên, NgàySinh, GiớiTính)
  • HỌC_PHẦN(MãHP, TênHP, SốTC)
  • ĐĂNG_KÝ(MãSV, MãHP, NgàyĐK, Điểm)

Dữ liệu mẫu:

MãSVHọTênNgàySinhGiớiTính
SV01An2000-05-10Nam
SV02Bình2001-09-12Nữ
SV03Chi2002-03-04Nữ
SV04Dũng1999-11-20Nam
MãHPTênHPSốTC
HP01CSDL3
HP02Mạng2
HP03AI4
MãSVMãHPNgàyĐKĐiểm
SV01HP012024-09-018.5
SV01HP022024-09-027.0
SV02HP012024-09-039.0
SV02HP032024-09-048.0
SV03HP012024-09-056.5
SV04HP022024-09-064.5

Yêu cầu 1: Sinh viên Nam sinh sau năm 2000

Biểu thức: SINH_VIÊN(GiớiTính='Nam' AND YEAR(NgàySinh)>2000).

MãSVHọTênNgàySinhGiớiTính
SV01An2000-05-10Nam

Yêu cầu 2: Sinh viên có điểm ≥ 8 ở bất kỳ học phần nào

Bước 1: Kết nối SINH_VIÊN và ĐĂNG_KÝ: SINH_VIÊN * ĐĂNG_KÝ.

Bước 2: Chọn các bộ có Điểm ≥ 8.

Bước 3: Chiếu lấy MãSV, HọTên.

MãSVHọTên
SV01An
SV02Bình

Yêu cầu 3: Sinh viên đăng ký học phần từ 3 tín chỉ và điểm < 5

Bước 1: Kết nối ĐĂNG_KÝ và HỌC_PHẦN: ĐĂNG_KÝ * HỌC_PHẦN.

Bước 2: Chọn các bộ có SốTC ≥ 3 AND Điểm < 5.

Bước 3: Chiếu lấy MãSV, HọTên.

MãSVHọTên
SV04Dũng

Yêu cầu 4: Sinh viên Nữ sinh sau năm 2001, đăng ký học phần ≥ 3 tín chỉ và điểm ≥ 8

Bước 1: Kết nối ba quan hệ: SINH_VIÊN * ĐĂNG_KÝ * HỌC_PHẦN.

Bước 2: Chọn các bộ thỏa: GiớiTính='Nữ' AND YEAR(NgàySinh)>2001 AND SốTC ≥ 3 AND Điểm ≥ 8.

Bước 3: Chiếu lấy MãSV, HọTên.

MãSVHọTên
SV02Bình

Yêu cầu 5: Sinh viên đã đăng ký tất cả học phần bắt buộc

Cho HP_BẮT_BUỘC(MãHP) với các giá trị HP01, HP02. Biểu thức: ĐĂNG_KÝ[MãSV, MãHP] ÷ HP_BẮT_BUỘC.

MãSVMãHP
SV01HP01
SV01HP02

Kết quả: SV01, vì sinh viên này đăng ký đủ cả HP01 và HP02.

So sánh đại số quan hệ và SQL

Chương 4 - Lý thuyết Đại số quan hệ
0:00
So sánh đại số quan hệ và SQL giúp hiểu mối liên hệ giữa lý thuyết và thực hành. Đại số quan hệ là ngôn ngữ hình thức mang tính thủ tục, thao tác trên các quan hệ là tập các bộ không trùng lặp, sử dụng ký hiệu toán học như σ, π, ∪, ∩, −, ×, *, ÷ và ρ. SQL là ngôn ngữ truy vấn bậc cao mang tính khai báo, thao tác trên bảng có thể là multiset, sử dụng các từ khóa tiếng Anh như SELECT, FROM, WHERE, JOIN, UNION. Người dùng cuối thường làm việc với SQL, còn đại số quan hệ được dùng trong lý thuyết và trong quá trình tối ưu truy vấn của hệ quản trị. Mọi truy vấn SQL đều có thể ánh xạ về biểu thức đại số quan hệ tương ứng, và hệ quản trị chuyển kế hoạch thực thi dựa trên các phép toán đại số quan hệ. Các phép toán cơ bản và chuyên biệt đều có ánh xạ sang SQL: chọn sang WHERE, chiếu sang SELECT DISTINCT, hợp sang UNION, giao sang INTERSECT, trừ sang EXCEPT hoặc MINUS, tích Descartes sang CROSS JOIN, kết nối tự nhiên sang NATURAL JOIN hoặc JOIN ON, đổi tên sang AS. Phép chia không có toán tử trực tiếp trong SQL và thường được mô phỏng bằng NOT EXISTS hoặc GROUP BY kết hợp HAVING COUNT. Điểm khác biệt quan trọng là đại số quan hệ là tập nên không có bộ trùng lặp, trong khi SQL mặc định là bag và có thể trả về dòng trùng nếu không dùng DISTINCT. SQL còn hỗ trợ nhiều tính năng beyond đại số quan hệ như ORDER BY, GROUP BY, view, transaction và điều khiển truy cập. Tóm lại, đại số quan hệ là công cụ tư duy và tối ưu, còn SQL là công cụ giao tiếp với hệ quản trị và người dùng; nắm vững cả hai giúp thiết kế và tối ưu truy vấn hiệu quả.

1. Bảng so sánh tổng quan

Tiêu chíĐại số quan hệSQL
Bản chấtNgôn ngữ hình thức, mang tính thủ tục (procedural)Ngôn ngữ truy vấn bậc cao, mang tính khai báo (declarative)
Đối tượng thao tácQuan hệ (tập các bộ không trùng lặp)Bảng (multiset/bag, có thể trùng lặp nếu không dùng DISTINCT)
Ký hiệuKý hiệu toán học: σ, π, ∪, ∩, −, ×, *, ÷, ρTừ khóa tiếng Anh: SELECT, FROM, WHERE, JOIN, UNION, ...
Người dùngChủ yếu dùng trong lý thuyết và tối ưu truy vấnDùng trực tiếp bởi người dùng và ứng dụng
Ánh xạMọi truy vấn SQL đều có thể ánh xạ về biểu thức đại số quan hệĐược hệ quản trị chuyển thành kế hoạch thực thi dựa trên đại số quan hệ

2. Ánh xạ phép toán sang SQL

Đại số quan hệSQL tương ứngGhi chú
σ_E(R)SELECT * FROM R WHERE E;Lọc dòng
π_X(R)SELECT DISTINCT X FROM R;Lọc cột, loại trùng
R ∪ SSELECT ... FROM R UNION SELECT ... FROM S;Loại trùng lặp
R ∩ SSELECT ... FROM R INTERSECT SELECT ... FROM S;Một số hệ quản trị hỗ trợ
R − SSELECT ... FROM R EXCEPT SELECT ... FROM S;Hoặc MINUS ở Oracle
R × SSELECT * FROM R CROSS JOIN S;Tích Descartes
R * SSELECT ... FROM R NATURAL JOIN S; hoặc JOIN ... ON R.X=S.X;Kết nối tự nhiên
R ÷ SKhông có toán tử trực tiếp; dùng NOT EXISTS hoặc GROUP BY ... HAVING COUNTTruy vấn dạng với mọi
ρ_{S}(R)SELECT ... FROM R AS S;Đổi tên bảng/cột
Hàm gom nhómGROUP BY, HAVING, COUNT/SUM/AVG/MAX/MINTổng hợp dữ liệu

3. Điểm khác biệt quan trọng

  • Đại số quan hệ là tập (set) nên không có bộ trùng lặp; SQL mặc định là bag, có thể trả về dòng trùng nếu không dùng DISTINCT.
  • Đại số quan hệ có phép chia trực tiếp cho truy vấn dạng với mọi; SQL phải mô phỏng bằng NOT EXISTS hoặc GROUP BY HAVING COUNT.
  • SQL hỗ trợ nhiều tính năng beyond đại số quan hệ như ORDER BY, GROUP BY, hàm tổng hợp, view, transaction, điều khiển truy cập.
  • Đại số quan hệ là công cụ tư duy và tối ưu; SQL là công cụ giao tiếp với hệ quản trị và người dùng.

4. Ví dụ so sánh

Yêu cầu: tìm sinh viên có điểm ≥ 8 ở bất kỳ học phần nào.

Đại số quan hệ: (SINH_VIÊN * ĐĂNG_KÝ)(Điểm ≥ 8)[MãSV, HọTên].

SQL:

SELECT DISTINCT SV.MãSV, SV.HọTên
FROM SINH_VIÊN SV JOIN ĐĂNG_KÝ DK ON SV.MãSV = DK.MãSV
WHERE DK.Điểm >= 8;

5.1 Khái niệm phụ thuộc hàm

Chương 5 - Phụ thuộc hàm
0:00
Phụ thuộc hàm là ràng buộc ngữ nghĩa giữa các thuộc tính trong một quan hệ, phản ánh quy luật xác định dữ liệu. Định nghĩa: cho quan hệ R(U), với X, Y subset U, X → Y nếu với mọi cặp bộ t1, t2 trong R, nếu t1.X = t2.X thì t1.Y = t2.Y, nghĩa là giá trị của X quyết định duy nhất giá trị của Y. Ví dụ SINH_VIEN có MaSV xác định họ tên, ngày sinh và giới tính; DANG_KY có MaSV và MaHP xác định điểm học phần. Ý nghĩa của phụ thuộc hàm là mô tả ràng buộc ngữ nghĩa, là cơ sở xác định khóa và chuẩn hóa cơ sở dữ liệu, giảm dư thừa và tránh bất nhất dữ liệu. Cần phân biệt phụ thuộc hàm là quan hệ giữa thuộc tính chứ không phải giữa các bộ; nếu quan hệ có không quá một bộ thì luôn thỏa mọi phụ thuộc hàm.

5.1 Khái niệm phụ thuộc hàm

Trong mô hình dữ liệu quan hệ, phụ thuộc hàm là ràng buộc ngữ nghĩa giữa các thuộc tính trong một quan hệ, phản ánh quy luật xác định dữ liệu.

Định nghĩa: Cho quan hệ R(U), U là tập các thuộc tính. Với hai tập thuộc tính X, Y ⊆ U, ta nói X → Y nếu với mọi cặp bộ t1, t2 trong R, nếu t1.X = t2.X thì t1.Y = t2.Y. Nghĩa là giá trị của X quyết định duy nhất giá trị của Y.

Ý nghĩa: mô tả các ràng buộc ngữ nghĩa của dữ liệu; là cơ sở để xác định khóa của quan hệ và chuẩn hóa cơ sở dữ liệu; giúp giảm dư thừa và tránh bất nhất dữ liệu.

Ví dụ: SINH_VIEN(MaSV, HoVaTen, NgaySinh, GioiTinh) có MaSV → HoVaTen, NgaySinh, GioiTinh. DANG_KY(MaSV, MaHP, DiemHP) có MaSV, MaHP → DiemHP. Trên bảng với U = ABCD và các bộ (1,x,10,p), (1,x,10,q), (2,y,20,p), (3,z,30,r), các phụ thuộc A → B, B → C, A → C, AB → C thỏa mãn, còn A → D không thỏa vì cùng A = 1 nhưng D khác p và q.

Nhận xét: phụ thuộc hàm là quan hệ giữa thuộc tính, không phải giữa các bộ; nếu quan hệ có không quá một bộ thì luôn thỏa mọi phụ thuộc hàm; nếu một quan hệ con chứa X ∪ Y thì cũng thỏa X → Y.

5.2 Hệ tiên đề Armstrong và bao đóng

Chương 5 - Phụ thuộc hàm
0:00
Hệ tiên đề Armstrong gồm ba tiên đề cơ bản: phản xạ, nếu Y subset X thì X → Y; gia tăng, nếu X → Y thì XZ → YZ; bắc cầu, nếu X → Y và Y → Z thì X → Z. Từ đó suy ra các tính chất mở rộng như phân rã, hợp, tựa bắc cầu, cộng tính đầy đủ, mở rộng trái và phản xạ chặt. Phụ thuộc hàm suy diễn F ⊢ X → Y nếu suy ra được bằng dãy bước hợp lệ. Bao đóng của tập phụ thuộc hàm F+ là tập tất cả phụ thuộc hàm suy diễn từ F, luôn chứa F và có tính đơn điệu, lũy đẳng. Bao đóng của tập thuộc tính X+ là tập tất cả thuộc tính suy diễn được từ X theo F; thuật toán khởi tạo X+ = X, sau đó với mỗi Y → Z, nếu Y ⊆ X+ thì thêm Z, lặp đến ổn định. Định lý liên hệ X → Y ∈ F+ khi và chỉ khi Y ⊆ X+, cho phép kiểm tra phụ thuộc hàm bằng bao đóng tập thuộc tính.

5.2 Hệ tiên đề Armstrong và bao đóng

Ba tiên đề cơ bản:

  • Phản xạ: nếu Y ⊆ X thì X → Y.
  • Gia tăng: nếu X → Y thì XZ → YZ.
  • Bắc cầu: nếu X → Y và Y → Z thì X → Z.

Từ ba tiên đề gốc suy ra các tính chất mở rộng: phân rã, hợp, tựa bắc cầu, cộng tính đầy đủ, mở rộng trái, phản xạ chặt.

Phụ thuộc hàm suy diễn: F ⊢ X → Y nếu suy ra được X → Y từ F bằng dãy bước hợp lệ dựa trên hệ tiên đề Armstrong. Bao đóng của tập phụ thuộc hàm F+ là tập tất cả phụ thuộc hàm suy diễn được từ F. Tính chất: F ⊆ F+, đơn điệu, lũy đẳng.

Bao đóng của tập thuộc tính X+ là tập tất cả thuộc tính có thể suy diễn từ X theo F. Thuật toán: khởi tạo X+ = X; với mỗi Y → Z ∈ F, nếu Y ⊆ X+ thì X+ = X+ ∪ Z; lặp đến khi X+ không thay đổi. Ví dụ với U = ABCDEGH, F = {B → A, DA → CE, D → H, GH → C, AC → D}, ta có (AC)+ = ACDEH.

Định lý liên hệ: X → Y ∈ F+ ⟺ Y ⊆ X+. Đây là nền tảng để kiểm tra phụ thuộc hàm, tìm khóa và chuẩn hóa.

5.3 Bài toán thành viên và phủ của tập phụ thuộc hàm

Chương 5 - Phụ thuộc hàm
0:00
Bài toán thành viên hỏi phụ thuộc hàm X → Y có suy diễn từ F hay không. Cách giải là tính X+ theo F; nếu Y subset X+ thì X → Y thuộc F+, ngược lại không. Hai tập phụ thuộc hàm tương đương nếu có cùng bao đóng F+. Các loại phủ gồm phủ tự nhiên bảo toàn ngữ nghĩa và có vế trái khác nhau, tập phụ thuộc hàm đầy đủ có vế trái tối thiểu, phủ không dư không có phụ thuộc hàm dư thừa, và phủ tối thiểu thỏa cả ba điều kiện. Thuật toán phủ tối thiểu gồm chuẩn hóa vế phải, thu gọn vế trái và loại phụ thuộc hàm dư thừa. Phủ tối thiểu có thể không duy nhất và là dạng chuẩn để tìm khóa và chuẩn hóa.

5.3 Bài toán thành viên và phủ của tập phụ thuộc hàm

Bài toán thành viên: Cho R(U), F và f: X → Y, xác định xem X → Y có được suy diễn từ F hay không, tức X → Y ∈ F+ hay không. Cách giải: tính X+ theo F; nếu Y ⊆ X+ thì X → Y ∈ F+, ngược lại không.

Hai tập phụ thuộc hàm tương đương: F và G tương đương nếu F+ = G+. Kiểm tra bằng cách xét từng phụ thuộc hàm của tập này có phải là thành viên của tập kia hay không.

Các loại phủ:

  • Phủ tự nhiên: bảo toàn ngữ nghĩa, vế trái khác nhau đôi một và X ∩ Y = ∅.
  • Tập phụ thuộc hàm đầy đủ: vế trái tối thiểu, loại thuộc tính dư thừa ở vế trái.
  • Phủ không dư: không có phụ thuộc hàm dư thừa.
  • Phủ tối thiểu: vế phải một thuộc tính, vế trái tối thiểu, không phụ thuộc hàm dư thừa.

Thuật toán phủ tối thiểu: chuẩn hóa vế phải; thu gọn vế trái; loại phụ thuộc hàm dư thừa. Phủ tối thiểu có thể không duy nhất; nên chuyển về phủ tối thiểu trước khi tìm khóa và chuẩn hóa.

6.1 Khái niệm khóa

Chương 6 - Khóa của quan hệ
0:00
Khóa là tập thuộc tính K subset U thỏa K → U thuộc F+ và K tối thiểu, nghĩa là không tồn tại tập con thực sự K' của K cũng xác định toàn bộ U. Tương đương K+ = U và loại bỏ bất kỳ thuộc tính nào khỏi K đều làm mất khả năng xác định U. Ví dụ DANG_KY có khóa MaSV, MaHP. Thuộc tính không xuất hiện ở vế phải của mọi phụ thuộc hàm luôn có mặt trong mọi khóa; nếu K bằng U trừ tập thuộc tính ở vế phải mọi phụ thuộc hàm và K+ = U thì khóa duy nhất; hai khóa không chứa nhau. Mỗi lược đồ luôn có ít nhất một khóa, xấu nhất là U. Khóa là siêu khóa nhỏ nhất và khóa chính phải duy nhất, không rỗng.

6.1 Khái niệm khóa

Một tập thuộc tính K ⊆ U được gọi là khóa của quan hệ R nếu và chỉ nếu: K → U ∈ F+ (K là siêu khóa, K+ = U) và K là tối thiểu, tức không tồn tại K' ⊂ K với K' → U.

Tương đương: K+ = U và với mọi A ∈ K, (K − {A})+ ≠ U.

Ví dụ: DANG_KY(MaSV, MaHP, Diem) với F = {MaSV, MaHP → Diem} có khóa {MaSV, MaHP}.

Tính chất: thuộc tính không xuất hiện ở vế phải của mọi phụ thuộc hàm luôn có mặt trong mọi khóa; nếu K = U − ∪right(f) và K+ = U thì khóa duy nhất; hai khóa không chứa nhau. Mỗi lược đồ luôn có ít nhất một khóa, xấu nhất là U. Khóa là siêu khóa nhỏ nhất. Khóa chính phải duy nhất và không được rỗng.

6.2 Thuật toán tìm một khóa

Chương 6 - Khóa của quan hệ
0:00
Thuật toán tìm một khóa gồm hai cách. Thuật toán 1 bắt đầu K bằng U, với mỗi thuộc tính A trong K, nếu K trừ A có bao đóng bằng U thì loại A; kết quả K là khóa. Thuật toán 2 khởi tạo K bằng U trừ tập thuộc tính ở vế phải mọi phụ thuộc hàm; nếu K+ = U thì K là khóa, ngược lại bổ sung thuộc tính từ T = U − K+ cho đến K+ = U, sau đó thử loại các thuộc tính mới bổ sung. Kết quả phụ thuộc thứ tự xét thuộc tính và chỉ tìm được một khóa.

6.2 Thuật toán tìm một khóa

Thuật toán 1: Bắt đầu K = U. Với mỗi thuộc tính A ∈ K, nếu (K − {A})+ = U thì loại A khỏi K. Kết quả K là một khóa.

Thuật toán 2: K = U − ∪right(f). Tính K+; nếu K+ = U thì K là khóa. Ngược lại T = U − K+, bổ sung thuộc tính từ T vào K cho đến K+ = U. Sau đó thử loại các thuộc tính mới bổ sung nếu (K − {A})+ = U.

Ví dụ với U = ABCD, F = {A → B, B → C}: thuật toán 1 cho K = AD. Ví dụ với U = ABCDE, F = {A → B, B → C, CD → E}: K = AD. Ví dụ với F = {A → B, B → A, CD → E}: K = ACD.

6.3 Thuật toán tìm tất cả khóa và ví dụ thực tế

Chương 6 - Khóa của quan hệ
0:00
Thuật toán tìm tất cả khóa khởi tạo N bằng U trừ tập thuộc tính ở vế phải mọi phụ thuộc hàm; nếu N+ = U thì N là khóa duy nhất. Ngược lại T = U − N, xét các tập con Xi của T, Si = N ∪ Xi; nếu Si+ = U thì Si là siêu khóa, sau đó loại siêu khóa không tối thiểu. Cải tiến không xét Xi rỗng và cắt tỉa các tập con chứa khóa đã tìm được. Ví dụ ABC với F = {AB → C, C → A} có khóa BA và BC. Ví dụ LICH_THI có khóa kỹ thuật MaSV, MaCaThi và khóa nghiệp vụ MaSV, MaMon, NgayThi, GioThi, PhongThi; nên chọn khóa kỹ thuật làm khóa chính và khóa nghiệp vụ làm ràng buộc duy nhất.

6.3 Thuật toán tìm tất cả khóa và ví dụ thực tế

N = U − ∪right(f). Nếu N+ = U thì N là khóa duy nhất. Ngược lại T = U − N, xét các tập con Xi ⊆ T (Xi ≠ ∅), Si = N ∪ Xi; nếu Si+ = U thì Si là siêu khóa. Loại các siêu khóa không tối thiểu. Cải tiến: không xét Xi = ∅ và không xét tập con chứa tập khóa đã tìm được, duyệt theo kích thước tăng dần.

Ví dụ R(U,F), U = ABC, F = {AB → C, C → A}: N = B, T = AC, khóa là BA và BC.

Ví dụ thực tế LICH_THI: khóa kỹ thuật S1 = {MaSV, MaCaThi} và khóa nghiệp vụ S2 = {MaSV, MaMon, NgayThi, GioThi, PhongThi}. Triển khai chọn S1 làm khóa chính, S2 làm ràng buộc UNIQUE.

7.1 Các dạng chuẩn của quan hệ

Chương 7 - Chuẩn hóa quan hệ
0:00
Các dạng chuẩn gồm 1NF yêu cầu mọi thuộc tính có giá trị nguyên tố; 2NF đạt 1NF và mọi thuộc tính ngoài khóa phụ thuộc đầy đủ vào toàn bộ khóa; 3NF đạt 2NF và không có phụ thuộc bắc cầu từ khóa đến thuộc tính ngoài khóa; BCNF yêu cầu mọi vế trái phụ thuộc hàm là siêu khóa. Thuộc tính khóa tham gia ít nhất một khóa, thuộc tính ngoài khóa không tham gia khóa nào. Ví dụ DANG_KY không đạt 2NF vì phụ thuộc bộ phận; R(MaSV, MaLop, TenLop) không đạt 3NF vì phụ thuộc bắc cầu; ABC với AB → C, C → A không đạt BCNF.

7.1 Các dạng chuẩn của quan hệ

Thuộc tính khóa là thuộc tính tham gia ít nhất một khóa; thuộc tính ngoài khóa không tham gia khóa nào.

  • 1NF: mọi thuộc tính có giá trị nguyên tố, không có thuộc tính đa trị hay lặp.
  • 2NF: đạt 1NF và mọi thuộc tính ngoài khóa phụ thuộc đầy đủ vào toàn bộ mỗi khóa; không có phụ thuộc bộ phận.
  • 3NF: đạt 2NF và không tồn tại phụ thuộc bắc cầu từ khóa đến thuộc tính ngoài khóa; với mọi X → A, hoặc X là siêu khóa hoặc A là thuộc tính khóa.
  • BCNF: mọi X → Y ∈ F+ với Y ⊄ X đều có X là siêu khóa.

Ví dụ: DANG_KY không đạt 2NF vì TenSV phụ thuộc MaSV và SoTinChi phụ thuộc MaMon. KET_QUA đạt 2NF. R(MaSV, MaLop, TenLop) không đạt 3NF vì MaLop → TenLop. ABC với AB → C, C → A không đạt BCNF vì C không là siêu khóa.

7.2 Phép phân tách quan hệ

Chương 7 - Chuẩn hóa quan hệ
0:00
Phân tách bảo toàn thông tin đảm bảo quan hệ ban đầu khôi phục đúng từ các quan hệ con bằng nối tự nhiên; kiểm tra hai quan hệ bằng định lý về thuộc tính chung, nhiều quan hệ bằng ma trận ký hiệu. Phân tách bảo toàn phụ thuộc hàm yêu cầu hợp các phụ thuộc chiếu có bao đóng bằng F+, kiểm tra bằng cách tính X+ theo tập phụ thuộc chiếu. Một phân tách có thể bảo toàn thông tin nhưng không bảo toàn phụ thuộc hàm, thường xảy ra khi phân tách đạt BCNF.

7.2 Phép phân tách quan hệ

Phân tách bảo toàn thông tin: hợp thuộc tính bằng U, chiếu bằng quan hệ con và nối tự nhiên khôi phục R. Với hai quan hệ, kiểm tra U1 ∩ U2 → (U1 − U2) hoặc (U2 − U1) ∈ F+. Với nhiều quan hệ dùng ma trận ký hiệu: lập ma trận 0/1, nếu trong một dòng các cột X cùng ký hiệu thì các cột Y gán cùng ký hiệu; nếu có dòng toàn 1 thì bảo toàn thông tin.

Phân tách bảo toàn phụ thuộc hàm: hợp các phụ thuộc chiếu π_Ui(F) có bao đóng bằng F+. Kiểm tra: với mỗi X → Y ∈ F, tính X+ theo F' = ∪π_Ui(F); nếu Y ⊆ X+ thì bảo toàn. Phân tách có thể bảo toàn thông tin nhưng không bảo toàn phụ thuộc hàm, thường khi đạt BCNF.

7.3 Phân tách về dạng chuẩn BCNF hoặc 3NF

Chương 7 - Chuẩn hóa quan hệ
0:00
Phân tách bảo toàn thông tin về BCNF hoặc 3NF tìm khóa, phát hiện phụ thuộc hàm có vế trái không là siêu khóa và vế phải không là thuộc tính khóa, rồi phân tách R thành R1 = R[XY] và R2 = R[U − Y], lặp đến khi đạt chuẩn. Phân tách 3NF bảo toàn thông tin và phụ thuộc hàm dùng phủ tối thiểu, sinh quan hệ con từ mỗi phụ thuộc, gộp cùng vế trái và bảo đảm có quan hệ chứa khóa. Ưu tiên 3NF trong thực tế vì cân bằng tốt; BCNF khi chấp nhận không bảo toàn phụ thuộc hàm.

7.3 Phân tách về dạng chuẩn BCNF hoặc 3NF

Phân tách bảo toàn thông tin về BCNF/3NF: tìm khóa; phát hiện X → Y sao cho X không là siêu khóa và Y không chứa thuộc tính khóa; phân tách R thành R1 = R[XY] và R2 = R[U − Y]; lặp đến khi đạt chuẩn. Ví dụ SDIM với F = {SI → D, SD → M} phân tách thành SDM và SDI, cả hai đạt BCNF.

Phân tách 3NF bảo toàn thông tin và phụ thuộc hàm: dùng phủ tối thiểu Fc; gộp cùng vế trái; sinh Ri(Ui = X ∪ Y); nếu chưa có quan hệ chứa khóa thì thêm Rk(K). Ví dụ ABCDE với F = {BC → A, C → D, AE → B, B → D, B → E}: phủ tối thiểu như trên, gộp B → DE, sinh R1(BCA), R2(CD), R3(AEB), R4(BDE); R1 chứa khóa BC nên bảo toàn thông tin. Ưu tiên 3NF trong thực tế; BCNF khi chấp nhận mất phụ thuộc hàm.

Sẵn sàng phát
Bài 1 / 32