मेरे पास दो कक्षाएं हैं, Foo
और Bar
। प्रत्येक Bar
में कई Foo
एस होंगे। Foo
एस कई Bar
एस में हो सकता है लेकिन प्रत्येक Foo
केवल एक बार दिए गए Bar
में हो सकता है। मेरे पास निम्न तालिका संरचना है:क्या दो स्तंभों पर एक MySQL प्राथमिक कुंजी दूसरे कॉलम पर क्वेरी के साथ मदद करता है?
CREATE TABLE `bar_foos` (
`bar_id` INT UNSIGNED NOT NULL,
`foo_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`bar_id` , `foo_id`)
);
यह मेरे कई से अधिक रिश्तों के लिए ठीक काम करना चाहिए। मेरा सवाल है, अगर मैं चाहता हूं कि मेरा कोड यह देखने में सक्षम हो कि Foo
किसी भी Bar
एस, आईई द्वारा उपयोग में है या नहीं। उपयोगकर्ता बताने के लिए "यह फू हटाया नहीं जा सकता है क्योंकि यह 5 बार्स द्वारा उपयोग में है", प्राथमिक कुंजी सूचकांक
SELECT * FROM `bar_foos` WHERE `foo_id`=2
या
SELECT COUNT(*) FROM `bar_foos` WHERE `foo_id`=2
या की तरह एक प्रश्न के साथ मेरी मदद करता है, मुझे क्या करना अकेले foo_id
कॉलम के लिए एक अलग इंडेक्स की आवश्यकता है?
यदि यह एक से कई रिश्ते हैं, तो आपको 'bar_foos' तालिका क्यों चाहिए? क्यों न केवल 'bar.foo_id' का उपयोग करें (और उस क्षेत्र पर भी एक अनुक्रमणिका है)? –
"फूओस कई बार्स में हो सकता है लेकिन प्रत्येक फू केवल एक बार बार में ही हो सकता है।" यह एक से अधिक रिश्ते नहीं है, यह अलग संयोजनों के साथ कई से अधिक है। –
@ माइकल: @ डीजेकोबसन नाक पर आ गया, मैं इसे इस तरह से नहीं कर सकता – Josh