2011-11-12 10 views
14

मैं एक संदेश/चैट सिस्टम बनाने की कोशिश कर रहा हूं। जो एक कालक्रम क्रम में दो लोगों के बीच वार्तालाप स्टोर कर सकते हैं। अगर उपयोगकर्ता ए वार्तालाप को हटा देता है तो उपयोगकर्ता बी को तब भी वार्तालाप तक पहुंच प्राप्त करनी चाहिए जब तक कि वह उन्हें हटाना नहीं चाहता।लोगों के बीच चैट संदेश संग्रहीत करने के लिए डेटाबेस डिज़ाइन

  1. इनबॉक्स - विभिन्न उपयोगकर्ताओं के उपयोगकर्ता द्वारा प्राप्त किए गए सभी संदेश उस विशेष धागे से नवीनतम संदेश के साथ प्रदर्शित किए जाएंगे।

  2. वार्तालाप स्क्रीन - उपयोगकर्ता A और उपयोगकर्ता B

इस डेटाबेस मैं के साथ आए हैं की बुनियादी संरचना है के बीच बातचीत के कालानुक्रमिक आदेश। क्या मुझे डेटाबेस में संदेशों को दो बार स्टोर करना चाहिए?

  1. आईडी
  2. to_id
  3. from_id
  4. संदेश
  5. टाइमस्टैम्प
+0

मुझे समझ में नहीं आता कि लोग मेरे प्रश्न पर नीचे वोट क्यों दे रहे हैं :( –

उत्तर

7

मैं संदेशों को संग्रहीत होता है कि जो कि संदेश

table->message     | table->messageUsers 
id->0, message->'hi', user_id->1  user_id->1, message_id->0 
             user_id->2, message_id->0 

देखने पर इस तरह यदि कोई उपयोगकर्ता अपने संदेश को हटा देता है अगर वे वास्तव में सिर्फ संदेश के साथ उनके संबंध हटा रहे हैं नहीं अधिकार है के लिए एक लुकअप तालिका का प्रयोग करेंगे संदेश खुद ही। आप उन्हें संदेश उपयोगकर्ता तालिका से हटा दें। या सक्रिय क्षेत्र को 1 या 0 पर सेट करें।

+0

अगर मैं हटा देता हूं तो उपयोगकर्ता 1 संदेश कहता है। उपयोगकर्ता 2 को कैसे पता चलेगा कि संदेश उपयोगकर्ता 1 से है और उपयोगकर्ता 3 या 4 से नहीं है? –

+0

मैंने जवाब अपडेट किया। तो आप केवल संदेश तालिका में संग्रहीत करेंगे कि 'user_id' उस उपयोगकर्ता की आईडी है जिसने संदेश बनाया है। उदाहरण के लिए यदि संदेश-> user_id = 1 और संदेश में उपयोगकर्ता उपयोगकर्ता को उस संदेश को पढ़ने की क्षमता को हटाते हैं, तो उपयोगकर्ता 2 अभी भी संदेश देखेगा और इसे किसने बनाया है। –

+0

यह भी मान रहा है कि आप एक संबंधपरक डेटाबेस बना रहे हैं ... आशा है कि आप हैं। –

1

वहाँ पढ़ने के दो तालिकाओं हो जाएगा। नोड्स node_user

नोड्स तालिका में,

  • node_id
  • शीर्षक
  • संदेश
  • टाइमस्टैम्प

node_user तालिका में,

  • node_user_id (पी)
  • node_id
  • parent_node_id (थ्रेड के लिए)
  • from_id
  • to_id
  • टाइमस्टैम्प

पढ़ उपयोगकर्ता एक उपयोगकर्ता बी को एक संदेश भेज जब , पहले संदेश को नोड्स तालिका में संग्रहीत करें। और फिर, node_user तालिका में दो रिकॉर्ड जोड़ें। जब उपयोगकर्ता ए संदेश को हटा देता है, तो केवल node_user तालिका में पहला रिकॉर्ड हटाएं। जब उपयोगकर्ता बी संदेश को हटा देता है, तो आप दोनों नोड्स और node_user तालिका से रिकॉर्ड हटा सकते हैं।

थ्रेडेड संदेश,

  • उपयोग
+0

मुझे संदेश को तीन बार स्टोर करने की आवश्यकता क्यों है? –

+0

क्षमा करें। मैं संदेश कॉलम को मिटाना भूल गया node_user तालिका में। मैं संपादित करूंगा। आपको संदेश को तीन बार स्टोर करने की आवश्यकता नहीं है। केवल एक बार नोड तालिका में। प्रेषक और प्राप्तकर्ता को स्टोर करने के लिए नोड_यूसर तालिका का उपयोग करें। यदि आप सीसी और बीसीसी सुविधाओं को बाद में जोड़ते हैं तो यह भी काम करेगा। –

+0

मैंने अपने प्रश्नों को स्पष्ट रूप से बताया है ... मेरी जरूरतों को स्पष्ट रूप से बताएं। अनुमान लगाया गया है कि इनबॉक्स को कॉल करना उचित नहीं था। धन्यवाद –

1

parent_node_id पहले तो मैंने सोचा कि जब एक व्यक्ति इसे नष्ट कर दिया तुम सिर्फ या तो करने के लिए या से अशक्त करने के लिए बदल सकती है लेकिन यह है कि तुम हार जो भेजा होगा संदेश या किसके लिए इसे संबोधित किया गया था।

आपको केवल एक फ़ील्ड हटाया जाना चाहिए जिसमें बाई उस व्यक्ति की आईडी होगी जिसमें इसे हटाया गया हो या शून्य हो जाएगा। तो जब इनबॉक्स से रिकॉर्ड का चयन आप की तरह कुछ है:

* का चयन करें संदेश कहाँ से to_id = MyID और < DELETED_BY> MyID

जब आप संदेश आप की जाँच हटाते हैं DELETED_BY, अशक्त है अगर यह आप है हटाए गए_बी फ़ील्ड को माईआईडी के साथ अपडेट करें, अगर यह नहीं है (इसका मतलब है कि दूसरी पार्टी ने इसे भी हटा दिया है) तो आप रिकॉर्ड हटा दें।

यदि आप संदेशों के बजाय धागे के लिए समान कार्यक्षमता चाहते हैं (यानी वार्तालाप प्रबंधित करें और एक समय में एक संदेश नहीं) तो आपके पास एक और तालिका (संदेश थ्रेड) होनी चाहिए जिसमें आपके पास से_आईडी, to_id फ़ील्ड, delete_by thread_id फ़ील्ड के साथ। संदेश तालिका में आप thread_id से the_id to_id और delete_by को सब्सक्राइब करते हैं।

संबंधित मुद्दे