2011-11-26 21 views
12

मैं अपने प्रोजेक्ट और डेवलपर कार्यक्रम के लिए निम्नलिखित संरचना:MySQL विशिष्ट आईडी या संयुक्त आईडी

developer table 
id 
developer name 
etc... 

project table 
id 
project name 
etc... 

developer _project table 
??? 

एक डेवलपर कई परियोजनाओं में हो सकता है और एक परियोजनाओं कई डेवलपर मैं एक नया तालिका बनाने के लिए है हो सकता है क्योंकि लेकिन जो मैंने पढ़ा है, वह यह नहीं बताता कि मुझे किस आईडी का उपयोग करना चाहिए।

यदि मैं एक आईडी ऑटो वृद्धि का उपयोग करता हूं + user_id + project_id क्या मेरे पास डुप्लिकेट होगा क्योंकि आईडी प्राथमिक कुंजी है?

उत्तर

13

उपयोग एक अद्वितीय संयुक्त कुंजी:

CREATE TABLE `developer_project` (
developer_id INT(10) UNSIGNED /* etc... */, 
project_id INT(10) UNSIGNED /* etc... */, 
PRIMARY KEY dev_project (developer_id, project_id) 
); 

आप एक ID बनाते हैं तो आप शायद इसका इस्तेमाल कभी नहीं होगा, क्योंकि आप developer_id और/या अपने LEFT JOIN

नोट में PROJECT_ID क्वेरी करेगा: सुनिश्चित करें कि स्तंभ परिभाषाओं developer और project रूप में एक ही कर रहे हैं टेबल।

+0

क्यों उन्हें एक ही परिभाषा की आवश्यकता है? – zackaryka

+0

मान लें कि आपके पास डेवलपर तालिका और 'tinyint' से अधिकतम संकेत 42 9 4 9 672 9 5 है क्योंकि हस्ताक्षर नहीं किया गया है) (अधिकतम मान 127 है क्योंकि इसके हस्ताक्षरित -' हस्ताक्षरित 'शब्द को परिभाषित तालिका में परिभाषित नहीं किया गया है)। चूंकि छेड़छाड़ तालिका में अधिकतम संख्या तक पहुंच जाती है, यह इस संख्या से अधिक सम्मिलित नहीं होगी, यह 127 पर रुक जाएगी (आपको मिलेगा: 'पंक्ति 1' पर कॉलम' developer_id 'के लिए श्रेणी मान से बाहर)। और पढ़ें: http://help.scibit.com/mascon/masconMySQL_Field_Types.html –

+0

मुझे यह मिलता है, टिप – zackaryka

1

एक संयुक्त तालिका (MySQL वर्कबेंच में स्वचालित रूप से "developer_has_project" कहा जाता है) को एक संयुक्त प्राथमिक कुंजी (डेवलपर, प्रोजेक्ट) का उपयोग करना चाहिए। आप इस कुंजी (आईडी) के लिए एक तिहाई कॉलम जोड़ें यह अब अनूठा हो गया है:

(id,developer,project) 
(1,1,1) 
(2,1,1) 
(3,1,1) 

केवल डेवलपर और परियोजना का उपयोग करना, यह काम करेगा:

(developer,project) 
(1,1) 
(1,1) <-- error! 
(2,1) 

वैकल्पिक रूप से आप इस्तेमाल कर सकते हैं केवल प्राथमिक कुंजी के रूप आईडी, और (डेवलपर, परियोजना) पर एक अद्वितीय संयम जोड़ें:

(id,developer,project) 
(1,1,1) 
(2,1,1) <-- error 
(3,2,1) 
5

कई से अधिक रिश्ते के लिए, आप बस दो क्षेत्रों की समग्र प्राथमिक कुंजी का उपयोग कर सकते हैं।

उदाहरण (यह मानते हुए दोनों PROJECT_ID और developer_id है पूर्णांक):

 
CREATE TABLE `developer_project` (
    `developer_id` INT NOT NULL , 
    `project_id` INT NOT NULL , 
    PRIMARY KEY ( `developer_id` , `project_id`) 
) 
0

कोई एक:

developer_project table 
developer_id 
project_id 
PRIMARY KEY (developer_id, project_id) 

या

developer_project table 
id 
developer_id 
project_id 
PRIMARY KEY (id) 
UNIQUE KEY (developer_id, project_id) 

मैं सुझाव है कि आप पहले विकल्प का उपयोग करें, जब तक आपके पास कारण नहीं हैं सेवा मेरे। वहां ओआरएम हैं जो यौगिक (प्राथमिक) कुंजी के साथ अच्छी तरह से सामना नहीं करते हैं।

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