Daha iyi bir günlük tasarım ya da bazı SQL büyü?

1 Cevap php

Ben yazmadım bazı eski günlük kodu değiştirme ve bunu ne düşündüğünüzü merak derin diz değilim. Bu gibi mesaj günlükleri MySQL PHP ile yazılmış bir olay kaydedici olduğunu:

Sarah added a user, slick101
Mike deleted a user, slick101
Bob edited a service, Payment

Böylece gibi kırık:

Sarah [user_id] added a user [message], slick101 [reference_id, reference_table_name]

Böyle bir tabloya:

log
---
id
user_id
reference_id
reference_table_name
message

Yukarıdaki örnekte mesajlarında "Bob" ve "Ödeme" diğer masalara Kimliği ait değil, gerçek isimler olduğunu unutmayın. Bir katılmak adlarını almak için gereklidir.

Bu gibi görünüyor "referans _ masa _ ismi" sadece referans _ kimliği saklı olduğundan, doğru tabloda uygun isimleri bulmak içindir. Bu muhtemelen bir şekilde i reference_table_name saklanan bir tablo adı katılabilir eğer iyi olabilir, gibi pek olur:

select * from log l
join {{reference_table_name}} r on r.id = l.reference_id

Ben o bu masa düzeni ile nereye gittiğimi görüyorum - yerine istatistikleri için kimlikleri var ne kadar iyi bir tek sütuna (metin ayrıştırma gerektirir hangi) tüm mesajı saklamak. Şimdi ben merak ediyorum ..

Is there a better way or is it possible to do the make-believe join somehow?

Şerefe

1 Cevap

Modellemeye dayalı katılmak, bir iki aşamalı süreç bakıyor olurduk almak için:

  1. Belirli bir mesajın için LOG gelen tablo adını al
  2. Bir dize olarak gerçek sorgu oluşturarak dinamik SQL kullanın. IE:

    + TableName + "r.id = l.reference_id ON r" ve "l SEÇ. * LOG l DAN JOIN"

Neyin silindiğini görmek için katılmak için kayıt yok çünkü değer bir çok giriş silmeleri için orada değil.

How much history does the application need?

Eğer geçmişte bir değer ay / yıl ne kimin yaptığını bilmek gerekiyor mu? Kayıtları gerekiyorsa, onlar arşivlenir & edilmelidir tablosundan kaldırılır. Tüm geçmişini ihtiyacınız yoksa, her masada aşağıdaki denetim sütunları kullanarak düşünün:

  • ENTRY_USERID, NOT NULL
  • ENTRY_TIMESTAMP, TARİH, NOT NULL
  • UPDATE_USERID, NOT NULL
  • UPDATE_TIMESTAMP, TARİH, NOT NULL

Bu sütunlar rekor yarattı ve kim olduğunu bilmek için izin son başarıyla ne zaman güncellenir ve ne zaman ve kim. Ben vaka bazında bir durumda denetim tablo oluşturmak istiyorum, sadece kullanıcının ihtiyacı ne işlevsellik bağlıdır.