Cara terbaik untuk mendesain database dan tabel untuk menyimpan catatan perubahan?

16

Saya perlu mengatur fitur sejarah pada proyek untuk melacak perubahan sebelumnya.

Katakanlah saya punya dua tabel sekarang:

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

Contoh: Saya memiliki baris dalam catatan dan pengguna ingin mengubah pesan. Saya ingin melacak statusnya sebelum perubahan dan setelah perubahan.

Apa yang akan menjadi pendekatan terbaik untuk menyiapkan kolom di masing-masing tabel ini yang akan mengatakan jika suatu item "lama." 0 jika aktif ATAU 1 jika dihapus / tidak terlihat.

Saya juga ingin membuat AUDIT TRAILtabel history ( ) yang berisi idstatus sebelumnya, idkondisi baru, tabel mana yang terkait dengan id ini?

Schwarz
sumber
1
Anda bisa menggunakan pemicu basis data untuk membuat tabel audit .
Kin Shah

Jawaban:

5

Silakan lihat

http://www.codeproject.com/Articles/105768/Audit-Trail-Tracing-Data-Changes-in-Database

Ini adalah bacaan yang sangat bagus tentang pendekatan untuk membuat Jejak Audit dalam desain database Anda. Jalur audit diperlukan untuk implementasi database. Anda harus selalu dapat melihat tindakan pengguna basis data di dalam sistem.

Kita dapat melacak baris mana yang diubah ketika dalam sistem PTA (Point in Time) kami dengan menambahkan beberapa kolom PTA (point in time) standar ke semua tabel minat PTA.

Saya menyarankan yang berikut ini:

DateCreated  the actual date on which the given row was inserted.
DateEffective  the date on which the given row became effective.
DateEnd  the date on which the given row ceased to be effective.
DateReplaced  the date on which the given row was replaced by another row.
OperatorCode  the unique identifier of the person (or system) that created the row.
Menggertak
sumber
apa cara terbaik untuk menerapkan 'Solusi No. 2: Tabel Penelusuran Data Khusus' untuk aplikasi OLTP.
AA.SC
Perusahaan tempat saya bekerja saat ini menggunakan banyak skema, satu khusus untuk jejak Audit. Tabel audit benar-benar desain yang sangat sederhana ketika menggunakan Solusi # 2 (yang persis apa yang kami gunakan di sini di tempat kerja) Hancurkan tugas yang berbeda (Tabel inventaris diperbarui, informasi Pelanggan diperbarui atau dihapus, Kredit diberikan kepada pelanggan, dll.) Dan buat tabel audit berdasarkan tindakan umum yang dapat dilakukan pengguna. Apakah itu menjawab pertanyaan Anda sehubungan dengan menerapkan solusi 2 ke db Anda, jika tidak tolong jelaskan. Terima kasih!
Hector
Sebenarnya kami sudah mengaudit data dengan pendekatan pertama menggunakan Tabel Audit, tetapi data audit menjadi sangat besar dan sekarang kami ingin mengkonversi pendekatan kami dengan hanya menangkap data terhadap kolom yang diubah. Pertanyaan saya adalah bagaimana saya bisa mencapai pendekatan ini? apa cara terbaik untuk melacak kolom tabel mana yang diubah? .. jika sebuah tabel memiliki lebih dari 20 kolom salah satunya adalah dengan Teks Jenis Data.
AA.SC
10

Saat mendesain kemampuan versi dalam data Anda, ada beberapa persyaratan minimal (saya pikir):

  • Setiap versi data harus mandiri dan independen dari versi lain. Ini berarti tidak ada bendera atau indikator lain yang menunjukkan versi saat ini dan yang merupakan "riwayat". Ini juga berarti memperbarui entitas berarti memasukkan versi baru saja - tidak perlu memperbarui versi sebelumnya.
  • Hindari apa yang saya sebut Row Spanning Dependency. Di situlah satu bidang (End_Date) dari suatu baris harus tetap selaras dengan bidang lain (Start_Date) dari baris yang berbeda. Ini membuat bekerja dengan data lebih sulit dan merupakan sumber anomali yang sangat baik.
  • Versi saat ini dan semua versi sebelumnya harus berada di tabel yang sama. Ini memungkinkan untuk menggunakan kueri yang sama untuk melihat data masa lalu "pada" tanggal tertentu dan untuk melihat data saat ini.
  • Kunci asing untuk data yang telah diversi harus bekerja sama dengan data normal (tidak berversi).
  • Desainnya harus sangat sederhana atau dipahami secara universal sehingga kurva pembelajaran untuk pengembang baru diminimalkan.

Inilah slide presentasi yang telah saya buat beberapa kali di pameran teknologi. Ini mencakup bagaimana semua hal di atas dapat dilakukan. Dan di sini ada dokumen yang lebih detail. Saya harus minta maaf untuk dokumen - ini adalah pekerjaan yang sedang berjalan dan tidak semua bagian selesai. Tetapi itu harus memberi Anda semua informasi yang diperlukan untuk mengimplementasikan apa pun dari versi sederhana hingga akses dua waktu penuh.

TommCatt
sumber
1
Poin yang sangat bagus! Namun, saya tidak begitu mengerti hal ini This means no flag or other indicator showing which is the current version and which are "history.", jika tidak ada bendera atau indikator, bagaimana kita membedakan versi saat ini dari versi sejarah? Terutama berdasarkan poin ketiga Anda yang Anda sarankan mereka berada di tabel yang sama.
GMsoF
Presentasi menunjukkan contoh desain, termasuk kueri untuk membaca data saat ini dan / atau masa lalu dari tabel. Jika terlihat cukup menarik untuk dilihat lebih dalam, dokumen tersebut berisi lebih banyak detail.
TommCatt