delete_class_members_when_a_class_deleted()#
Bir sınıf silindiğinde o sınıfa ait tüm öğrenci üyeliklerini otomatik olarak temizleyen trigger fonksiyonu.
Fonksiyon İmzası#
CREATE OR REPLACE FUNCTION delete_class_members_when_a_class_deleted()
RETURNS TRIGGERAmaç#
Veri bütünlüğünü sağlamak için bir sınıf silindiğinde (classes tablosundan DELETE), o sınıfa bağlı tüm class_members kayıtlarını otomatik olarak siler. Bu sayede orphan (sahipsiz) kayıtlar oluşması önlenir.
Parametreler#
Bu fonksiyon trigger olarak çalıştığı için parametre almaz. OLD değişkenini kullanır.
Dönüş Değeri#
- Type: TRIGGER
- Returns: OLD (silinen sınıf kaydı)
SQL Kodu#
CREATE OR REPLACE FUNCTION public.delete_class_members_when_a_class_deleted()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
DELETE FROM class_members
WHERE class_id = OLD.id;
RETURN OLD;
END;
$function$Kullanım Örneği#
Projede Kullanım#
Açıklama: Bu fonksiyon bir trigger olduğu için uygulama kodunda doğrudan çağrılmaz. Otomatik olarak çalışır.
Ne zaman tetiklenir:
classestablosundan bir kayıt silindiğinde (DELETE işlemi)- Otomatik olarak ilgili
class_memberskayıtlarını siler
Örnek Senaryo:
// Uygulama kodunda sınıf silindiğinde
await supabase
.from('classes')
.delete()
.eq('id', classId);
// ↑ Bu işlem sonrasında trigger otomatik çalışır
// ve class_members kayıtları silinirSQL Örneği#
-- Trigger tanımı
CREATE TRIGGER trg_delete_class_members
AFTER DELETE ON classes
FOR EACH ROW
EXECUTE FUNCTION delete_class_members_when_a_class_deleted();
-- Kullanım
DELETE FROM classes WHERE id = 42;
-- Bu sınıfa ait tüm class_members kayıtları otomatik olarak silinirÇalışma Mantığı#
classestablosundan bir kayıt silinir- Trigger tetiklenir (AFTER DELETE)
- Fonksiyon, silinen sınıfın ID’si ile eşleşen tüm
class_memberskayıtlarını bulur - Bu kayıtları kalıcı olarak siler
- OLD kaydını döndürür
İlgili Trigger#
CREATE TRIGGER trigger_delete_class_members
AFTER DELETE ON public.classes
FOR EACH ROW
EXECUTE FUNCTION delete_class_members_when_a_class_deleted();Özellikler#
- Otomatik cascade delete
- Orphan kayıt önleme
- Veri bütünlüğü
- Hard delete (kalıcı silme)
Güvenlik#
- Trigger otomatik çalıştığı için ekstra yetki kontrolü gerektirmez
classestablosunu silme yetkisi olan herkes bu işlemi tetikleyebilir
İlgili Tablolar#
public.classes(tetikleyici tablo)public.class_members(etkilenen tablo)
Notlar#
Uyarı: Bu işlem hard delete yapar. Soft delete (deleted_at) kullanılmaz. Silinen kayıtlar geri alınamaz.
Alternatif: Eğer soft delete tercih ediliyorsa, bu fonksiyon yerine class_members tablosunda deleted_at alanını güncelleyen bir trigger kullanılabilir.