مقدمة

هذه المقالة موجهة لمطوري قواعد البيانات.

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

المسألة

تتعلق المسألة بحساب صلاحيات المستخدمين، وذلك بناء على قيم الأقنعة (Masks) المرتبطة بالمستخدم.

تتعامل هذه المسألة مع جدولين الأول هو جدول المستخدمين (Users) والثاني هو جدول أقنعة المستخدمين (UserMasks)، ويقابل كل سطر في جدول المستخدمين مجموعة أسطر في جدول أقنعة المستخدمين تمثل الأقنعة التابعة له، والمطلوب حساب قيمة القناع الذي يمثل كافة قيم هذه الأقنعة على اعتبار أن عملية حساب هذه القيمة تتم بإجراء العملية “أو” (“|”) بين كافة قيم الأقنعة لكل مستخدم.

لأنشاء الجداول يمكنك استخدام الملف CREATE.sql ولشحن الجداول بالقيم يمكنك استخدام الملف Populate.sql.

الحل

حل المسألة يجب أن يحتوي الأعمدة user_id و user_name و user_mask وذلك وفق الشروط التالية:

  • يجب أن تكون النتيجة مرتبة حسب رقم المستخدم user_id.
  • يجب أن تمثل القيمة user_mask قيمة كل الأقنعة التابعة للمستخدم والموجودة في الجدول UserMasks، وذلك بتطبيق العملية “أو” بين كافة القيم.
  • يجب أن تحتوي النتيجة على كل المستخدمين الموجودين في جدول المستخدمين Users.
  • يجب أن تحوي النتيجة على سطر واحد لكل مستخدم.
  • يجب أن يرسل الحل كتعليق على هذه المقالة، والموعد الآخير لإرسال الحلول هو يوم الثلاثاء 23 شباط 2010.

سيتم دراسة الحلول ومناقشتها في مقالة أخرى.

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