SORU
6 Ocak 2010, ÇARŞAMBA


Veritabanı denetim günlüğü için tasarım

Her zaman çok zaman geçiriyorum yeni bir veritabanı tasarlamak istiyorum veritabanı şeması bir denetim günlüğü tutmak yapayım nasıl düşündüğünü değişiklikleri.

Bazı sorular zaten bu konuda, ama ben aynı fikirde değilim istendi tüm senaryolar için en iyi tek bir yol daha var:

Ayrıca her yaklaşımın yanlısı ve eksilerini listesi için çalışır interesting article on Maintaining a Log of Database Changes Bu tökezledi. Çok iyi yazılmış ve ilginç bilgiler var, ama kararlarımı bile zor yaptı.

Benim sorum:Orada kullanabileceğim bir referans, belki bir kitap ya da bir karar gibi bir şey ben o ağacı karar vermek için bakın hangi yolu bazı temel gideyim giriş değişkenleri, gibi:

  • Veritabanı şema olgunluk
  • Günlükleri nasıl sorgulanacak
  • Olması ihtimali kayıtları yeniden oluşturmanız gerekir
  • Ne daha önemli: okuma veya yazma performansı
  • Oturum değerleri (string, sayı, lekeler) doğası
  • Depolama alanı mevcut

Bu bildiğim yaklaşımlar:

1. Ve değiştirilme tarihi ve kullanıcı oluşturulan sütun ekleyin

Tablo örneği:

  • ıd
  • value_1
  • value_2
  • value_3
  • created_date
  • modifed_date
  • created_by
  • modified_by

Büyük eksileri: Değişiklik Tarihi kaybederiz. Geri alma taahhüt sonra.

2. Ekle tablolar yalnızca

Table example:

  • ıd
  • value_1
  • value_2
  • value_3
  • dan
  • için
  • silinen (boolean)
  • kullanıcı

Güncel yabancı anahtarları tutmak için Nasıl? büyük eksileri: Büyük bir boşluk vardı

3. Her tablo için Ayrı bir geçmiş bir tablo oluşturmak

Tarih tablo örnek:

  • ıd
  • value_1
  • value_2
  • value_3
  • value_4
  • kullanıcı
  • silinen (boolean)
  • zaman damgası

Büyük eksileri: denetlenen tüm tabloları. yinelenen Gerekiyor Eğer şema değişiklikleri tüm kayıtlara geçirmek için çok gerekli olacak.

4. Tüm Tabloları Konsolide geçmiş bir Tablo oluşturmak

Tarih tablo örnek:

  • table_name
  • alan
  • kullanıcı
  • yeni_değer
  • silinen (boolean)
  • zaman damgası

Büyük eksileri: eğer kolayca gerekirse kayıtları (geri alma) yeniden mümkün Olacak? Yeni_değer sütun farklı sütun türleri destekleyebilir çok büyük bir dize olması gerekir.

CEVAP
7 Ocak 2010, PERŞEMBE


Birkaç wiki platformları tarafından kullanılan bir yöntem tanımlayıcı verileri ve denetim olduğunuz içerik ayırmaktır. Bu karmaşıklık ekler, ama sonunda bir denetim izi tam kayıtları, sadece listeleri alanları vardı düzenlenmiş sana sonra püre ver kullanıcı ne bir fikir eski kayıt benziyordu.

Eğer olsaydı yani, örneğin, bir masa aradıFırsatlarsatış fiyatları takip etmek için, aslında iki ayrı tablo oluşturmak:

Fırsatlar
Opportunities_Content(ya da onun gibi bir şey)

Fırsatlartablo kaydı benzersiz olarak tanımlamak için kullanmak istiyorum bilgi sahibi olacaklar ve yabancı anahtar ilişkileri için referans edersin birincil anahtar evi.Opportunities_Contentmasa kullanıcılar değiştirebilir ve kendisi için bir denetim izi tutmak istiyorsanız, tüm alanları tutun. Her kayıtİçeriktablo-tarafından değiştirilmiş ve değiştirilme tarihi kendi PK verilerini içerir.Fırsatlartablo geçerli sürüm kimler tarafından ana kayıt başlangıçta oluşturulduğunda hakkında bilgi ve başvuru vardır.

Burada basit bir örnek ScrewTurn's veri şemasına göre:

CREATE TABLE dbo.Page(  
    ID int PRIMARY KEY,  
    Name nvarchar(200) NOT NULL,  
    CreatedByName nvarchar(100) NOT NULL, 
    CurrentRevision int NOT NULL, 
    CreatedDateTime datetime NOT NULL

Ve içeriği:

CREATE TABLE dbo.PageContent(
    PageID int NOT NULL,
    Revision int NOT NULL,
    Title nvarchar(200) NOT NULL,
    User nvarchar(100) NOT NULL,
    LastModified datetime NOT NULL,
    Comment nvarchar(300) NULL,
    Content nvarchar(max) NOT NULL,
    Description nvarchar(200) NULL

Muhtemelen Pageıd ve Revizyon sağlanan Revizyon dan çok sütunlu bir anahtar kimlik türü idi içindekiler tablosunun PK yapmak istiyorum. Bu FK olarak Revize sütunu kullanırsınız. Daha sonra bu gibi Katılarak konsolide kaydı çeksin ..

SELECT * FROM Page
JOIN PageContent ON CurrentRevision = Revision AND ID = PageID

Bazı hatalar olabilir. bu benim biraz kafam karisti. Size alternatif bir model hakkında bir fikir vermiş olmalı.

Josh

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrea Lewis

    Andrea Lewis

    14 Mart 2013
  • Epic Tutorials for iPhone, iPad and iOS

    Epic Tutoria

    18 EYLÜL 2011
  • jbignacio

    jbignacio

    13 Mart 2006