Ana içeriğe geç
Kesit SQL
Orta · Veritabanı Tasarımı

Tasarım kalıpları ve kötü pratikler: soft delete, denetim sütunları, EAV, JSON mu tablo mu?

Gerçek projelerde sık karşılaşılan tasarım kararları ve sonuçları.

Uygulamada aç, 9 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

Denetim sütunları

Neredeyse her iş tablosunda bulunur: created_at, created_by, updated_at, updated_by. Varsayılan değerle (DEFAULT CURRENT_TIMESTAMP) ve güncellemede trigger veya uygulama katmanıyla doldurulur. Ayrıntılı geçmiş gerekiyorsa temporal tablo veya ayrı bir geçmiş tablosu.

Soft delete (yumuşak silme)

Satırı silmek yerine is_deleted = 1 veya deleted_at işaretlemek. Geri alınabilirlik ve denetim sağlar ama bedeli vardır:

CREATE TABLE etiket (
  etiket_id  INTEGER PRIMARY KEY,
  ad         TEXT NOT NULL,
  deleted_at TEXT
);
INSERT INTO etiket VALUES (1, 'kampanya', NULL), (2, 'yeni', '2024-11-01'), (3, 'indirim', NULL);
CREATE VIEW v_etiket AS SELECT etiket_id, ad FROM etiket WHERE deleted_at IS NULL;
SELECT * FROM v_etiket;

EAV: varlık-öznitelik-değer tuzağı

“Her ürünün farklı özellikleri var” diye tek bir (urun_id, ozellik, deger) tablosu kurmak esnek görünür ama:

Alternatifler: ortak alanlar sütun, değişken alanlar JSON sütunu (PostgreSQL jsonb + GIN indeks, SQL Server JSON fonksiyonları, MySQL JSON); ya da alt tip tabloları.

JSON mu, tablo mu?

Tablo/sütun seçJSON seç
Alan sık filtreleniyor, birleştiriliyor, toplanıyorAlan yalnızca saklanıp aynen gösteriliyor
Kısıt ve tip güvenliği gerekiyorYapı kaynağa göre değişiyor (API yanıtları, olay yükleri)
Raporlama ve BI kullanacakSeyrek, isteğe bağlı nitelikler

Diğer kalıplar ve tuzaklar

Alıştırmalara geç (9)