Nói một cách chính xác, cách duy nhất để phân tầng các giá trị như vậy là sử dụng BẬT CẬP NHẬT CASCADE. Để làm điều đó , cột "is_deleted" phải là một phần của một ràng buộc duy nhất.
Điều đó một mình không quá khó. Nếu company.id là khóa chính của bạn, thì cặp cột {id, is_deleted} cũng sẽ là duy nhất. Một ràng buộc duy nhất trên cặp cột đó sẽ cho phép bạn xếp tầng các bản cập nhật thông qua tham chiếu khóa ngoại.
Nhưng điều đó sẽ không hoạt động trong của bạn vì bạn cần cho phép các giá trị tham chiếu khác nhau từ các giá trị được tham chiếu.
Vì vậy, trong trường hợp của bạn, tôi nghĩ bạn có ba lựa chọn.
- Trình kích hoạt
- Các thủ tục được lưu trữ
- Mã ứng dụng
Trong tất cả các trường hợp đó, bạn cần chú ý đến các quyền (có thể thu hồi quyền xóa) và các trường hợp có thể tránh mã của bạn. Ví dụ:giao diện dòng lệnh dbms và giao diện GUI có thể được sử dụng để giải quyết các ràng buộc trong mã ứng dụng và, tùy thuộc vào quyền, trong các thủ tục được lưu trữ.