كيف أصمم جدولا للإشعارات؟

الهادي عبد الله • منذ سنتين

السلام عليكم ورحمة الله وبركاته

كيف حالكم أعضاء عالم البرمجة؟

تقبل الله منا ومنكم صالح اﻷعمال

سؤالي بالضبط هو أنني أملك 3 جداول واحد للمستخدمين وآخر لصفحاتهم وآخر لمتابعي صفحات المستخدمين

كيف اصمم جدولا رابعا للإشعارات مع الاستعلام الصحيح؟

بحيث استطيع ارسال اشعار في حالة متابعة شخص لأحد صفحات اﻷعضاء أو يقوم باﻹعجاب أو التعليق على أحد منشوراتهم

ملاحظة يمكن للمستخدم الواحد أن يملك أكثر من صفحة

أعينوني وجزاكم الله خيرا

كلمات دليلية: ajax database mysql php

الإجابة الصحيحة

Abdullah Alhariri • منذ سنتين

وعليكم السلام ورحمة الله وبركاته

طرق تصميم جداول الاشعارات كثيرة ومتنوعة ولكن أجد أفضلها بالنسبة لقواعدالبيانات العلائقية ما يلي : 

Notifications Table
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)

Abdullah Alhariri • منذ سنتين
الإجابة الصحيحة
مميز

وعليكم السلام ورحمة الله وبركاته

طرق تصميم جداول الاشعارات كثيرة ومتنوعة ولكن أجد أفضلها بالنسبة لقواعدالبيانات العلائقية ما يلي : 

Notifications Table
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: على الرحب والسعة أخي الكريم سأجيب على سؤالك هذا بتعليق جديد بإذن الله

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

بنظري هذه أفضل طريقة لهذه الحالة فهي توفر علينا الكثير من الصفوف في جدول التنبيهات في قاعدة البيانات ولكن لا أدري هل هي الأفضل بالفعل 

وإذا كان هناك طريقة أفضل وعملية أكثر أتمنى أن يفيدنا الاخوان بها .

بالتوفيق إن شاء الله.

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !