2012-10-22 13 views
5

मैं (फेसबुक में की तरह कुछ) एक मित्र प्रणाली बनाना चाहते हैं।mysql का अनुकूलन टेबल

मैं MySql में संबंध डेटा सहेजना चाहते हैं, लेकिन मैं नहीं जानता कि जो तरीका है बेहतर:

  1. जैसे एक ही प्रविष्टि के रूप में everysingle संबंध, सहेजने के लिए:

    id | people1 | people2 
    1 | john | maria 
    2 | john | fred 
    3 | maria | fred 
    

    (वहां मैं इन सभी 3 लोगों के बीच संबंध घोषित करता हूं)

  2. सभी नामों को सहेजने और अपने दोस्तों को सूचीबद्ध करने के लिए:

    id | people | friends 
    1 | fred | mary, john 
    2 | mary | john, fred 
    3 | john | fred, mary 
    

या शायद बेहतर तरीका है?

+0

मैं कहूंगा, विकल्प एक, अपने डाटाबेस बड़ा हो जाता है, लेकिन मैं मैं देख किसी भी समस्याओं forsee न जब मैं विकल्प 2 की तरह यह करना होगा, डालने और विकल्प 2 में editting यह बहुत कठिन होगा। Persnoal oppinion यह। – Dorvalla

+0

# 2 ठीक ही बुरा व्यवहार माना जाता है, http://stackoverflow.com/questions/3653462/is-storing-a-comma-separated-list-in-a-database-column-really-that-bad –

+0

पूरी तरह से सुनिश्चित देखना - पहला तरीका। हालांकि - लोगों के लिए संख्यात्मक आईडी संख्याओं का उपयोग करें, नाम नहीं। – Randy

उत्तर

11

कोई प्रिय,

आपको मित्र संबंध बनाने के लिए केवल एक ही टेबल की आवश्यकता है। संरचना पीछा कर रहा है मैं

आईडी (प्राथमिक कुंजी) का इस्तेमाल किया है | my_id (पूर्णांक लॉग इन उपयोगकर्ता आईडी) |

की तरह हम अपने उपयोगकर्ताओं तालिका में दो उपयोगकर्ताओं है तो हम दोनों उपयोगकर्ता के लिए दो प्रविष्टियां एक दूसरे

id | name | age 
1 | vipan | 12 
2 | karan | 12 
साथ संबंध बनाने के लिए है friend_id (किसी अन्य उपयोगकर्ता वह लॉग इन उपयोगकर्ता का मित्र अनुरोध प्राप्त होगा की पूर्णांक प्रयोक्ता आईडी)

तो प्रवेश होना चाहिए

id | my_id | friend_id 
1  1  2 
2  2  1 

कृपया किसी भी मामले में नीचे वोट नहीं करते हैं लेकिन मैं अपने साइट में इस तालिका संरचना का उपयोग किया है और यह एक ही इस joomsocial में इस्तेमाल किया संरचना है सबसे अच्छा तालिका संरचना मुझे ऐसा लगता है मैं इसका इस्तेमाल किया जाता है और कृपया अल्पविराम से अलग मूल्य का उपयोग न करें तालिका में तों वे समस्या कर देगा मिलती है और कुछ मामलों में संबंध

कृपया 4 नंबर टिप्पणी पोस्ट के इस नीचे दिए गए लिंक में देख

Separate comma separated values from mysql table

+1

कृपया इस पोस्ट में http://stackoverflow.com/questions/9906430/separate-comma-separated-values-from-mysql-table –

+0

में 4 नंबर टिप्पणी देखें, लेकिन मुझे किसी व्यक्ति के सभी दोस्तों को प्रिंट करने की आवश्यकता होगी, इसलिए मुझे नामों की आवश्यकता होगी और यह किसी अन्य तालिका से प्रत्येक व्यक्ति के नाम को पुनः प्राप्त करने के लिए बहुत तेज़ नहीं दिखता है (यदि दोस्तों की गिनती 500 से ऊपर होगी और 100k से ऊपर की उपयोगकर्ता तालिका में प्रविष्टियां) –

4

पहले एक सबसे अच्छा है कोई संदेह नहीं है एक दूसरे के कारण में first normal form का सम्मान नहीं करेगा।

आप कारण यह डेटाबेस सामान्यीकरण के बारे में

Here लिंक संपादित करने के लिए वास्तव में दर्दनाक मिल जाएगा एक ही स्तंभ में एक से अधिक मान से बचने के लिए किया है। अधिकांश समय, हम तीसरी सामान्य रूप सम्मान कारण यह सामान्य और प्रदर्शन के बीच एक अच्छा समझौता है।

इसके अलावा, की तरह रैंडी ने कहा, आप आईडी का उपयोग करने के लिए इतना तो आप उन्हें एक विदेशी कुंजी के साथ लिंक कर सकते हैं।

+0

लेकिन मुझे कुछ के सभी दोस्तों को प्रिंट करने की आवश्यकता होगी व्यक्ति, इसलिए मुझे नामों की आवश्यकता होगी और यह किसी अन्य तालिका से प्रत्येक व्यक्ति के नाम को पुनः प्राप्त करने के लिए बहुत तेज़ नहीं दिखता है (यदि दोस्तों की गिनती 500 से ऊपर होगी और 100k से ऊपर की उपयोगकर्ता तालिका में प्रविष्टियां) –

+0

ठीक है, एक जॉइन लागत नहीं है मुझे बहुत भरोसा है और मेरा विश्वास है कि mysql 100k पंक्तियों को बहुत आसान संभाल सकता है इसलिए इस मामले के लिए मैं प्रदर्शन के लिए सामान्यीकरण का त्याग नहीं करता। यह पहले सामान्य रूप – Marc

+0

@ मिंडागास जकुबौस्कस का भी सम्मान नहीं करेगा, उदाहरण के लिए: आपको यह जानने की जरूरत है कि जॉन रॉबर्ट का मित्र है ... आप सभी स्ट्रिंग और विभाजन को पार्स करना शुरू कर देंगे? यह प्रदर्शन के लिए वास्तव में अच्छा नहीं है और यह दर्दनाक है। इसके बजाय, वह विकल्प 1 के साथ, आप बस एक सामान्य चयन करते हैं और यदि आप अपनी अनुक्रमणिका को अच्छी तरह से सेट करते हैं, तो यह एक सेकंड भी नहीं लेगा। – Marc