2010-01-04 9 views
5

यह निम्नलिखित कॉलम के साथ user_movies नामक एक मेज के लिए अनुक्रमित बनाना उचित है:क्या मुझे कई से अधिक डेटाबेस तालिका के लिए अनुक्रमणिका का उपयोग करना चाहिए?

user_id movie_id

वहाँ डालने या इस मेज पर अद्यतन करने की तुलना में अधिक पढ़ने हो जाएगा लेकिन मुझे यकीन नहीं कर रहा हूँ क्या करने के लिए। इसके अलावा: क्या इस स्थिति में प्राथमिक कुंजी को छोड़ना पर्याप्त है?

उत्तर

8

इस तालिका के लिए सही परिभाषा इस प्रकार है। प्रत्येक तालिका में प्राथमिक कुंजी बाधा होने का सर्वोत्तम अभ्यास है। ऑटो-जेनरेटेड स्यूडोकी कॉलम के साथ प्राथमिक कुंजी बाधा को भ्रमित न करें।

MySQL में, एक विदेशी कुंजी या प्राथमिक कुंजी घोषित करना एक सूचकांक बनाता है। हाँ, ये फायदेमंद हैं।

+0

मुझे पता है कि यह पुराना है लेकिन मैं इसकी मदद नहीं कर सकता: कृपया तालिका नाम के लिए एकवचन संज्ञा का प्रयोग करें: उदा। ** उपयोगकर्ता ** और * नहीं * ** उपयोगकर्ता ** ..और सभी डीबीए का आनंद लिया! – dwkd

+1

@dwkd, सुझाव के लिए धन्यवाद। आप अपने नामकरण सम्मेलन का उपयोग कर सकते हैं और मैं मेरा उपयोग करूंगा। नामकरण सम्मेलन के बारे में अधिक महत्वपूर्ण बात यह लगातार चल रही है। –

1

मैं दोनों स्तंभों को अलग से इंडेक्स करता हूं और हां आप प्राथमिक कुंजी को खत्म कर सकते हैं।

+1

या एक परिसर पीके बनाओ। –

0

आप इस तरह के एक "में शामिल होने की मेज" का उपयोग कर रहे हैं, तो आप शायद कुछ आपके प्रश्नों में मिलती है इस्तेमाल करेंगे - और उन शायद उन दो स्तंभों में से हर एक पर एक सूचकांक से लाभ होगा (जो दो अलग-अलग अनुक्रमित का मतलब है) ।

CREATE TABLE user_movies (
    user_id INT NOT NULL, 
    movie_id INT NOT NULL, 
    PRIMARY KEY (user_id, movie_id), 
    FOREIGN KEY (user_id) REFERENCES users(user_id), 
    FOREIGN KEY (movie_id) REFERENCES movies(movie_id) 
) ENGINE=InnoDb; 

सूचना "प्राथमिक कुंजी" की कोई समस्या है, न कि किसी स्तंभ है:

1

मैं हमेशा सुना है कि आप दोनों स्तंभ पर एक अद्वितीय सूचकांक, पहले एक ही रास्ता (user_id + movie_id) तो दूसरी तरह के (movie_id + user_id) बनाना चाहिए। यह कुछ त्वरित और गंदे परीक्षण के साथ मेरे आवेदन में थोड़ा तेज़ (ज्यादा नहीं, लगभग 10-20%) काम करता है।

यह भी सुनिश्चित करता है कि आपके पास दो पंक्तियां नहीं हो सकतीं जो movie_id को उसी user_id (जो कि अच्छी हो सकती है, लेकिन शायद हमेशा नहीं) हो सकती है।

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