Her yeni veritabanı tasarlamam gerektiğinde, değişikliklerin bir denetim günlüğünü tutmak için veritabanı şemasını nasıl kurmam gerektiğini düşünerek epeyce zaman harcıyorum.
Burada bununla ilgili bazı sorular sorulmuştu, ancak tüm senaryolar için tek bir en iyi yaklaşım olduğu konusunda hemfikir değilim:
- Revizyonlar İçin Veritabanı Tasarımı
- Değişiklik günlüğü denetim veritabanı tablosu için en iyi tasarım
- Denetim izlerini yakalamak için veritabanı tasarımına ilişkin fikirler
Ayrıca , her bir yaklaşımın artılarını ve eksilerini listelemeye çalışan Veritabanı Değişikliklerinin Günlüğünü Koruma hakkındaki bu ilginç makaleye de rastladım . Çok iyi yazılmış ve ilginç bilgiler içeriyor, ancak kararlarımı daha da zorlaştırdı.
Sorum şu: Kullanabileceğim bir referans var mı, belki bir kitap veya bir karar ağacı gibi, bazı girdi değişkenlerine göre hangi yöne gitmem gerektiğine karar vermek için başvurabileceğim bir şey var mı, örneğin:
- Veritabanı şemasının olgunluğu
- Günlükler nasıl sorgulanacak
- Kayıtların yeniden oluşturulması gerekme olasılığı
- Daha da önemlisi: yazma veya okuma performansı
- Günlüğe kaydedilen değerlerin niteliği (dize, sayılar, bloblar)
- Mevcut depolama alanı
Bildiğim yaklaşımlar:
1. Oluşturma ve değiştirme tarihi ve kullanıcı için sütunlar ekleyin
Tablo örneği:
- İD
- değer_1
- değer_2
- değer_3
- create_date
- modifiye_tarihi
- tarafından yaratıldı
- tarafından tasarlandı
Başlıca eksiler: Değişikliklerin geçmişini kaybediyoruz. Kaydetmeden sonra geri alınamaz.
2. Yalnızca tabloları ekleyin
- İD
- değer_1
- değer_2
- değer_3
- itibaren
- -e
- silinmiş (Boole)
- kullanıcı
Başlıca eksiler: Yabancı anahtarlar nasıl güncel tutulur? Büyük alan gerekli
3. Her tablo için ayrı bir geçmiş tablosu oluşturun
Geçmiş tablosu örneği:
- İD
- değer_1
- değer_2
- değer_3
- değer_4
- kullanıcı
- silinmiş (Boole)
- zaman damgası
Başlıca eksiler: Denetlenen tüm tabloların kopyalanması gerekir. Şema değişirse, tüm günlüklerin de taşınması gerekecektir.
4. Tüm Tablolar için Birleştirilmiş bir geçmiş Tablosu oluşturun
Geçmiş tablosu örneği:
- Tablo ismi
- alan
- kullanıcı
- yeni değer
- silinmiş (Boole)
- zaman damgası
Başlıca eksiler: Gerekirse kayıtları kolayca yeniden oluşturabilecek miyim (geri alma)? New_value sütununun tüm farklı sütun türlerini destekleyebilmesi için büyük bir dizge olması gerekir.