EMZETT.
Giriş yap

Saklı yordamlar ve tetikleyiciler: veri tabanında mantık

Kısaca: Saklı yordamlar veri tabanında saklanan ve çağrılan programlardır; tetikleyiciler veri eklendiğinde, değiştirildiğinde veya silindiğinde otomatik çalışır.

Biraz daha ayrıntılı: Normalde bir uygulama veri tabanına tek tek SQL komutları gönderir. Ancak mantığı veri tabanının içine de koyabilirsin. Bunun tartılması gereken avantajları ve dezavantajları vardır.

Ayrıntılı

Saklı yordam ve işlev

SQL ve akış denetiminden (döngüler, koşullar) oluşan, CALL veya SELECT ile çağrılan adlandırılmış bir program. PostgreSQL’de örnek:

CREATE FUNCTION create_order(customer int, amount numeric)
RETURNS int LANGUAGE plpgsql AS $$
DECLARE new_id int;
BEGIN
  INSERT INTO orders (customer_id, amount) VALUES (customer, amount)
  RETURNING id INTO new_id;
  UPDATE customers SET revenue = revenue + amount WHERE id = customer;
  RETURN new_id;
END $$;

Diller: PL/pgSQL (PostgreSQL), T-SQL (SQL Server), PL/SQL (Oracle), MySQL yordamları.

Tetikleyici

Bir tetikleyici INSERT, UPDATE veya DELETE öncesinde ya da sonrasında otomatik olarak yürütülür:

CREATE TRIGGER change_time
BEFORE UPDATE ON article
FOR EACH ROW EXECUTE FUNCTION set_change_time();

Tipik kullanımlar: değişiklik zamanını ayarlamak, denetim günlükleri yazmak, türetilmiş değerleri güncel tutmak, basit bir kısıtlamanın kapsamadığı kuralları denetlemek.

Avantajlar

  • Daha az ağ trafiği: birçok yerine tek çağrı.
  • Verilere hangi uygulamanın eriştiğinden bağımsız olarak mantık tek bir yerde.
  • Bir uygulama unutsa bile veri tabanı kuralları garanti eder.
  • Verilere yakın bir işlemde yürütme.

Dezavantajlar ve alternatifler

Veri tabanındaki iş mantığının test edilmesi, sürümlenmesi ve hata ayıklanması daha zordur, seni tek bir üreticiye bağlar ve zor ölçeklenen veri tabanı sunucusunda yük tepeleri yaratabilir. Tetikleyicilerin gizli etkileri geliştiricileri şaşırtır. Birçok ekip mantığı uygulamaya koyar ve veri tabanında yalnızca kısıtlamalar, dizinler ve basit tetikleyiciler (denetim, zaman damgası) kullanır. Yordamlardaki değişiklikler, kod gibi migrasyonlara ve sürüm denetimine aittir.

Ayrıca bak: SQL, İşlemler ve ACID, Veri tabanı migrasyonu, Denetim günlüğü