2013-02-12 27 views
5

में दो-तरफा विदेशी कुंजी बाधा मैं एक MySQL डेटाबेस का उपयोग कर रहा हूं। मेरे संबंधपरक डेटा मॉडल में, मेरे पास दो इकाइयां हैं जो एक-दूसरे से 1: 1 से संबंधित हैं। मेरी स्कीमा में, एक 1: 1 संबंध दो तालिकाओं में से एक में एफके फ़ील्ड डालकर स्थापित किया जाता है, जो कि अन्य तालिका के पीके से संबंधित है। दोनों टेबलों में पीके हैं और वे दोनों स्वचालित वृद्धि BIGINT हैं।1: 1 संबंध

मैं सोच रहा हूँ कि क्या यह है कि दोनों तरीकों से काम करता है उन पर ON DELETE CASCADE व्यवहार के लिए संभव हो जाएगा।

यानी A 1: 1 बी, इसका मतलब है कि के साथ-साथ [बी को हटाने से हटा देता है एक] [हटाते समय एक भी बी को हटा देता है]।

मुझे लगता है कि यह उचित आवेदन डिजाइन के मामले में बिल्कुल जरूरी नहीं हो सकता है, लेकिन मैं बस सोच रहा हूँ कि क्या यह वास्तव में संभव है। जहां तक ​​मुझे याद है, आप पीके पर एफके बाधा नहीं डाल सकते हैं।

उत्तर

8

यदि आपके पास 2-तरफा संबंध लागू है तो ऐसे रिकॉर्ड डालना असंभव होगा। चिकन और अंडे की। तालिका # 1 में रिकॉर्ड नहीं किया जा सकता है क्योंकि तालिका # 2 में कोई मिलान रिकॉर्ड नहीं है, और तालिका # 2 को सम्मिलित नहीं किया जा सकता है क्योंकि हुक करने के लिए तालिका # 1 में कुछ भी नहीं है।

आप अस्थायी रूप से एफके बाधाओं को अक्षम कर सकते हैं (set foreign_key_checks = 0), लेकिन यह कभी भी "असली" प्रणाली में नहीं किया जाना चाहिए। यह डंप लोड करने के लिए और अधिक है जहां टेबल लोड ऑर्डर की गारंटी नहीं दी जा सकती है। 'चिकन या अंडा' तर्क के लिए

+0

+1। ;- डी – SparKot

+1

@DoSparKot: "पहले क्या हुआ?" के लिए मेरा सामान्य उत्तर सवाल "रोस्टर" है: पी –

+0

हम्म, यह एक मान्य बिंदु है जिस पर मैंने सोचा नहीं है। इसके अलावा, केवल एक बाधा होने का विचार डालने पर विफल रहता है, क्योंकि एक ऑटो-वृद्धि वाले क्षेत्र के मूल्य की वजह से मुझे पहले से ही उल्टी बना रही है। (पीएस rooster एक पुरुष है। एक उचित लड़ाई नहीं है।) –