Oracle gọi đây là một ràng buộc toàn vẹn tự tham chiếu. Tài liệu ở đây để mô tả,
Bạn tạo ràng buộc tự tham chiếu theo cách giống như cách bạn làm thông thường:
alter table employees
add constraint employees_emp_man_fk
foreign key ( manager_no )
references employees ( emp_id )
on delete set null
;
Tôi giả định rằng manager_no
của bạn là nullable. Tôi đã thêm set null ở đây dưới dạng delete cascade
có thể sẽ xóa sạch một lượng đáng kể bảng của bạn.
Tôi không thể nghĩ ra một cách tốt hơn để làm điều này. Xóa người quản lý sẽ không dẫn đến việc xóa tất cả nhân viên của họ, vì vậy bạn phải set null
và có một trình kích hoạt trên bàn để cảnh báo bạn với bất kỳ ai không có người quản lý.
Tôi luôn thích trang web này, rất tốt để tham khảo đơn giản. và đừng quên có chỉ số trên FK nếu không Tom sẽ hét vào mặt bạn :-).
Người ta cũng có thể sử dụng cú pháp Oracle tiêu chuẩn để tạo FK tự tham chiếu trong câu lệnh tạo bảng, giống như sau.
create table employees
( emp_id number
, other_columns ...
, manager_no number
, constraint employees_pk
primary key (emp_id)
, constraint employees_man_emp_fk
foreign key ( manager_no )
references employees ( emp_id )
on delete set null
);
CHỈNH SỬA:
Để trả lời cho nhận xét của @ popstack bên dưới:
Trong khi bạn có thể làm điều này trong một câu lệnh, không thể thay đổi bảng là một trạng thái khá nực cười. Bạn chắc chắn nên phân tích một bảng mà bạn sẽ chọn từ đó và bạn vẫn muốn có một chỉ mục trên khóa ngoại (và có thể nhiều cột hơn và / hoặc nhiều chỉ mục hơn) nếu không thì bất cứ khi nào bạn sử dụng khóa ngoại, bạn sẽ làm quét toàn bộ bảng. Xem liên kết của tôi đến asktom ở trên.
Nếu bạn không thể thay đổi bảng thì bạn nên làm theo thứ tự mức độ quan trọng giảm dần.
- Tìm hiểu cách bạn có thể.
- Thay đổi thiết kế DB của bạn vì FK phải có chỉ mục và nếu bạn không thể có thì FK có lẽ không phải là cách để thực hiện. Có thể có một bảng quản lý và một bảng nhân viên?