Soft Delete vs Hard Delete: Veri Geri Dönüşü ve Performans
# Soft Delete vs Hard Delete: Veri Geri Dönüşü ve Performans
Hard delete, veritabanından verileri tamamen siler. Geri dönüş yoktur.
Soft delete, verileri silmek yerine "silinmiş" olarak işaretler. Veri kalır ama gösterilmez.
Hangi biri seçmeli? İş gereksinimlerine bağlı.
Hard delete doğrudan satırı siler:
1DELETE FROM users WHERE id = 5;Avantajları:
- Veritabanı boyutu küçülür
- Sorgu performansı etkilenmez
Dezavantajları:
- Veri geri gelemez
- Hukuki sorunlar (muhasebe, denetim)
- Yanlış silme felaket
Soft delete bir sütun ekler ve işaretler:
1ALTER TABLE users ADD COLUMN deleted_at DATETIME NULL;23UPDATE users SET deleted_at = NOW() WHERE id = 5;Veri hala tabloda, ama `deleted_at` dolu olduğu için "silinmiş" sayılır.
Avantajları:
- Veri geri dönüş mümkün: `UPDATE users SET deleted_at = NULL WHERE id = 5;`
- Denetim izleri tutulur
- Yasal gereklilikleri karşılar
Dezavantajları:
- Tüm sorgulara `WHERE deleted_at IS NULL` eklemek gerekir
- Tablolar büyür, performans düşer
- Unique constraint sorunları (aynı email iki kere silinebilir)
Kullanıcı tablosu:
1CREATE TABLE users (2id INT PRIMARY KEY,3email VARCHAR(100),4name VARCHAR(100),5deleted_at DATETIME NULL6);78INSERT INTO users VALUES (1, 'ali@mail.com', 'Ali', NULL);9INSERT INTO users VALUES (2, 'veli@mail.com', 'Veli', NULL);1011-- Soft delete12UPDATE users SET deleted_at = NOW() WHERE id = 1;1314-- Sadece aktif kullanıcıları getir15SELECT * FROM users WHERE deleted_at IS NULL;Çıktı:
1id | email | name | deleted_at22 | veli@mail.com | Veli | NULLAli silinmiş görünüyor ama veri hala var.
- Soft delete: Mali veriler, kullanıcı hesapları, siparişler
- Hard delete: Geçici veriler, log kayıtları, test verileri
Çoğu zaman ikisini karıştır: Önemli veriler için soft delete, eski loglar için hard delete.
Performans sorunuysa, silinmiş verileri ayrı bir tablo veya archive'e taşı.
0 yorum