Các phép nối là cách hoạt động của các DBMS quan hệ. Tìm hiểu về và sử dụng chuẩn hóa.
Nếu điều này đúng với mọi dịch vụ thì cơ sở dữ liệu của bạn phải chịu một hạn chế. Đó là (select service from Service_has_transaction join Transaction_has_wallet)
là một tập hợp con của (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus)
.
Hầu hết các DBMS SQL không cho phép bạn thể hiện ràng buộc đó một cách khai báo và không biết cách tối ưu hóa việc thực thi nó. Tuy nhiên, có một thành ngữ SQL mà chúng ta có thể sử dụng để diễn đạt và thực thi nó một cách khai báo. (Đoán định nghĩa bảng của bạn :) Đầu tiên hãy thêm bonus
cột thành Transaction_has_wallet
và khóa ngoại từ Transaction_has_wallet (wallet, bonus)
tới Wallet_has_bonus
. Sau đó, thêm các cột ví và tiền thưởng vào Service_has_transaction
và khóa ngoại từ Service_has_transaction (transaction, wallet, bonus)
đến Transaction
. Điều này thêm các cột dư thừa nhưng vẫn giới hạn cơ sở dữ liệu ở các trạng thái hợp lệ vì các ràng buộc khóa ngoại ngăn các giá trị thừa không bị sai. (Hy vọng rằng đây là một ví dụ khuyến khích để học về cách thể hiện các ràng buộc tùy ý thông qua trình kích hoạt.)