เป็นไปได้ไหมที่จะมีคอลัมน์แยกต่างหากในตารางตรวจสอบเพื่อจัดเก็บชื่อคอลัมน์เพื่อสะท้อนถึงสิ่งที่เปลี่ยนแปลงไป

แนวทางปฏิบัติที่ดีหรือไม่ที่จะจัดเก็บชื่อคอลัมน์เพื่อแสดงการเปลี่ยนแปลงที่เกิดขึ้นในข้อมูลในตารางหลักซึ่งนำไปสู่การกระตุ้นการตรวจสอบ

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');

ซึ่งจะส่งผลให้มีการแทรกบันทึกในตารางการตรวจสอบผ่านทริกเกอร์ และจะมีค่าว่างในคอลัมน์ aud_col_changed

ตอนนี้เมื่อฉันอัปเดตบันทึกเดียวกัน:-

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

ดังนั้น การตรวจสอบจะถูกสร้างขึ้นสำหรับการอัปเดตนี้ด้วย และตารางการตรวจสอบควรประกอบด้วยบันทึกอื่นและจะประกอบด้วยค่า 'tel_no' ในคอลัมน์ aud_col_changed

หากมีการเปลี่ยนแปลงหลายคอลัมน์พร้อมกัน ระบบจะคั่นด้วยเครื่องหมายจุลภาคในช่องเดียวกัน

หากนี่เป็นแนวทางที่ถูกต้อง คุณช่วยอธิบายวิธีการบรรลุเป้าหมายดังกล่าวได้ไหม

โปรดทราบว่าตารางที่ฉันพยายามใช้แนวทางนี้มีประมาณ 18 คอลัมน์จากทั้งหมด 6-7 คอลัมน์เป็น JSON


person Nik    schedule 08.10.2018    source แหล่งที่มา
comment
EventSourcing อาจเป็นทางออกที่ดีกว่าสำหรับกรณีการใช้งานของคุณ.... (การค้นคว้าข้อมูลค่อนข้างเป็นที่นิยม)   -  person Jaskaranbir Singh    schedule 08.10.2018
comment
ดูดี แต่คอลัมน์เนื้อหาในตารางกิจกรรมจะดูเหมือนขยะ เนื่องจากฉันมีตารางขนาดใหญ่ที่มีหลายคอลัมน์และมี 6-7 คอลัมน์เป็น JSON   -  person Nik    schedule 08.10.2018


คำตอบ (2)


วิธีการของคุณน่าจะใช้ได้ดี คุณควรระบุสิ่งที่คุณต้องการจะทำในตารางการตรวจสอบ

โดยส่วนตัวแล้วฉันอยากจะมีตารางที่มีตารางการตรวจสอบอย่างใดอย่างหนึ่งต่อไปนี้:

  • มีการเปลี่ยนแปลงหนึ่งแถวต่อคอลัมน์ โดยมีค่าเก่าและค่าใหม่
  • มีการเปลี่ยนแปลงหนึ่งแถวต่อ แถว โดยคอลัมน์ทั้งหมดปรากฏสองครั้ง ครั้งแรกสำหรับค่าเก่าและอีกครั้งสำหรับค่าใหม่

กล่าวอีกนัยหนึ่ง ฉันมักจะอยากเห็นทั้งคุณค่าเก่าและใหม่ร่วมกัน

วิธีแรกนั้นยุ่งยากเมื่อต้องจัดการกับคอลัมน์ที่มีประเภทต่างกัน อย่างที่สองนั้นยุ่งยากเมื่อคุณต้องการปรับเปลี่ยนโครงสร้างของตาราง

person Gordon Linoff    schedule 08.10.2018

ฉันค้นคว้าเพิ่มเติมและพบว่าหากเราต้องการจัดเก็บชื่อคอลัมน์ ข้อมูลนั้นจะต้องได้รับการอัปเดตผ่านฟังก์ชัน ในฟังก์ชัน เราจำเป็นต้องตรวจสอบแต่ละค่าที่ส่งผ่านด้วย NOT NULL หากดูเหมือนว่าจะไม่เป็นค่าว่าง เราจำเป็นต้องฮาร์ดโค้ดชื่อคอลัมน์และกำหนดให้กับตัวแปร หากพบค่าอื่นๆ ที่ไม่ใช่ NULL จะต้องเพิ่มชื่อคอลัมน์ที่ฮาร์ดโค้ดนั้นต่อท้ายตัวแปรหลักจนกว่าเราจะตรวจสอบค่าทั้งหมดที่ส่งผ่านในฟังก์ชันด้วย NOT NULL สิ่งนี้จะลดประสิทธิภาพของ DB ลงอย่างแน่นอน และทำให้มันทำงานหลังจากการอัพเดตทุกครั้งนั้นเป็นสิ่งที่ไม่เหมาะอย่างเห็นได้ชัด

ดังนั้น ฉันไม่ต้องการใช้คอลัมน์ audit_col_changed

person Nik    schedule 10.10.2018