هل هناك طريقة قاعدة بيانات مستقلة الحصول على بيانات تغير الإخطارات على المستوى الميداني؟

StackOverflow https://stackoverflow.com/questions/1221106

  •  10-07-2019
  •  | 
  •  

سؤال

وحاليا، تستخدم SQL Server 2005، واستطلاع على "ويندوز الأحداث" قاعدة البيانات لتحديد التغييرات في جدول يسمى WINDOWS_EVENTS، الذي يحتوي على حقل الطابع الزمني. وبالنظر إلى الطابع الزمني يمكنني تحديد ما إذا كان تغيير صف واحد، ولكن لم يغير ما الميدانية في هذا الصف.

هل هناك بعض العامة (أي قاعدة بيانات طريقة مستقلة) للكشف عن تغيرات المستوى الميداني؟ (ولست بحاجة أن تكون عامة، لأنه ليس هناك قول ما قاعدة البيانات سوف تستخدم العملاء، لذلك أنا لا أريد أن استخدام خدمات الإعلام أو غيرها من التكنولوجيا SQL خادم محددة. أتمكن من استخدام أي حل، .NET، جافا أو أي لغة أخرى إذا كان هذا يساعدني على حل مشكلتي.)

هل كانت مفيدة؟

المحلول

أولا، أود أن أوصي تغيير هيكل الجدول الخاص بك من شيء من هذا القبيل:

id      field1   field2   field3   field4   timestamp

وإلى شيء من هذا القبيل:

Table 1
-------
id     fieldKey    value    timestamp
1      1           42       12:03am
2      3           'Cow'    1:45am
3      2           'Moo'    2:33am
4      4           99       3:59am

Table 2
-------
fieldKey     fieldLabel
1            Field One
2            Field Two
3            Event One
4            Event Two

وثانيا، يمكنك تحقيق ما تريد عن طريق نسخ القيمة القديمة أو حساب تجزئة قيم الحقول (للحقول طويلة) وتخزينها في حقل آخر (oldField1، oldField2، الخ) جنبا إلى جنب مع الطابع الزمني، ثم استطلاع الجدول. وأعتقد أن جميع قواعد البيانات لديها وظيفة التجزئة، مثل SHA1 ( 'XYZ') أو MD5 ( 'اي بي سي')، على الرغم من أنه قد يكون لها اسم مختلف قليلا في كل واحد.

وبعد ذلك عند استطلاع الجدول لإجراء تغييرات، ترى الصف الذي لم يتغير، ويمكنك القيام به حقل مقارنة ميدانية لمعرفة المجال الذي قد تغير. لذلك كنت مقارنة field1 إلى oldField1، field2 إلى oldField2، field3 إلى oldField3 وغيرها للحصول النقط، هل يمكن مقارنة SHA1 (field4) لoldField4).

وإنشاء الزناد الإجراء المخزن لنسخ الحقول عند تحديث الطابع الزمني.

وهناك حل آخر هو لإنشاء جدول سجل تغيير البيانات التي فقط مخازن التغييرات. سيتم إدخاله عبر إجراء الزناد المخزنة، وسيبدو هذا

id    tableName       rowKey    fieldName     oldValue     newValue     timestamp
1     WINDOWS_EVENTS  42        event1        stable       crash        4:44am
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top