I. Khám phá Đại số quan hệ Nền tảng truy vấn cơ sở dữ liệu
Đại số quan hệ là một ngôn ngữ truy vấn mang tính thủ tục, đóng vai trò là nền tảng lý thuyết cho các hệ quản trị cơ sở dữ liệu quan hệ và các ngôn ngữ truy vấn như SQL. Thay vì mô tả kết quả cuối cùng mong muốn, người dùng sẽ chỉ định các bước, các phép toán tuần tự để máy tính thực thi và trích xuất dữ liệu. Cấu trúc của đại số quan hệ bao gồm hai thành phần chính: toán hạng (operands) và toán tử (operators). Trong đó, toán hạng chính là các quan hệ (relations), hay còn được hiểu là các bảng dữ liệu. Mỗi quan hệ là một tập hợp các bộ (tuples) hay các hàng. Các toán tử là những phép toán được định nghĩa để thao tác trên các quan hệ này nhằm tạo ra một quan hệ mới chứa kết quả truy vấn. Các toán tử này được chia thành các nhóm chính: nhóm phép toán tập hợp (Hội, Giao, Trừ), nhóm rút trích dữ liệu từ một quan hệ (Phép chọn, Phép chiếu), và nhóm kết hợp dữ liệu từ nhiều quan hệ (Phép tích Cartesian, Phép kết). Một câu truy vấn trong đại số quan hệ được biểu diễn dưới dạng một biểu thức đại số quan hệ - là một chuỗi các phép toán lồng vào nhau. Kết quả của một phép toán này sẽ là đầu vào cho phép toán tiếp theo, tạo thành một quy trình xử lý dữ liệu rõ ràng. Việc hiểu rõ bản chất của đại số quan hệ không chỉ giúp xây dựng các câu truy vấn phức tạp một cách chính xác mà còn là cơ sở để tối ưu hóa hiệu suất truy vấn trong các hệ thống cơ sở dữ liệu thực tế.
1.1. Tổng quan về ngôn ngữ truy vấn quan hệ và vai trò
Trong lĩnh vực cơ sở dữ liệu, ngôn ngữ truy vấn (Query Language) là công cụ cho phép người dùng tương tác với dữ liệu, bao gồm cả việc rút trích (truy vấn) và cập nhật (thêm, xóa, sửa). Có hai hướng tiếp cận chính: Đại số quan hệ (Relational Algebra) và Phép tính quan hệ (Relational Calculus). Đại số quan hệ là ngôn ngữ thủ tục, yêu cầu người dùng chỉ rõ các bước cần thực hiện để đạt được kết quả. Ngược lại, Phép tính quan hệ mang tính phi thủ tục, người dùng chỉ cần mô tả dữ liệu họ muốn nhận. SQL (Structured Query Language), ngôn ngữ truy vấn phổ biến nhất hiện nay, được xây dựng dựa trên cả hai nền tảng này, nhưng về bản chất, bộ tối ưu hóa truy vấn của hệ quản trị cơ sở dữ liệu thường dịch các câu lệnh SQL thành một biểu thức đại số quan hệ để thực thi.
1.2. Các thành phần cốt lõi Toán tử và toán hạng
Cũng giống như đại số trong toán học, đại số quan hệ hoạt động dựa trên các toán tử và toán hạng. Tuy nhiên, các thành phần này được định nghĩa lại trong bối cảnh cơ sở dữ liệu. Toán hạng ở đây không phải là các biến số như x, y, z, mà chính là các quan hệ (ví dụ: quan hệ NHANVIEN, KHOA). Toán tử không phải là các phép cộng, trừ, nhân, chia thông thường, mà là các thao tác xử lý giữa các quan hệ để tạo ra một quan hệ mới. Các toán tử cơ bản bao gồm: Phép chọn (σ), Phép chiếu (π), Phép hội (∪), Phép trừ (−), và Phép tích Cartesian (×). Một biểu thức đại số quan hệ, ví dụ πMANV(σPHAI='Nam'(NHANVIEN)), là một chuỗi các phép toán này, và kết quả cuối cùng luôn là một quan hệ mới.
II. Thách thức với Phép toán tập hợp trong Đại số quan hệ
Các phép toán tập hợp là nhóm toán tử đầu tiên và cơ bản nhất trong đại số quan hệ, được mượn trực tiếp từ lý thuyết tập hợp trong toán học. Vì mỗi quan hệ về bản chất là một tập hợp các bộ, chúng ta có thể áp dụng các phép toán như Phép hội (Union - ∪), Phép giao (Intersection - ∩), và Phép trừ (Difference - −). Phép hội trả về một quan hệ chứa tất cả các bộ có mặt trong quan hệ thứ nhất hoặc quan hệ thứ hai (loại bỏ các bộ trùng lặp). Phép giao trả về một quan hệ chỉ chứa các bộ xuất hiện đồng thời ở cả hai quan hệ. Phép trừ (r − s) trả về một quan hệ chứa các bộ thuộc r nhưng không thuộc s. Tuy nhiên, một thách thức và điều kiện tiên quyết khi áp dụng các phép toán này là tính khả hợp (Union Compatibility). Đây là một ràng buộc quan trọng đòi hỏi hai quan hệ tham gia vào phép toán phải có cấu trúc tương thích với nhau. Nếu không thỏa mãn điều kiện này, các phép toán tập hợp sẽ không thể thực hiện được và gây ra lỗi. Việc đảm bảo tính khả hợp là bước kiểm tra bắt buộc trước khi tiến hành các thao tác này, đòi hỏi người viết truy vấn phải hiểu rõ lược đồ của các quan hệ đang thao tác. Nắm vững các quy tắc này là chìa khóa để kết hợp dữ liệu từ các nguồn có cấu trúc tương đồng một cách chính xác trong đại số quan hệ.
2.1. Điều kiện tiên quyết Tìm hiểu về tính khả hợp
Tính khả hợp (Union Compatibility) là một yêu cầu bắt buộc đối với hai quan hệ r và s khi thực hiện các phép toán tập hợp (hội, giao, trừ). Hai quan hệ được gọi là khả hợp nếu chúng thỏa mãn đồng thời hai điều kiện sau. Thứ nhất, chúng phải có cùng bậc, nghĩa là cùng số lượng thuộc tính (cột). Ví dụ, nếu quan hệ SINHVIEN có 3 thuộc tính (TENSV, NGSINH, PHAI) thì quan hệ GIAOVIEN cũng phải có 3 thuộc tính. Thứ hai, miền giá trị (domain) của các thuộc tính tương ứng ở mỗi vị trí phải giống nhau. Ví dụ, DOM(TENSV) phải bằng DOM(TENGV). Điều này đảm bảo rằng các giá trị trong cùng một cột có thể so sánh và kết hợp với nhau một cách có ý nghĩa. Kết quả của phép toán sẽ là một quan hệ có tên thuộc tính giống với quan hệ đầu tiên (r).
2.2. Phân biệt Phép hội Phép giao và Phép trừ
Sau khi đảm bảo tính khả hợp, ba phép toán tập hợp cơ bản được áp dụng như sau: Phép hội (r ∪ s) tạo ra một quan hệ mới chứa tất cả các bộ có trong r hoặc trong s, các bộ giống hệt nhau chỉ xuất hiện một lần. Phép giao (r ∩ s) tạo ra quan hệ mới chỉ chứa những bộ tồn tại ở cả r và s. Phép trừ (r − s) tạo ra quan hệ mới chứa những bộ có trong r nhưng không có trong s. Theo tài liệu, ví dụ về SinhVien ∪ GiaoVien sẽ gộp danh sách của cả hai, trong khi SinhVien ∩ GiaoVien chỉ lấy ra những người vừa là sinh viên vừa là giáo viên. Cuối cùng, SinhVien – GiaoVien sẽ cho danh sách những người chỉ là sinh viên. Các phép toán này có tính giao hoán (r ∪ s = s ∪ r) và kết hợp, cho phép xây dựng các biểu thức phức tạp.
III. Phương pháp rút trích dữ liệu Phép chọn và Phép chiếu
Rút trích thông tin là nhiệm vụ cốt lõi của bất kỳ ngôn ngữ truy vấn nào, và trong đại số quan hệ, hai toán tử cơ bản đảm nhiệm chức năng này là Phép chọn (Selection - σ) và Phép chiếu (Projection - π). Hai phép toán này là những công cụ mạnh mẽ cho phép lọc và định hình dữ liệu từ một quan hệ duy nhất. Phép chọn hoạt động theo chiều ngang, có chức năng như một bộ lọc để chọn ra các bộ (hàng) thỏa mãn một điều kiện logic nhất định. Kết quả của phép chọn là một quan hệ mới có cùng lược đồ (cùng các cột) với quan hệ ban đầu nhưng chỉ chứa những bộ đã qua sàng lọc. Ngược lại, Phép chiếu hoạt động theo chiều dọc, được sử dụng để chọn ra các thuộc tính (cột) cụ thể từ một quan hệ và loại bỏ những cột không cần thiết. Kết quả của phép chiếu là một quan hệ mới chỉ chứa các cột được chỉ định. Một điểm quan trọng cần lưu ý là phép chiếu sẽ tự động loại bỏ các bộ trùng lặp trong kết quả. Sự kết hợp giữa Phép chọn và Phép chiếu cho phép tạo ra các truy vấn cực kỳ linh hoạt, ví dụ như "Tìm tên và lương của các giáo viên nữ", nơi Phép chọn lọc ra 'giáo viên nữ' và Phép chiếu chỉ lấy cột 'tên' và 'lương'.
3.1. Phép chọn σ Công cụ lọc các bộ dữ liệu theo điều kiện
Phép chọn, ký hiệu là σ (sigma), được dùng để lấy ra các bộ của một quan hệ r thỏa mãn điều kiện chọn P, biểu diễn là σP(r). P là một biểu thức vị từ (predicate) bao gồm các mệnh đề logic. Các mệnh đề này có thể là phép so sánh giữa một thuộc tính và một hằng số (ví dụ: NĂMTL >= 1980) hoặc giữa hai thuộc tính với nhau. Các phép so sánh bao gồm =, ≠, <, >, ≤, ≥. Các mệnh đề đơn có thể được kết hợp với nhau bằng các toán tử logic AND (∧), OR (∨), và NOT (¬) để tạo thành các điều kiện phức tạp. Ví dụ, truy vấn σ(A=B)∧(D>5)(r) sẽ trả về tất cả các bộ từ quan hệ r mà giá trị ở cột A bằng giá trị ở cột B và giá trị ở cột D lớn hơn 5. Phép chọn có tính giao hoán, nghĩa là σP1(σP2(r)) = σP2(σP1(r)).
3.2. Phép chiếu π Kỹ thuật trích xuất các cột cần thiết
Phép chiếu, ký hiệu là π (pi), được dùng để lấy ra một hoặc nhiều cột từ một quan hệ r và loại bỏ các cột còn lại. Ký hiệu của phép toán này là πA1, A2, …, Ak(r), trong đó A1, A2, …, Ak là danh sách các thuộc tính muốn giữ lại. Kết quả trả về là một quan hệ mới chỉ có k thuộc tính này. Một đặc tính quan trọng của phép chiếu là nó sẽ tự động loại bỏ các bộ bị trùng lặp sau khi đã chiếu. Ví dụ, nếu quan hệ r có nhiều bộ cùng giá trị ở cột A và C, thì πA,C(r) sẽ chỉ giữ lại một bộ duy nhất cho mỗi cặp giá trị (A, C) đó. Do đó, số bộ của quan hệ kết quả luôn ít hơn hoặc bằng số bộ của quan hệ gốc. Không giống phép chọn, phép chiếu không có tính giao hoán.
IV. Hướng dẫn kết hợp quan hệ Tích Cartesian và Phép kết
Khi thông tin cần truy vấn nằm rải rác trên nhiều quan hệ khác nhau, đại số quan hệ cung cấp các toán tử để kết hợp chúng lại. Hai toán tử quan trọng nhất cho mục đích này là Phép tích Cartesian (Cartesian Product - ×) và Phép kết (Join). Phép tích Cartesian là phép toán nền tảng nhất, hoạt động bằng cách ghép mỗi bộ của quan hệ thứ nhất với tất cả các bộ của quan hệ thứ hai. Kết quả là một quan hệ mới rất lớn, có tập thuộc tính là hợp của các thuộc tính từ hai quan hệ ban đầu, và số bộ bằng tích số bộ của chúng. Tuy nhiên, bản thân phép tích Cartesian hiếm khi hữu ích vì nó tạo ra nhiều tổ hợp vô nghĩa. Vai trò thực sự của nó là làm cơ sở cho Phép kết. Phép kết là một biến thể thông minh hơn, nó thực chất là một phép tích Cartesian theo sau bởi một phép chọn để lọc ra những bộ có ý nghĩa. Phổ biến nhất là Phép kết bằng (Equijoin), nơi điều kiện chọn là sự bằng nhau giữa các thuộc tính chung. Một dạng đặc biệt hơn là Phép kết tự nhiên (Natural Join), tự động kết nối trên các thuộc tính cùng tên và loại bỏ các cột trùng lặp. Hiểu rõ cách sử dụng phép kết là kỹ năng then chốt để thực hiện các truy vấn phức tạp trên một cơ sở dữ liệu được chuẩn hóa.
4.1. Phép tích Cartesian Nền tảng của việc tổ hợp dữ liệu
Phép tích Cartesian của hai quan hệ r(R) và s(S), ký hiệu r × s, sẽ tạo ra một quan hệ mới có lược đồ là hợp của R và S. Mỗi bộ trong quan hệ kết quả được tạo thành bằng cách ghép một bộ từ r với một bộ từ s. Nếu r có n bộ và s có m bộ, thì r × s sẽ có n * m bộ. Đây là một phép toán tạo ra sự bùng nổ dữ liệu và thường chỉ là bước trung gian. Ví dụ, để tìm thông tin của trưởng bộ môn, ta có thể thực hiện GIAOVIEN × BOMON. Kết quả sẽ ghép mỗi giáo viên với mỗi bộ môn, dù họ có liên quan hay không. Bước tiếp theo và bắt buộc là sử dụng phép chọn để lọc ra các kết quả hợp lệ, chẳng hạn σTRUONGBM=MAGV(GIAOVIEN × BOMON).
4.2. Phép kết Join Phương pháp kết hợp thông minh và hiệu quả
Phép kết là toán tử được sử dụng thường xuyên nhất để kết hợp dữ liệu từ nhiều bảng. Nó hiệu quả hơn nhiều so với việc thực hiện tích Cartesian rồi chọn. Các loại phép kết chính bao gồm: Kết có điều kiện (Theta Join), là phép kết hợp r × s với một điều kiện chọn P bất kỳ. Kết bằng (Equijoin) là một trường hợp đặc biệt của Theta Join khi điều kiện P chỉ chứa các phép so sánh bằng. Phổ biến nhất là Kết tự nhiên (Natural Join), tự động tìm các thuộc tính có cùng tên trong hai quan hệ, thực hiện kết bằng trên chúng, và sau đó chiếu để loại bỏ các cột bị trùng lặp. Phép kết cho phép tái tạo lại các mối liên kết logic giữa các thực thể đã được tách ra trong quá trình thiết kế cơ sở dữ liệu.
V. Ứng dụng Đại số quan hệ giải quyết các truy vấn thực tế
Lý thuyết về đại số quan hệ sẽ trở nên rõ ràng và hữu ích nhất khi được áp dụng để giải quyết các bài toán truy vấn dữ liệu cụ thể. Bằng cách kết hợp tuần tự các phép toán cơ bản như Phép chọn, Phép chiếu, Phép hội, và Phép kết, chúng ta có thể xây dựng các biểu thức đại số quan hệ phức tạp để trích xuất chính xác thông tin mong muốn từ cơ sở dữ liệu. Việc phân tích một yêu cầu truy vấn thành các bước nhỏ tương ứng với các phép toán là một kỹ năng quan trọng. Ví dụ, một yêu cầu như "Cho biết họ tên và mức lương của các giáo viên nữ" được phân tích thành hai bước: đầu tiên, dùng Phép chọn để lọc ra các giáo viên có thuộc tính PHAI='Nữ'; sau đó, dùng Phép chiếu để chỉ lấy hai cột HOTEN và LUONG từ kết quả trung gian. Đối với các truy vấn phức tạp hơn liên quan đến nhiều bảng, như "Tìm tên các giáo viên thuộc bộ môn 'HTTT' và có tham gia đề tài '001'", chúng ta cần sử dụng đến các phép toán tập hợp như Phép hội để gộp kết quả từ hai nhánh truy vấn riêng biệt. Việc thực hành qua các ví dụ giúp củng cố sự hiểu biết về chức năng của từng toán tử và cách chúng tương tác với nhau để tạo ra kết quả cuối cùng.
5.1. Ví dụ 1 Kết hợp Phép chọn và Phép chiếu cơ bản
Một truy vấn thường gặp là lọc dữ liệu theo một tiêu chí và chỉ hiển thị một vài thông tin cần thiết. Ví dụ được nêu trong tài liệu: "Cho biết họ tên và mức lương của các giáo viên nữ". Để giải quyết, biểu thức đại số quan hệ được xây dựng như sau: π HOTEN, LUONG (σ PHAI='Nữ' (GIAOVIEN)). Biểu thức này được đọc từ trong ra ngoài. Đầu tiên, σ PHAI='Nữ' (GIAOVIEN) sẽ được thực thi để tạo ra một quan hệ tạm thời chỉ chứa thông tin của các giáo viên nữ. Sau đó, phép chiếu π HOTEN, LUONG được áp dụng lên quan hệ tạm thời này để trích xuất ra hai cột HOTEN và LUONG, tạo thành kết quả cuối cùng.
5.2. Ví dụ 2 Sử dụng Phép toán tập hợp để hợp nhất kết quả
Khi một yêu cầu chứa điều kiện 'hoặc' liên quan đến các nguồn dữ liệu khác nhau, Phép hội (∪) là công cụ lý tưởng. Xét ví dụ: "Cho biết mã số các giáo viên thuộc bộ môn HTTT hoặc có tham gia đề tài mã 001". Bài toán này được tách thành hai phần. Phần thứ nhất là tìm mã giáo viên thuộc bộ môn HTTT: π MAGV (σ MABM='HTTT' (GIAOVIEN)). Phần thứ hai là tìm mã giáo viên tham gia đề tài 001: π MAGV (σ MAĐT='001' (TG_ĐETAI)). Cuối cùng, hai tập kết quả này được hợp nhất bằng phép hội: (π MAGV (σ MABM='HTTT' (GIAOVIEN))) ∪ (π MAGV (σ MAĐT='001' (TG_ĐETAI))).
5.3. Ví dụ 3 Truy vấn trên nhiều quan hệ bằng Phép kết
Để lấy thông tin từ nhiều bảng có liên quan, Phép kết là bắt buộc. Ví dụ: "Cho biết thông tin của bộ môn cùng thông tin giảng viên làm trưởng bộ môn đó". Yêu cầu này cần dữ liệu từ bảng BOMON và GIAOVIEN. Mối liên kết giữa hai bảng là thông qua thuộc tính BOMON.TRUONGBM và GIAOVIEN.MAGV. Biểu thức đầy đủ sử dụng Phép tích Cartesian và Phép chọn là: σ BOMON.TRUONGBM = GIAOVIEN.MAGV (BOMON × GIAOVIEN). Biểu thức này tương đương với một phép kết bằng giữa hai quan hệ trên thuộc tính khóa ngoại và khóa chính, cho phép ghép đúng thông tin của trưởng bộ môn với bộ môn mà họ quản lý.