FOREIGN KEY ve Başvuru Eylemleri
Tabloları FOREIGN KEY ile birbirine bağlayın ve doğru davranış için ON DELETE CASCADE / SET NULL / RESTRICT seçeneklerinden birini belirleyin.
FOREIGN KEY ve Başvuru Eylemleri, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Yabancı Anahtarın Görevi
Bir FOREIGN KEY, veritabanının mevcut olmayan üst satırlara işaret eden satırları reddetmesini sağlar:
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.Yabancı Anahtarlar Neden Kullanılır?
FK'ler referans bütünlüğünü zorunlu kılar:
- Yetim satır olmaz
- Uygulama hatalarını ekleme sırasında yakalar
- ER diyagramlarını doğru hâle getirir
- Otomatik CASCADE davranışını etkinleştirir
Referans Eylemleri
Üst satır silindiğinde veya güncellendiğinde ne olmalı? Beş seçenek vardır:
NO ACTION— hata (varsayılan, ertelenebilir)RESTRICT— hata (ertelenemez)CASCADE— alt satırı da siler/güncellerSET NULL— alt satırın FK değerini NULL yaparSET DEFAULT— alt satırın FK değerini varsayılanına ayarlar
ON DELETE CASCADE
"Kullanıcı silindiğinde siparişlerini de sil":
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
"Yönetici kaldırıldığında çalışanlar mevcut kalır, ancak yöneticilerini kaybeder":
CREATE TABLE employees (
id BIGSERIAL PRIMARY KEY,
full_name TEXT NOT NULL,
manager_id BIGINT REFERENCES employees(id) ON DELETE SET NULL
);Varsayılan: RESTRICT Benzeri
Bir referans eylemi olmadan, alt satırları bulunan bir üst satırı silmeye çalışmak başarısız olur:
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".FK Sütununda Her Zaman Dizin Oluşturun
PostgreSQL, alt tarafta otomatik olarak dizin oluşturmaz. Bir tane ekleyin; aksi hâlde bir üst satırı silmek her alt tablonun tamamen taranmasını tetikler:
CREATE INDEX orders_user_id_idx ON orders(user_id);Bileşik Yabancı Anahtarlar
Bileşik bir PRIMARY KEY'e başvurun:
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)
);Yabancı Anahtar Denetimlerini Erteleme
Bazen tavuk-yumurta ikilisini eklemeniz gerekir. FK'yı DEFERRABLE INITIALLY DEFERRED olarak işaretleyin:
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 hereYabancı Anahtarları Çevrimiçi Ekleme
Büyük tablolarda uzun süreli bir kilitten kaçınmak için NOT VALID + VALIDATE kullanın:
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;CASCADE'i Dikkatli Kullanın
CASCADE silmeleri yayar. Bir kullanıcıyı silmek siparişleri, ödemeleri ve denetim günlüklerini yok edebilir. CASCADE davranışının iş amacınızla örtüştüğünden emin olun.
Özet
Yabancı anahtarlar koruyucu bariyerlerdir.
- REFERENCES + eylem, bağlantıyı ve davranışı bildirir
- Alt tablodaki FK sütununda dizin oluşturun
- Çevrimiçi eklemeler için NOT VALID + VALIDATE kullanın
Hızlı Kontrol
Üst kullanıcı silindiğinde bir siparişi AUTOMATICALLY kaldıran doğru referans eylemi nedir?
Sıkça Sorulan Sorular
“FOREIGN KEY ve Başvuru Eylemleri” dersi ücretsiz mi?
Evet — “FOREIGN KEY ve Başvuru Eylemleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“FOREIGN KEY ve Başvuru Eylemleri” dersinde ne öğreneceğim?
Tabloları FOREIGN KEY ile birbirine bağlayın ve doğru davranış için ON DELETE CASCADE / SET NULL / RESTRICT seçeneklerinden birini belirleyin. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“FOREIGN KEY ve Başvuru Eylemleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- NOT NULL ve CHECK Kısıtlamaları
- UNIQUE Kısıtlamaları ve Bileşik Anahtarlar
- FOREIGN KEY ve Başvuru Eylemleri
- DEFAULT Değerleri ve GENERATED Sütunlar