मैं एसई और अन्य जगहों पर एक अधिसूचना प्रणाली का निर्माण करने का तरीका देख रहा हूं और खुद को उस समाधान के लिए तैयार पाया जो यहां स्वीकृत उत्तर है: /programming/9735578/building-a-notification-system जो उपयोग करता है यह संरचना:
╔═════════════╗ ╔═══════════════════╗ ╔════════════════════╗
║notification ║ ║notification_object║ ║notification_change ║
╟─────────────╢ ╟───────────────────╢ ╟────────────────────╢
║ID ║—1:n—→║ID ║—1:n—→║ID ║
║userID ║ ║notificationID ║ ║notificationObjectID║
╚═════════════╝ ║object ║ ║verb ║
╚═══════════════════╝ ║actor ║
╚════════════════════╝
एक अधिसूचना किसी चीज़ (वस्तु = घटना, दोस्ती ..) के बारे में है (क्रिया = जोड़ा, अनुरोध किया गया है) किसी व्यक्ति (अभिनेता) द्वारा और उपयोगकर्ता (विषय) को रिपोर्ट किया गया। यहां एक सामान्यीकृत डेटा संरचना है (हालांकि मैंने MongoDB का उपयोग किया है)। आपको परिवर्तनों के बारे में कुछ उपयोगकर्ताओं को सूचित करने की आवश्यकता है। तो यह प्रति-उपयोगकर्ता सूचनाएँ हैं .. जिसका अर्थ है कि यदि 100 उपयोगकर्ता शामिल थे, तो आप 100 सूचनाएं उत्पन्न करते हैं।
मैंने पहले सोचा था कि मैं इस दृष्टिकोण को समझ गया हूं, लेकिन जब मैंने इसे लागू करने के लिए तैयार होना शुरू किया तो मुझे एहसास हुआ कि मैं इसे विशेष रूप से अच्छी तरह से नहीं समझता। उत्तर पर अंतिम कुछ टिप्पणियाँ अन्य उपयोगकर्ताओं के प्रश्न हैं जिन्हें हल समझने में भी परेशानी हुई है।
मुझे यकीन नहीं है कि यह वह मॉडल है जिसका मैं अनुसरण कर रहा हूं, लेकिन इसकी संख्या कितनी है, मुझे यकीन है कि इससे मुझे इसे समझने में लाभ होगा , और मैं निश्चित रूप से अधिक सीखना चाहूंगा। मुझे आशा है कि यह उन लोगों के लिए भी उपयोगी होगा, जिन्हें इस समाधान को प्राप्त करने में परेशानी हुई है (संयोग से, मेरे पास इस सवाल का जवाब देने के लिए पर्याप्त इंटरनेट बिंदु नहीं हैं, इस प्रश्न पर किसी और को निर्देश दें!)
प्रशन
अगर मैं इसे सही समझता हूं, तो notification_bjectID एक विदेशी कुंजी है जो notification_object टेबल की ओर इशारा करती है , और सूचना नोटिफिकेशन तालिका की ओर इशारा करते हुए एक विदेशी कुंजी है । ऐसा लगता है जैसे ऑब्जेक्ट डेटाबेस प्रविष्टि की आईडी का उल्लेख करने वाली एक विदेशी कुंजी होनी चाहिए, अधिसूचना के बारे में है (उदाहरण के लिए एक विशिष्ट घटना या पोस्ट), लेकिन क्या हमें उस आईडी को इंगित करने के लिए किसी अन्य फ़ील्ड की आवश्यकता नहीं है?
लेखक ने लिखा
notification_object.object एक स्ट्रिंग "मैत्री" की तरह परिवर्तन प्रकार की पहचान करता है, इसके अतिरिक्त डेटा के साथ परिवर्तित वस्तु का वास्तविक संदर्भ जो मैं बात करता हूँ, वह है notification_change.notificationObjectID में
जो मुझे समझ में नहीं आता है। ऑब्जेक्ट एक स्ट्रिंग है (enum?) और notificationObjectID एक विदेशी कुंजी है जिसका संदर्भ उस वस्तु से है जिसके बारे में अधिसूचना है? फिर मध्य और दाएं तालिकाओं को कैसे जोड़ा जाता है?
ऐसा लगता है कि मध्य तालिका निर्दिष्ट करती है कि अधिसूचना किस वस्तु (या प्रकार की वस्तु) के बारे में है, जैसे कोई घटना या पोस्ट। उसके बाद हम एक ही ऑब्जेक्ट प्रकार की ओर इशारा करते हुए notification_change में कई प्रविष्टियाँ ले सकते हैं , जो हमें सूचनाओं को बंडल करने की अनुमति देती है (जैसे "X की दीवार पर पोस्ट किए गए 25 उपयोगकर्ता) - इसलिए मध्य और दाएँ तालिकाओं के बीच 1: n संबंध है।
लेकिन बाएं और मध्य तालिकाओं के बीच 1: n संबंध क्यों है? क्या हम "सैम की दीवार पर तैनात 25 उपयोगकर्ता" देने जा रहे हैं और "मैरी ने अपने" फ्राइडे पिकनिक "इवेंट को एक ही नोटिफिकेशन आईडी के रूप में अपडेट किया है? यदि एक ही उपयोगकर्ता के सभी नोटिफिकेशन में एक ही नोटिफिकेशन आईडी है, तो हमें टेबल की भी आवश्यकता क्यों है? बाएं?
एक प्रदर्शन सवाल - कहते हैं कि जॉन मैरी की पिकनिक घटना पर एक टिप्पणी पोस्ट करता है। ऐसा लगता है कि हमें यह देखने के लिए एक खोज करने की आवश्यकता होगी कि क्या इससे पहले कि हम notification_change प्रविष्टि बनाए, इससे पहले कि मेरी Picnic के लिए एक notification_object मौजूद है । क्या यह प्रदर्शन पर नकारात्मक प्रभाव डाल रहा है, या यह एक गैर-मुद्दा है? पिछले पैराग्राफ के प्रश्नों को जारी रखते हुए, हम कैसे पता होगा जो अधिसूचना प्रवेश बात करने के लिए notification_object के लिए?