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üğü