Nasıl hangi alanların hiç düzenlenebilir edilmiştir görüntülemek için bir denetim izi kullanmak istiyorsunuz?

3 Cevap php

Ben üzerinde çalışıyorum bir proje için, ben kayıtlarına yapılmış tüm değişikliklerin bir denetim izi oluşturmak istenmiştir. Bu benim bir denetim izi oluşturmak zorunda ilk kez, bu yüzden konuyla ilgili çok araştırma yapıyor.

Uygulama PHP / MSSQL geliştirilecek ve düşük trafik olacaktır.

Benim okuma, ben hemen hemen bir denetim tablo yapmaya karar verdik ve kullanım tablodaki değişiklikleri kaydetmek için tetikler.

Aşağıdaki gibi uygulamada ekran için iki şartları şunlardır:

  1. (Ben çok fazla bunu biliyorum) bir alanda yapılan tüm değişikliklerin bir günlüğünü görmek mümkün

  2. Uygulamasında bir kaydı görüntülerken, hiç değişti (ve muhtemelen son değişim tarihi gibi diğer bilgileri) olmuştur kayıtlarında sonraki herhangi bir alanda bir gösterge görmek mümkün.

Ürün # 2, şu anda bana keder veriyor biridir. Her alanda (veya çalıştırmak için yaş alacak çok uzun iç içe sorgu) için ayrı bir sorgu yapmadan, kimse bunu yapmak için en uygun yol için bir öneriniz var mı? (Ben alan şimdiye düzenlendi eğer boolean göstergesi hareket edecek, tablodaki her alan için ekstra bir "ModifiedFlag" alanını ekleyerek düşündüm, ama o yükü bir sürü gibi görünüyor.

3 Cevap

Ben mümkün olduğunca gerçek etki alanı bilgiden ayrı denetim bilgi tedavi edecektir.

Requirement #1: I think you will create additional audit tables to record the changes. Eric suggestion is a good one, creating the audit information using triggers in the SQL database. This way your application needs not be aware of the audit logic.

Veritabanı tetikler desteklemiyorsa, o zaman belki de sürmesi veya veritabanı katmanı çeşit kullanıyor. Bu aynı zamanda tekrar normal uygulama kodu ve denetim kod arasındaki herhangi bir bağımlılığı en aza indirmek, mantık bu tür koymak için iyi bir yer olurdu.

Requirement #2: As for showing the indicators: I would not create boolean fields in the table that stores the actual. (This would cause all sorts of dependencies to exist between your normal application code and your audit trail code.)

Ben formu görüntülemek için sorumlu kodu da saha düzeyinde denetim verilerini gösteren sorumlu olalım çalışacaktı. Bu sorgu yükü neden olur, ancak bu bilgilerin, bu ekstra katman görüntülenmesi için maliyetidir. Belki kolay erişim sağlayan denetim bilgilerine meta verileri ekleyerek veritabanı yükü en aza indirebilirsiniz.

Ben korumak Bazı büyük Enterprisy uygulama kabaca aşağıdaki yapıyı kullanır:

  • Tablodaki bir kaydın bir değişikliğe karşılık gelen bir değişiklik başlığı tablo.

Alanlar:

changeId, changeTable, changedPrimaryKey, userName, dateTime

- Bir değişiklik alan tablo değişti bir alana tekabül etmektedir.

Alanlar:

changeId, changeField, oldValue, NewValue

Sample content:

Başlığını Değiştir:

'1', 'BooksTable', '1852860138', 'AdamsD', '2009-07-01 15:30'

Ürün değiştirin:

'1', 'Title', 'The Hitchhiker's Guide to the Gaxaly', 'The Hitchhiker's Guide to the Galaxy'
'1', 'Author', 'Duglas Adasm', 'Douglas Adams'

Bu yapı denetim yollarının kolay görüntüleme yanı sıra istenen göstergelerini göstermek için kolay erişim hem de sağlar. Bir sorgu (iç üstbilgi ve Öğeleri tabloda katılmak) tek bir formda göstermek için tüm bilgileri almak için yeterli olacaktır. (Ya da gösterilen Kimliği adlı bir listesi var, hatta bir tablo)

Genel bir gerekliliktir işaretleme alanını değişti gibi biraz garip "kokuyor". Kayıtları uzun yaşamış ve zamanla değişebilir, o zaman sonunda tüm alanları böylece bayraklı almak eğiliminde olacaktır. Bu nedenle ben herhangi bir kullanıcı alanın başına göstergelerin basit bir dizi mantıklı olabilir merak ediyorum.

Bu düşünce şekli bana anlattığım gibi veriler, olduğu kaydedilen tüm değişiklikler ile gerçek bir denetim izi ihtiyaçları saklamak ve ilk gerçek meydan okuma bilgileri kullanıcıya nasıl sunulması gerektiğine karar olduğunu düşündürür.

Ben aggregateOfTheAuditTrail verilerin çeşit hazırlamak senin fikrin çok yararlı olması muhtemel olduğunu düşünüyorum. Soru olurdu yeterince kayıt başına tek bir bayrak? Kullanıcı birincil erişim listesi aracılığıyla ise o zaman belki de sadece daha detaya için değiştirilen kayıtları vurgulamak için yeterli. Hepsi geri kullanıcının gerçek ihtiyaçlarının ne - Ya da rekor değerinin son değişim tarihi, sadece son zamanlarda değişti kayıtları vurgulanır böylece. Ben zor kayıtları 3 yıl önce değişti geçen hafta değişti o kadar Intersting olduğunu hayal etmek bulabilirsiniz.

Sonra tek bir kayıt aşağı matkap geldiğinizde. Yine alan başına basit bir bayrak (gereksinimleri, etki olsa da) kullanışlı gelmiyor. Eğer öyleyse, o zaman senin özeti fikrin gayet iyi. Bence bir alana değişikliklerin bir sırası ve kayda genel değişiklikler dizisi, çok daha ilginç olmasıdır. Çalışan ödeme artış, çalışan taşındı departmanı, çalışanların terfi etti = üç ayrı iş ya da olayların biri vardı?

Basit bir bayrak daha fazla bir şey gerekiyorsa o zaman sadece kayıt için bütün (veya son) denetim izi dönmek ve sunmak için nasıl UI rakam verdi gerektiğini sanıyorum.

Yani, benim ilk düşünce: Bir özet kaydının yuvarlanma-bakım Bazı tür iyi bir fikir gibi geliyor. Gerekirse arka plan iş parçacığı veya toplu işlerde yapılmaktadır. Biz tam bir denetim izi her zaman gitmeden iş-yararlı olduğu Deisgn. Sonra detaylı analizler için biz izi bazı veya tüm alınmasına olanak sağlar.

Şahsen ben izleme kolaylaştırmak ve raporlama korkak olur.

Bir kullanıcı bir kayıt ekler her zaman, bu tablo için denetim tabloya bir ekleme yapmak

'I', 'Date', 'User', 'Data column1','Data Column2', etc.

Bu tablo yapısı (DataColumns miktarı re.) zamanla değişmez varsayarak

Güncellemeleri için, sadece takın

'U', 'Date', 'User', 'Data column1', etc

Kullanıcı sadece bir güncelleme Girilen ne yerleştirin.

Ardından, ekleme ve güncelleme sonra, şu olacaktır

'I','May 3 2009','BLT','person005','John','Smith','Marketing'
'U','May 4 2009','BLT','person005','John','Smith','Accounting'

Sonra, bu benzersiz bir kişi kaydının 'person005' kendi departmanı güncellenen bir ekleme ve güncelleştirme, sahip olduğunu göstermek için sadece kolay bir rapor bulunuyor.

Nedeniyle sistemin düşük kullanımına, daha karmaşık bir raporlama süreci performans etkisi gitmiyor sonra değişen basit bir eke sahip. Değişiklikleri geri raporlama yüksek yoğunlukta iş yükü gibi genellikle bir güncelleme olarak yapılmaz ise bu tarz hala bir düzenleme üzerinde ekstra bir yük az olduğu gibi, yüksek trafik sistemleri ile çalışacak, böylece sistem üzerinde düşmez.