سؤال

وكيف كنت تمثل الزمنية كثير لكثير العلاقة في SQL؟ في ظل ظروف غير والزمانية لأحد أن استخدام الجدول تقاطع (ويعرف أيضا باسم رابط / جسر / خريطة) للاتصال الجانبين.

هل مضيفا تتبع الزمني بهذه البساطة بما في ذلك ValidStart وValidEnd الأعمدة على الطاولة تقاطع؟ إذا كنت قد فعلت ذلك، ما هي القضايا (إن وجدت) هل واجهت؟ هل هناك طريقة أفضل لتتبع التغيرات على مر الزمن في هذا النوع من العلاقة؟

وإذا كان يساعد على الإطلاق، في حالتي أنا على وجه التحديد باستخدام SQL 2008 والبيانات الزمني ليست بين الصدغين كما أنا فقط تتبع وقت صالح.

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

المحلول

وأنا أعمل على مشروع (لعدة سنوات الآن) يستخدم كل البيانات الزمانية والزمانية علاقات كثيرة لكثير. يحتوي كل جدول ValidFrom وValidUntil الأعمدة (تواريخ تخزين فقط).

أولا عليك أن تحدد دلالات الأعمدة * صالحة، أي ما إذا كانت ValidUntil يتم تضمين أو استبعادها من نطاق الصلاحية. تحتاج أيضا إلى تحديد ما إذا كان مواعيد NULL صالحة وما هو معناها.

التالي كنت في حاجة الى اثنين من الوظائف، مثل dbo.Overlaps2 () وdbo.Overlaps3 () التي تتلقى 2 و 3 نطاقات الزمنية على التوالي، والعودة 1 إذا تداخل الفترات الزمنية و0 خلاف ذلك.

وعلاوة على ذلك، ويعرف وجهات النظر للكثير لكثير العلاقات مع dbo.Overlap3 (...) = 1.

وهناك نقطة أخرى هي أن يكون مجموعة من الوظائف التي تحسب مدى صحة فعالة بناء على تواريخ في 2 أو 3 الجداول ذات الصلة.

ومؤخرا كان لي لإضافة وظائف للسماح للمستخدم لعرض جميع البيانات المتاحة، أو بيانات صالحة حاليا فقط. I حفظ هذا الإعداد في جدول المستخدمين، ربط SPID للمستخدم عند فتح اتصال، وتصفية السجلات في مجموعة أخرى من وجهات النظر.

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