Veritabanı - Veri Sürüm
Bir veritabanı içinde veri çeşitlemesi açısından benzeri bir kaç soru (this one) okudum.
Bahsedilen bazı öneriler hoşuma gitti. Uzun zamandır istiyordum (gerekli) Gözden Geçirme için benim tablo çok var ama hiç vaktim olmadı. Benim kemer altında sadece basit veritabanı işlemleri bir programcı olmak aslında bu yapıyor hakkında gitmek nasıl merak ediyordum.
SQL sözdizimi gerçek çözüm için sormuyorum. Sonunda kendime (ya da zamanı geldiğinde ÇOK post) bulurum. Sadece insanlar, Olası performans sorunları varsa, eğer sen olabilir yapmak hakkında 'revizyon kayıtlarını milyon. yüzlerce giderler nasıl olarak yorum yapmak istiyorum Ya da başka önerileriniz örneğe dayalı olduğu sürece.
Basit bir örnek vermiş:
Person
------------------------------------------------
ID UINT NOT NULL,
PersonID UINT NOT NULL,
Name VARCHAR(200) NOT NULL,
DOB DATE NOT NULL,
Email VARCHAR(100) NOT NULL
Audit
------------------------------------------------
ID UINT NOT NULL,
UserID UINT NOT NULL, -- Who
TableName VARCHAR(50) NOT NULL, -- What
OldRecID UINT NOT NULL, -- Where
NewRecID UINT NOT NULL,
AffectedOn DATE NOT NULL, -- When
Comment VARCHAR(500) NOT NULL -- Why
Eğer TableName bir dize ise başka bir tablo (İnsan gibi) Denetim tablo bağlantı olacağını nasıl emin değilim?
Ayrıca, üç GUI var varsayarak doldurmak için:
- Belirli bir kişi kimliği için tam bir rekor
- Tablo görünümünü tüm kişiler listesi (ıd)
- Görünümünü revize ile her kişi gösteren her kaydın altındaki bilgi (# kişi başı revizyonlar, Revizyon Tarihi, revizyon açıklamalar, vb.), en son sürümlerine göre emretti.
Başarmak için 1 ve 2, Kişi tablosu veya Denetim tablosunu sorgulamak için daha iyi olurdu?
3, sözde bir veritabanı uzmanı yalnızca tüm kayıtları almak ve yazılım aktaracaklardır işleme gerçekleştirmek için, ya da PersonİD ve Etkilenen tarihe göre grup? Bu sorguda genellikle işlenmiş ya da kaç.
CEVAP
Yıl içinde çeşitli denetim programları yaptım ve şu anda böyle bir şey uygulamak için gidiyorum:
Person
------------------------------------------------
ID UINT NOT NULL,
PersonID UINT NOT NULL,
Name VARCHAR(200) NOT NULL,
DOB DATE NOT NULL,
Email VARCHAR(100) NOT NULL
Person_History
------------------------------------------------
ID UINT NOT NULL,
PersonID UINT NOT NULL,
Name VARCHAR(200) NOT NULL,
DOB DATE NOT NULL,
Email VARCHAR(100) NOT NULL
AuditID UINT NOT NULL
Audit
------------------------------------------------
ID UINT NOT NULL,
UserID UINT NOT NULL, -- Who
AffectedOn DATE NOT NULL, -- When
Comment VARCHAR(500) NOT NULL -- Why
Mevcut kayıtları her zaman Person tablo. Eğer bir değişiklik olursa orada bir denetim kaydı oluşturulur ve eski rekor Person_History tablo (not KİMLİĞİNİ birden çok sürümü olabilir değiştirmek ve değil) kopyalanır
Denetim KİMLİĞİ eğer bu gibi bir denetim kaydı için birden fazla kayıt değişiklikleri bağlayabilirsiniz yani *_History tablolarda.
DÜZENLEME:< / ^ br . Eğer her temel tablo için ayrı bir geçmiş bir tablo var ve aynı masada eski tutun ve "" o zaman durum bayraklı kayıtları işaretlemek için kayıtlarda var. silinmiş kullanmak istemiyorsanız eğer. Bu sorunu mevcut kayıtları sorgularken gerçek bir acı - bunu yapmıştım.
MySQL veritabanı enlem / boylam saklar...
Hangi tarayıcıları veri URI ve hangi s...
Böyle Büyük Mükafat 4, Çekirdek Veri M...
Çevrimdışı depolama için Görüntü Veri ...
Nasıl veri kaybı olmadan SQL Server ve...