كيف أربط الحدث بفترة زمنية دون تكراره عند الحدود؟

متقدمقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

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

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

مثال

SELECT e.id, p.id AS period_id
FROM events AS e
INNER JOIN periods AS p
  ON e.starts_at >= p.start_at
 AND e.starts_at < p.end_at;

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

باختصار: اجعل بداية الفترة مشمولة ونهايتها مستبعدة لمنع ازدواج المطابقة عند الحدود المشتركة بين الفترات المتجاورة.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

الفترات متجاورة وغير متداخلة. أي شرط يجعل الحدث عند نهاية فترة ينتمي إلى الفترة التالية فقط؟