Phép kết trong đại số quan hệ
Ở phần trước mình đã giới thiệu với các bạn các phép toán tập hợp trong đại số quan hệ. Đó đều là các phép toán cơ bản nhưng cũng là nền tảng để thực hiện các phép toán khác phức tạp hơn. Khi làm việc với một cơ sở dữ liệu, việc kết hợp quan hệ với nhau để đưa ra kết quả đắp ứng một yêu cầu nào đó ...
Ở phần trước mình đã giới thiệu với các bạn các phép toán tập hợp trong đại số quan hệ. Đó đều là các phép toán cơ bản nhưng cũng là nền tảng để thực hiện các phép toán khác phức tạp hơn. Khi làm việc với một cơ sở dữ liệu, việc kết hợp quan hệ với nhau để đưa ra kết quả đắp ứng một yêu cầu nào đó không phải lúc nào cũng là một việc dễ dàng. Tuy nhiên trong nhiều trường hợp kết quả trả về của việc kết hợp đó lại gây nên sự bùng nổ về mặt tổ hợp và tồn tại những bộ không có một ý nghĩa rõ ràng. Vì vậy, người ta đưa ra các phép toán lựa chọn nhằm khắc phục vấn đề trên. Các phép toán lựa chọn trong đại số quan hệ bao gồm: Phép chọn (selection), phép chiếu (projection), phép chia (set division) và phép kết (join). Trong các phép toán này thì phép kết là phép toán được sử dụng nhiều nhất và có phần phức tạp hơn cả. Nó cũng là nền tảng toán học khi thực hiện các phép join trong SQL. Với ý nghĩa quan trọng như vậy nên mình xin giành riêng bài viết này để đi sâu về việc tìm hiểu phép toán trên. Phép kết thể hiện ở 2 dạng chính: Kết tự nhiên (natural join) và kết theta (theta join).
Khi thực hiện phép kết tự nhiên, chúng ta sẽ thu được một quan hệ kết quả bao gồm các bộ có một hay nhiều thuộc tính có giá trị là giá trị chung tương ứng trong hai bộ thuộc hai quan hệ tham gia. Chúng ta cùng xem qua ví dụ sau:
Chúng ta thực hiện phép kết trên hai quan hệ Paternity và Maternity, để ý rằng hai quan hệ có chung một thuộc tính là "Child", phép kết được thực hiện bằng việc so sánh các giá trị thông qua thuộc tính này. Vậy trong trường hợp hai quan hệ không có chung thuộc tính nào thì sao? Khi đó phép kết sẽ trở thành phép tích quen thuộc mà chúng ta đã được tìm hiểu trong phần trước.
Một biến thể nữa của phép kết tự nhiên khi đảm bảo sự xuất hiện của tất cả các bộ của một toán hạng hoặc của cả hai toán hạng trong quan hệ kết quả. Hãy cùng xem qua ví dụ sau đây để hiểu rõ hơn:
Chúng ta thấy sự tương đồng giữa các phép toán trên với các phép join trong SQL. Khi thực hiện phép kết trái (left join), toàn bộ các bộ thuộc quan hệ đứng bên trái phép toán được giữ lại bao gồm cả những bộ không thỏa mãn điều kiện kết. Tương tự đối với phép kết phải (right join) và phép kết toàn phần (full join)
Điểm khác nhau giữa phép kết tự nhiên và phép kết theta là phép kết theta chỉ rõ các thuộc tính trên các quan hệ cùng với các phép toán sẽ được sử dụng để làm điều kiện kết. Các phép toán có thể sử dụng giữa các thuộc tính đó là =, >, <, >=, <=, ...Trong trường hợp là dấu “=” ta gọi đó là phép kết bằng (equi-join).
Đến đây chúng ta có thể thấy bản chất của phép kết là phép tích khi kết hợp thêm các điều kiện lọc nhằm loại bỏ đi những bộ không cần thiết trong quan hệ kết quả. Trong phần sau chúng ta sẽ đi tìm hiểu nốt các phép toán trong bộ các phép toán lựa chọn trong đại số quan hệ đó là Phép chọn (selection), phép chiếu (projection), phép chia (set division).