كيفية تعقب التغييرات في سجل يمتد عبر جداول متعددة

dba.stackexchange https://dba.stackexchange.com/questions/106587

سؤال

أواجه التحدي المتمثل في تصميم قاعدة بيانات جديدة باستخدام نظام RDBMS، Oracle، على وجه الدقة.سيكون هناك في قاعدة البيانات هذه سجل/مستند واحد محدد قد يمتد إلى جداول متعددة.

مع أقل قدر ممكن من التكرار، أريد متابعة التغييرات التي تم إجراؤها على هذا السجل، وتقديم طريقة بسيطة لإنشاء نسخ معدلة من هذا السجل.

لا أريد أ تاريخ الجدول الذي سيلخص التغييرات في النص، لأنني أريد أن أكون قادرًا على جلبه document x بالضبط الطريقة التي نظرت إليها time t.لكنني لا أريد الحصول على نسخة كاملة لكل إدخال في التاريخ أيضًا.

هناك أفضل الممارسات أو الأنماط كيفية تحقيق ذلك؟

قد يكون لدي فكرة عن كيفية حل هذه المشكلة باستخدام محاكاة الإستراتيجية git, لكني أردت بعض الآراء أولاً قبل أن أمضي في هذا الطريق.

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

المحلول

توجد في Oracle 12c على وجه التحديد ميزة جديدة تسمى "استعلامات الفلاش باك المؤقتة" التي تخدم هذا الغرض بالضبط.(تتوفر ميزات مماثلة في قواعد البيانات الأخرى:DB2، SQL Server، Vertica على سبيل المثال لا الحصر.)

لتمكين الاستعلامات المؤقتة، يمكنك:

  1. تأكد من أن كل جدول من الجداول التي تمثل وثيقتك يحتوي على زوج من التواريخ تشير إلى تاريخ البدء والانتهاء (الوقت) عندما كان سجل معين صالحًا (نشطًا)، و
  2. احتفظ بالسجلات التاريخية من خلال عدم تحديثها في مكانها بل إدراج إصدارات جديدة من السجلات، وتحديث تواريخ انتهاء السجلات التاريخية فقط.

ستتمكن بعد ذلك من إصدار استعلامات مقابل جداولك التي تبدو متشابهة إلى حد كبير SELECT whatever FROM mytable AS OF some_date, ، والتي من شأنها إرجاع السجلات التي كانت نشطة في التاريخ المحدد.

يمكنك قراءة وصف تفصيلي هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى dba.stackexchange
scroll top