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 TRIGGER

Amaç#

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:

  • classes tablosundan bir kayıt silindiğinde (DELETE işlemi)
  • Otomatik olarak ilgili class_members kayı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ı silinir

SQL Ö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ığı#

  1. classes tablosundan bir kayıt silinir
  2. Trigger tetiklenir (AFTER DELETE)
  3. Fonksiyon, silinen sınıfın ID’si ile eşleşen tüm class_members kayıtlarını bulur
  4. Bu kayıtları kalıcı olarak siler
  5. 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
  • classes tablosunu 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.