2011-10-14 18 views
9

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

उनके पास एक से अधिक ब्याज हो सकते हैं, तो मैं इस जानकारी को उपयोगकर्ता INTERESTS के क्षेत्र में कैसे संग्रहीत कर सकता हूं? या इसे प्राप्त करने के लिए सबसे अच्छा वैकल्पिक तरीका क्या है?

user (id, name) 
interest (id, description) 
user_interest (user, interest) 

इस database normalization कहा जाता है:

+0

यह मैं मदद की: http://stackoverflow.com/questions/1009025/facebook-database-design –

उत्तर

0

यह करने के लिए सबसे अच्छा समाधान 3 तालिकाओं (useres के हितों के संबंध के भंडारण के लिए एक तिहाई से एक) का प्रयोग है।

3

अपनी MySQL पुस्तक में database normalisation पढ़ें। यह एक महत्वपूर्ण विषय है, इसलिए इसके बारे में शायद एक बड़ा अध्याय है।

संक्षेप में, आप interests को हटाने और एक तीसरे तालिका के साथ बजाय खत्म, जैसे:

user_id | interest_id 
--------+------------ 
    1 |  1 
    1 |  2 
    2 |  1 
    3 |  4 

यह आपको अपनी कई-से-अनेक संबंध देता है।

+0

यहाँ डेटाबेस सामान्यीकरण जो मुझे मदद की पर एक वीडियो है: https://youtu.be/UrYLYV7WSHM –

+0

@ मैटजी: या अपनी पुस्तक पढ़ें :) –

6

यह कई से अधिक रिश्ते हैं। आप इन्हें "टेबल में शामिल" करने के द्वारा स्टोर करते हैं।

Table Users: 
----------- 
UserID PK 
Name 
... 


Table Interests 
------- 
InterestID PK 
Description. 
.... 


User_interest 
----------- 
UserID PK, FK 
InterestID PK, FK 
+1

'user_interest' में कॉलम 'UserInterestID'' अनावश्यक है। तालिका में केवल दो कॉलम होना चाहिए और इसकी प्राथमिक कुंजी '(UserID, InterestID) होना चाहिए। – Hammerite

+0

काफी सही। तदनुसार जवाब में संशोधन किया है। –

+1

अच्छा लगता है लेकिन मैं इस विधि का उपयोग कर उपयोगकर्ता के हितों की एक सूची लाने के लिए डेटाबेस से कैसे पूछूं? – Dan

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