FOREIGN KEY dan Tindakan Referensial
Hubungkan tabel dengan FOREIGN KEY, lalu pilih ON DELETE CASCADE / SET NULL / RESTRICT untuk perilaku yang tepat.
FOREIGN KEY dan Tindakan Referensial adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Fungsi FOREIGN KEY
FOREIGN KEY membuat basis data menolak baris yang menunjuk ke induk yang tidak ada:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id),
total NUMERIC(10,2) NOT NULL
);
-- Inserting an order with user_id=999 fails if no such user exists.Mengapa Menggunakan FOREIGN KEY?
FK menerapkan integritas referensial:
- Tidak ada baris yatim
- Menangkap kesalahan aplikasi saat penyisipan
- Membuat diagram ER akurat
- Mengaktifkan perilaku kaskade otomatis
Tindakan Referensial
Apa yang harus terjadi ketika baris induk dihapus atau diperbarui? Ada lima pilihan:
NO ACTION— kesalahan (bawaan, dapat ditangguhkan)RESTRICT— kesalahan (tidak dapat ditangguhkan)CASCADE— hapus/perbarui juga baris anakSET NULL— tetapkan FK anak menjadi NULLSET DEFAULT— tetapkan FK anak ke nilai bawaannya
ON DELETE CASCADE
"Ketika pengguna dihapus, hapus juga pesanannya":
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL
REFERENCES users(id) ON DELETE CASCADE,
total NUMERIC(10,2) NOT NULL
);ON DELETE SET NULL
"Ketika manajer dihapus, karyawan tetap ada tetapi kehilangan manajernya":
CREATE TABLE employees (
id BIGSERIAL PRIMARY KEY,
full_name TEXT NOT NULL,
manager_id BIGINT REFERENCES employees(id) ON DELETE SET NULL
);Bawaan: Seperti RESTRICT
Tanpa tindakan referensial, upaya menghapus induk yang memiliki anak akan gagal:
ERROR: update or delete on table "users" violates foreign key constraint "orders_user_id_fkey" on table "orders"
DETAIL: Key (id)=(42) is still referenced from table "orders".Selalu Indeks Kolom FK
PostgreSQL TIDAK membuat indeks pada sisi anak secara otomatis. Tambahkan indeks — tanpanya, penghapusan induk memicu pemindaian penuh pada setiap tabel anak:
CREATE INDEX orders_user_id_idx ON orders(user_id);FOREIGN KEY Gabungan
Rujuk kunci utama gabungan:
CREATE TABLE order_items (
order_id BIGINT,
line_no INT,
PRIMARY KEY (order_id, line_no)
);
CREATE TABLE shipments (
order_id BIGINT,
line_no INT,
FOREIGN KEY (order_id, line_no)
REFERENCES order_items(order_id, line_no)
);Menunda Pemeriksaan FOREIGN KEY
Terkadang Anda perlu menyisipkan pasangan yang saling bergantung. Tandai FK sebagai DEFERRABLE INITIALLY DEFERRED:
ALTER TABLE orders
ALTER CONSTRAINT orders_user_id_fkey DEFERRABLE INITIALLY DEFERRED;
BEGIN;
INSERT INTO orders ... ; -- FK temporarily not checked
INSERT INTO users ... ;
COMMIT; -- checked hereMenambahkan FOREIGN KEY Secara Daring
Pada tabel besar, gunakan NOT VALID + VALIDATE untuk menghindari penguncian yang lama:
ALTER TABLE orders
ADD CONSTRAINT orders_user_id_fkey
FOREIGN KEY (user_id) REFERENCES users(id) NOT VALID;
ALTER TABLE orders VALIDATE CONSTRAINT orders_user_id_fkey;Gunakan CASCADE dengan Hati-Hati
Penghapusan CASCADE menyebar. Menghapus pengguna dapat menghapus pesanan, pembayaran, dan log audit. Pastikan kaskade tersebut sesuai dengan maksud bisnis Anda.
Ringkasan
FOREIGN KEY adalah pagar pengaman.
- REFERENCES + ACTION mendeklarasikan hubungan dan perilakunya
- Indeks kolom FK pada sisi anak
- Gunakan NOT VALID + VALIDATE untuk penambahan secara daring
Pemeriksaan Singkat
Apa tindakan referensial yang tepat untuk menghapus pesanan secara AUTOMATICALLY ketika pengguna induknya dihapus?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “FOREIGN KEY dan Tindakan Referensial” gratis?
Ya — teks lengkap “FOREIGN KEY dan Tindakan Referensial” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “FOREIGN KEY dan Tindakan Referensial”?
Hubungkan tabel dengan FOREIGN KEY, lalu pilih ON DELETE CASCADE / SET NULL / RESTRICT untuk perilaku yang tepat. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “FOREIGN KEY dan Tindakan Referensial” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Kendala NOT NULL dan CHECK
- Kendala UNIQUE dan Kunci Gabungan
- FOREIGN KEY dan Tindakan Referensial
- Nilai DEFAULT dan Kolom yang Dihasilkan