Về mặt chính thức, bạn không có quyền kiểm soát thứ tự của các hoạt động xếp tầng. Bạn có thể lạm dụng một số không có giấy tờ tuy nhiên hành vi:
- đối với MySQL 5.5, các khóa ngoại được thực thi theo thứ tự mà chúng đã được tạo, vì vậy hãy thả và tạo lại
fk_category_org
-constraint nên hoạt động - đối với MySQL 5.6+, các khóa ngoại được thực thi theo thứ tự từ vựng trong tên của chúng, vì vậy hãy đổi tên
fk_category_org
đến v.d.fk_z_category_org
nên làm việc
Điều này không có giấy tờ và có thể thay đổi bất cứ lúc nào (và có thể bị ảnh hưởng bởi các yếu tố khác).
Điều đó đang được nói, cách thích hợp để làm điều này (và bất kỳ điều gì khác quá phức tạp đối với on cascade
) sẽ là thêm một before delete
- trình kích hoạt
trên organisation
-table mà "thủ công" xóa người dùng trước tiên và sau đó là các danh mục sau đó. before delete
-trigger được thực thi trước on cascade
(vì vậy bạn có thể quyết định xem bạn có muốn giữ những thứ đó hay không, mặc dù nó có thể gây hiểu lầm).
Không hoàn toàn rõ ràng đó có phải là hành vi có chủ đích của bạn hay không, nhưng hiện tại, người dùng có thể có một danh mục thuộc tổ chức 1 trong khi anh ta được chỉ định cho tổ chức 2. Việc xóa tổ chức 1 sau đó vẫn không thành công. Có vẻ như đó là điều bạn muốn ngăn chặn bởi thiết kế của mình, nhưng nếu bạn muốn tính năng xóa cũng hoạt động trong trường hợp này, bạn cần sử dụng trình kích hoạt để có thể kết hợp điều đó (hoặc xóa thủ công trong ứng dụng của bạn), việc xếp tầng sẽ không hoạt động trừ khi bạn cũng phân tầng trong bảng danh mục.