تاريخ نطاقات في وجهات النظر - هل هذا طبيعي ؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

لقد بدأت مؤخرا العمل في شركة مع هائلة "enterprisey" التطبيق.في آخر عمل قمت بتصميم قاعدة البيانات ولكن هنا لدينا قاعدة بيانات كاملة قسم العمارة أنني لست جزءا من.

من أغرب الأشياء في قاعدة البيانات الخاصة بهم هو أن لديهم مجموعة من وجهات النظر التي بدلا من أن المستخدم توفير نطاقات تاريخ يريدون رؤيته على الانضمام مع (العالمي مؤقتة) الجدول "TMP_PARM_RANG" مع بداية ونهاية التاريخ.في كل مرة التطبيق الرئيسي يبدأ تجهيز الطلب ، أول شيء يفعل ذلك "DELETE FROM TMP_PARM_RANG"؛ثم تضاف إلى ذلك.

يبدو أن هذه الطريقة الغريبة من الأمور, و لا آمن جدا, ولكن الجميع هنا بخير مع ذلك.هل هذا طبيعي أم هو عدم الارتياح صالحة ؟

التحديث أود أن أذكر أن استخدام المعاملات لكل عميل أقفال, لذلك هو حراسة ضد معظم مشاكل التزامن.أيضا ، هناك العشرات إن لم يكن المئات من الآراء التي تعتمد جميعها على TMP_PARM_RANG.

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

المحلول

لا أفهم هذا بشكل صحيح ؟

هناك وجهة نظر من هذا القبيل:

SELECT * FROM some_table, tmp_parm_rang
  WHERE some_table.date_column BETWEEN tmp_parm_rang.start_date AND tmp_parm_rang.end_date;

ثم في الواجهة المستخدم المدخلات موعد نطاق التطبيق التالية:

  1. حذف كافة الصفوف الموجودة من TMP_PARM_RANG
  2. إدراج صف جديد في TMP_PARM_RANG مع المستخدم القيم
  3. يختار جميع الصفوف من وجهة نظر

وأتساءل عما إذا كانت التغييرات إلى TMP_PARM_RANG يتم الالتزام بها أو التراجع ، وإذا كان الأمر كذلك متى ؟ هو جدول مؤقت أو العادي الطاولة ؟ في الأساس اعتمادا على إجابات لهذه الأسئلة ، عملية قد لا تكون آمنة للمستخدمين متعددة لتنفيذ بالتوازي.يأمل المرء أنه إذا كانت هذه هي الحالة سيكون لديهم بالفعل اكتشفت أن والتصدي لها, لكن من يعلم ؟

حتى لو تم ذلك في الموضوع-طريقة آمنة ، مما يجعل التغييرات إلى قاعدة بيانات بسيطة عمليات الاستعلام لا يجعل الكثير من معانيها.هذه حذف وإدراج تولد الإعادة/التراجع (أو ما يعادلها في غير قاعدة بيانات أوراكل) التي لا لزوم لها تماما.

بسيطة وأكثر طبيعية من تحقيق نفس الهدف سيكون تنفيذ هذا الاستعلام ملزمة المستخدم المدخلات إلى استعلام معلمات:

SELECT * FROM some_table WHERE some_table.date_column BETWEEN ? AND ?;

نصائح أخرى

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

يجب أن يكون هناك بعض الأعمال سبب هذا الجدول.رأيت وجهات النظر مع مواعيد ضمنية التي كانت في الواقع partioned عرض و كانوا يستخدمون التواريخ مثل partioning المجال.رأيت أيضا الانضمام على طاولة مثل عند التعامل مع النهار إنقاذ مرات تصور مفاده أن عاد جميع الأنشطة التي وقعت أثناء التوقيت الصيفي.و لا شيء من هذه الأشياء أبدا حذف إدراج في الجدول...هذا مجرد غريب

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

شخصيا, أعتقد أنه سيكون غريب جدا التكرار.و من ما تقوله اثنين من أساليب الدعوة العملية في نفس الوقت يمكن أن تكون مثيرة جدا للاهتمام.

عادة نطاقات تاريخ تتم المرشحات في الرأي ، وليس مدفوعا خارج القيم المخزنة في الجداول الأخرى.

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

أعتقد أنه سيكون من السماح لهم دعم نطاقات متعددة.على سبيل المثال ، يمكن أن عودة جميع التواريخ بين 1/1/2008 و 1/1/2009 و 1/1/2006 و 1/1/2007 مقارنة 2006 البيانات إلى بيانات عام 2008.لا يمكن أن تفعل ذلك مع زوج واحد من ملزمة المعلمات.أيضا, أنا لا أعرف كيف أوراكل يفعل الاستعلام خطة التخزين المؤقت للآراء ، ولكن ربما قد تفعل شيئا مع ذلك ؟ مع الأعمدة تاريخ فحصها كجزء من عرض الخادم ذاكرة التخزين المؤقت الخطة التي يفترض دائما التواريخ سيتم التحقق.

مجرد رمي بعض التخمينات هنا :)

كما كتبت:

أود أن أذكر أن يستخدمونها المعاملات لكل عميل أقفال ، لذلك فمن حراسة ضد معظم التزامن المشاكل.

في حين أنه قد الحرس ضد اتساق البيانات المشاكل بسبب التزامن يؤلمني عندما يتعلق الأمر إلى مشاكل في الأداء بسبب التزامن.

كما أنها تضيف واحد في التطبيق لتوليد المقبل فريدة من نوعها قيمة المفتاح الأساسي?

يبدو أن مفهوم الدولة المشتركة يتملص هؤلاء الناس, أو سبب مشترك الدولة بعيد المنال.

هذا يبدو غريبا جدا خوارزمية لي.أتساءل كيف يتعامل مع التزامن - هو ملفوفة في المعاملة ؟

يبدو لي أن أحدهم لم يكن متأكد من كيفية كتابة جملة WHERE.

آراء ربما تستخدم الجداول temp.في SQL Server يمكننا استخدام متغير الجدول أو الجدول المؤقت (# / ##) لهذا الغرض.على الرغم من أن إنشاء وجهات النظر لا ينصح بها الخبراء ، لقد خلق الكثير من تلك SSRS المشاريع لأن الجداول أنا أعمل على عدم الإشارة إلى واحد آخر (لا FK ، على محمل الجد!).علي أن الحل أوجه القصور في تصميم قاعدة البيانات ؛ لهذا السبب أنا باستخدام آراء الكثير.

مع جدول مؤقت GTT نهج لكم التعليق يتم استخدامه هنا ، فإن هذه الطريقة بالتأكيد آمنة فيما يتعلق نظام متعدد المستخدمين لذلك لا مشكلة هناك.إذا كان هذا هو Oracle ثم كنت ترغب في التحقق من أن النظام إما باستخدام مستوى مناسب من ديناميكية أخذ العينات بحيث GTT انضم بشكل مناسب, أو دعوة إلى DBMS_STATS إلى تقديم إحصاءات عن GTT.

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