Oracle menyebutnya sebagai batasan integritas referensial diri. Dokumentasi ada di sini untuk deskripsi,
Anda membuat batasan referensi diri dengan cara yang sama seperti yang biasa Anda lakukan:
alter table employees
add constraint employees_emp_man_fk
foreign key ( manager_no )
references employees ( emp_id )
on delete set null
;
Saya berasumsi bahwa manager_no
Anda dapat dibatalkan. Saya telah menambahkan set null di sini sebagai delete cascade
mungkin akan menghapus sejumlah besar meja Anda.
Saya tidak bisa memikirkan cara yang lebih baik untuk melakukan ini. Menghapus seorang manajer seharusnya tidak mengakibatkan penghapusan semua karyawannya sehingga Anda harus set null
dan memiliki pemicu di atas meja untuk mengingatkan Anda kepada siapa pun yang tidak memiliki manajer.
Saya selalu menyukai situs ini, yang bagus untuk referensi sederhana. dan jangan lupa untuk memiliki indeks di FK juga atau Tom akan meneriaki Anda :-).
Seseorang juga dapat menggunakan sintaks Oracle standar untuk membuat FK referensi sendiri dalam pernyataan buat tabel, yang akan terlihat seperti berikut ini.
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
);
EDIT:
Sebagai jawaban atas komentar @popstack di bawah ini:
Meskipun Anda dapat melakukan ini dalam satu pernyataan, tidak dapat mengubah tabel adalah keadaan yang cukup konyol. Anda pasti harus menganalisis tabel yang akan Anda pilih dan Anda masih menginginkan indeks pada kunci asing (dan mungkin lebih banyak kolom dan/atau lebih banyak indeks) jika tidak, setiap kali Anda menggunakan kunci asing yang akan Anda lakukan pemindaian tabel penuh. Lihat tautan saya ke asktom di atas.
Jika Anda tidak dapat mengubah tabel, Anda harus melakukannya, dalam urutan kepentingan yang menurun.
- Cari tahu caranya.
- Ubah desain DB Anda karena FK harus memiliki indeks dan jika Anda tidak dapat memilikinya maka FK mungkin bukan cara yang tepat. Mungkin memiliki meja manajer dan meja karyawan?