هل هناك طريقة قاعدة بيانات مستقلة الحصول على بيانات تغير الإخطارات على المستوى الميداني؟
-
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