كيف أصمم جدولا للإشعارات؟
السلام عليكم ورحمة الله وبركاته
كيف حالكم أعضاء عالم البرمجة؟
تقبل الله منا ومنكم صالح اﻷعمال
سؤالي بالضبط هو أنني أملك 3 جداول واحد للمستخدمين وآخر لصفحاتهم وآخر لمتابعي صفحات المستخدمين
كيف اصمم جدولا رابعا للإشعارات مع الاستعلام الصحيح؟
بحيث استطيع ارسال اشعار في حالة متابعة شخص لأحد صفحات اﻷعضاء أو يقوم باﻹعجاب أو التعليق على أحد منشوراتهم
ملاحظة يمكن للمستخدم الواحد أن يملك أكثر من صفحة
أعينوني وجزاكم الله خيرا
الإجابة الصحيحة
وعليكم السلام ورحمة الله وبركاته
طرق تصميم جداول الاشعارات كثيرة ومتنوعة ولكن أجد أفضلها بالنسبة لقواعدالبيانات العلائقية ما يلي :
ID | User_Id | Sender_Id | Page_Url | Message | Status | Date | Read_Date |
int | int | int | string | string | string | bool | TimeSpam | TimeSpam |
الجدول المقترح السابق يمثل مكونات جدول التنبيهات وأنواع بيانات كل عامود
بالنسبة لأعمدة الجدول الثلاث الأوائل أتوقع واضحة ولا تحتاج لأي شرح
Page_Url : تمثل رابط الصفحة التي وقع عليها الحدث (تعليق، إعجاب، متابعة).
Message : تمثل رسالة التنبيه مثال : قام أحد الأعضاء بالاعجاب بصفحتك أو قام أحد الأعضاء بمتابعة صفحتك.
Status : لها إحتمالين إما أن تكون حالة مشاهدة التنبيه وفي هذه الحالة تكون من نوع bool أو أن يكون التنبيه له أكثر من حالة مثل تم الرد و تمت المشاهدة وبهذه الحالة يكون من نوع string.
Date : وهو تاريخ التنبيه.
Read_Date : وهو تاريخ قراءة التنبيه.
ملاحظة هامة : إذا أردت أن يكون هناك تنبيهات مجمعة على سبيل المثال (يوجد لديك 3 تعليقات جديدة أو يوجد لديك 5 متابعين جدد) يمكن إضافة عامود آخر بإسم Type من نوع int يعبر عن نوع التنبيه
مثلاً (1 = إعجاب ، 2 = تعليق ، 3 = متابعة ) وهكذا.
بالنسبة للإستعلام بأبسط حالاته سوف يكون :
SELECT * FROM Notifications WHERE User_Id = 2 AND Status = 1;
أتمنى أن تكون قد إستفدت وإن كان هناك أي إستفسار آخر لا تتردد بطرحه
بالتوفيق إن شاء الله.
الإجابات (2)
وعليكم السلام ورحمة الله وبركاته
طرق تصميم جداول الاشعارات كثيرة ومتنوعة ولكن أجد أفضلها بالنسبة لقواعدالبيانات العلائقية ما يلي :
ID | User_Id | Sender_Id | Page_Url | Message | Status | Date | Read_Date |
int | int | int | string | string | string | bool | TimeSpam | TimeSpam |
الجدول المقترح السابق يمثل مكونات جدول التنبيهات وأنواع بيانات كل عامود
بالنسبة لأعمدة الجدول الثلاث الأوائل أتوقع واضحة ولا تحتاج لأي شرح
Page_Url : تمثل رابط الصفحة التي وقع عليها الحدث (تعليق، إعجاب، متابعة).
Message : تمثل رسالة التنبيه مثال : قام أحد الأعضاء بالاعجاب بصفحتك أو قام أحد الأعضاء بمتابعة صفحتك.
Status : لها إحتمالين إما أن تكون حالة مشاهدة التنبيه وفي هذه الحالة تكون من نوع bool أو أن يكون التنبيه له أكثر من حالة مثل تم الرد و تمت المشاهدة وبهذه الحالة يكون من نوع string.
Date : وهو تاريخ التنبيه.
Read_Date : وهو تاريخ قراءة التنبيه.
ملاحظة هامة : إذا أردت أن يكون هناك تنبيهات مجمعة على سبيل المثال (يوجد لديك 3 تعليقات جديدة أو يوجد لديك 5 متابعين جدد) يمكن إضافة عامود آخر بإسم Type من نوع int يعبر عن نوع التنبيه
مثلاً (1 = إعجاب ، 2 = تعليق ، 3 = متابعة ) وهكذا.
بالنسبة للإستعلام بأبسط حالاته سوف يكون :
SELECT * FROM Notifications WHERE User_Id = 2 AND Status = 1;
أتمنى أن تكون قد إستفدت وإن كان هناك أي إستفسار آخر لا تتردد بطرحه
بالتوفيق إن شاء الله.
الهادي عبد الله: شكرا لجوابك أخي وجزاك الله خيرا، بقي لي شيء واحد وهو أنه فرضا لو سجّل عندي 1000 مستخدم ، وشخص منهم يتابعه 500 متابع ، وعندما ينشر في صفحته فكيف يصل الاشعار إلى 500 متابع ؟
Abdullah Alhariri: على الرحب والسعة أخي الكريم سأجيب على سؤالك هذا بتعليق جديد بإذن الله
بما أنه لديك جدول لمتابعي صفحات المستخدمين أتوقع أنه يحتوي على الحقلين (Follower_ID , Page_ID)
يضاف للجدول حقل جديد بإسم Updated ويكون من النوع bool وتكون قيمته الافتراضية false وبحالة قام المستخدم صاحب الصفحة بإضافة منشور جديد تصبح قيمته true لجميع المتابعين
وعندما يفتح المتابع الصفحة تعيد القيمة إلى false.
سيكون الجدول كما أتوقع هكذا :
Page_ID | Follower_ID | Updated |
15 | 3 | 1 |
15 | 4 | 0 |
والاستعلام التالي يعيد لنا جميع الصفحات التي حصل عليها تعديلات ولم يقم المتابع بفتح الصفحة بعد:
SELECT * FROM Page_Followers WHERE Follower_ID = 3 AND Updated = 1;
عندها إذا كانت نتيجة الاستعلام لا تساوي null نقوم بإظهار التنبيهات له وعند دخوله للصفحة أو الضغط على الاشعار نعيد القيمة إلى false
بنظري هذه أفضل طريقة لهذه الحالة فهي توفر علينا الكثير من الصفوف في جدول التنبيهات في قاعدة البيانات ولكن لا أدري هل هي الأفضل بالفعل
وإذا كان هناك طريقة أفضل وعملية أكثر أتمنى أن يفيدنا الاخوان بها .
بالتوفيق إن شاء الله.
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !