2013-06-27 6 views
9

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

पहले: दो टेबल, जहां संदेश तालिका

user 
---------- 
id 
name 

message 
-------------- 
id 
from_id 
to_id 
message_id --> refer to this table itself, to make me know which message is the topic 
subject 
content 
time 
status --> inbox, outbox, archive 
read --> read, unread 

दूसरा ही को देखें: तीन टेबल, लेकिन

user 
---------- 
id 
name 

message_header 
-------------- 
id 
from_id 
to_id 
subject 
status --> inbox, outbox, archive 
time 

message 
-------- 
id 
message_header_id 
content 
time 
read --> read, unread 
author_id 

व्यक्तिगत रूप से, मैं इस संरचना की तरह, क्योंकि यह erd में एक चक्र बनाने केवल एक संदेश शीर्षलेख और कई संदेश (सामग्री) का उपयोग करें। लेखक_आईडी को हटाया नहीं जा सकता है क्योंकि मुझे यह जानने की जरूरत है कि संदेश बाईं ओर (प्रेषक के रूप में) या दाएं तरफ (एक रिसीवर के रूप में) है या नहीं। यह प्रणाली सिर्फ दो व्यक्ति संदेश प्रणाली के लिए है।

असल में यह दो तालिका समान है, लेकिन इस संदेश प्रणाली को लागू करने का सबसे अच्छा अभ्यास कौन सा है? पहले धन्यवाद

उत्तर

12

कठिन तरीके सीखने के बाद (कई बार, मेरी अंतिम परियोजना के दौरान ...), मैं आपको सलाह देता हूं कि जब भी संभव हो, चीजों को अलग और व्यवस्थित करें। आत्म-रिश्ते एक अच्छी चीज है जो नजदीक न हो, जब संभव हो (दुर्लभ अपवाद हैं)। पहली बार अपने वर्गों को डिजाइन करें; फिर एक डेटाबेस बनाएं जिसमें चीजें अच्छी तरह से फिट हों, लेकिन चीजों को सरल रखना चाहिए जैसा कि होना चाहिए। मेरी प्राथमिकता है, बेहतर तैयार कहा से है ...

Diagram


आप कोड को देखने के लिए पसंद कर सकते हैं। यह here है।
एक संभावित क्वेरी एक निश्चित हैडर से संदेशों को सूचीबद्ध किया जाएगा

SELECT 
    h.id AS `header_id`, h.`subject`, h.`status`, 
    m.id AS `message_id`, m.content, m.`time`, 
    IF(m.is_from_sender, x.`name`, y.`name`) AS `written_by` 
FROM (SELECT * FROM header WHERE id = @VAR) h 
    INNER JOIN message m ON (h.id = m.header_id) 
    INNER JOIN user x ON (h.from_id = x.id) 
    INNER JOIN user y ON (h.to_id = y.id); 
  • आप थोड़ा क्षेत्रों के लिए मेरा एक निजी पसंद देखेंगे। उदाहरण के लिए, एक बार आपका उद्देश्य दो व्यक्ति संदेश प्रणाली होने के बाद, आपको वास्तव में एक से अधिक समय से निश्चित रूप से याद रखना होगा।
  • मुझे आशा है कि आपको संदेह होगा।

सादर,

लियोनार्डो

+0

संदेश एक निश्चित संदेश का उत्तर देने के आदेश से श्रृंखलित होना चाहिए या वे प्रति टाइमस्टैम्प – aeonsleo

+0

का उपयोग करते हुए जबाब आदेश (पहली उच्च आईडी) के रूप में सूचीबद्ध किया जाना चाहिए एक छोटे से हो सकता है सस्ता है, लेकिन आप टाइमस्टैम्प ऑर्डरिंग (बेशक, एक उपयुक्त इंडेक्स के साथ) मामले में अधिक दोस्ताना मान सकते हैं, मान लीजिए, कोई इंटरनेट के बिना जवाब देता है और डेटाबेस को प्रभावी रूप से संदेश भेजने में कुछ समय लगता है। उस ने कहा, आप तय करते हैं:> –

+0

"is_from_sender" विशेषता का उपयोग क्या है? –

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