Bolehkah memiliki kolom terpisah di tabel Audit untuk menyimpan nama kolom guna mencerminkan perubahan yang dilakukan

Apakah merupakan praktik yang baik untuk menyimpan nama kolom untuk mewakili perubahan apa saja yang dibuat pada data di tabel induk yang menyebabkan memicu audit.

Ex :-

create table employee
(
emp_id character varying(10),
fname character varying(30),
lname character varying(30),
tel_no character varying(15)
);

create table aud_employee
(
emp_id character varying(10),
fname character varying(30),
lname character varying(30),
tel_no character varying(15)
aud_col_changed character varying(100)
);

--

insert into employee values('215','Mark','Cooper','222-458-254');

Ini juga akan mengakibatkan penyisipan catatan dalam tabel audit melalui pemicu dan akan memiliki nilai nol di kolom aud_col_changed.

Sekarang ketika saya memperbarui catatan yang sama :-

update employee set tel_no='255-458-254' where emp_id='215';

Jadi, audit juga akan dibuat untuk pembaruan ini dan tabel audit sekarang harus berisi catatan lain dan akan berisi nilai 'tel_no' di kolom aud_col_changed.

Jika ada beberapa kolom yang diubah sekaligus, kolom tersebut akan dipisahkan dengan koma di bidang yang sama.

Jika ini adalah pendekatan yang tepat, bisakah Anda menjelaskan cara mencapainya?

Harap diperhatikan bahwa tabel tempat saya mencoba menerapkan pendekatan ini memiliki sekitar 18 kolom dan 6-7 kolomnya adalah JSON.


person Nik    schedule 08.10.2018    source sumber
comment
EventSourcing mungkin merupakan solusi yang lebih baik untuk kasus penggunaan Anda.... (meneliti sekitar, ini cukup populer)   -  person Jaskaranbir Singh    schedule 08.10.2018
comment
Kelihatannya bagus tetapi kolom isi di tabel acara akan terlihat seperti sampah karena saya memiliki tabel besar dengan banyak kolom dan dengan 6-7 kolom sebagai JSON.   -  person Nik    schedule 08.10.2018


Jawaban (2)


Metode Anda mungkin baik-baik saja -- Anda harus menentukan apa yang ingin Anda lakukan dengan tabel audit.

Secara pribadi, saya lebih suka memiliki tabel yang tabel auditnya adalah salah satu dari berikut ini:

  • Satu baris per kolom diubah, dengan nilai lama dan nilai baru.
  • Satu baris per baris diubah, dengan semua kolom muncul dua kali, satu kali untuk nilai lama dan satu kali untuk nilai baru.

Dengan kata lain, saya biasanya ingin melihat nilai-nilai lama dan baru secara bersamaan.

Cara pertama rumit ketika berhadapan dengan kolom yang memiliki tipe berbeda. Yang kedua rumit ketika Anda ingin mengubah struktur tabel.

person Gordon Linoff    schedule 08.10.2018

Saya melakukan penelitian lebih lanjut dan saya menemukan bahwa jika kita ingin menyimpan nama kolom maka data tersebut perlu diperbarui melalui fungsi. Secara fungsinya kita perlu memeriksa setiap nilai yang diteruskan dengan NOT NULL. Jika tampaknya bukan nol maka kita perlu mengkodekan nama kolom dengan keras dan menetapkannya ke variabel. Jika ditemukan lebih banyak nilai yang BUKAN NULL, maka nama kolom berkode keras itu perlu ditambahkan ke variabel utama sampai kita memeriksa semua nilai yang diteruskan dalam fungsi dengan NOT NULL. Ini pasti akan menurunkan kinerja DB dan menjalankannya setelah setiap pembaruan jelas tidak disukai.

Oleh karena itu, saya tidak akan memilih menggunakan kolom audit_col_changed.

person Nik    schedule 10.10.2018