0Pricing
SQL Academy · Pelajaran

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 anak
  • SET NULL — tetapkan FK anak menjadi NULL
  • SET 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 here

Menambahkan 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

  1. Kendala NOT NULL dan CHECK
  2. Kendala UNIQUE dan Kunci Gabungan
  3. FOREIGN KEY dan Tindakan Referensial
  4. Nilai DEFAULT dan Kolom yang Dihasilkan
← Kembali ke SQL Academy