2010-05-10 14 views
13
में शून्य

मैं अपने मूल्यों तालिका (मान) knownValues ​​तालिका के लिए एक विदेशी कुंजी के रूप में संदर्भित में एक स्तंभ हो सकता है, और यह शून्य हो, जब भी जरूरत उदाहरण की तरह:विदेशी कुंजी और mySQL

तालिका: मान

product  type  value  freevalue 
0   1  NULL  100 
1   2  NULL  25 
3   3  1   NULL 

तालिका: प्रकार

id name  prefix 
0  length cm 
1  weight kg 
2  fruit NULL 

तालिका: knownValues ​​

id Type  name 
0  2  banana 

नोट: तालिका में प्रकार values & knownValues निश्चित रूप से types तालिका में संदर्भित हैं।

उत्तर

17

विदेशी कुंजी में एनयूएलएल पूरी तरह से स्वीकार्य हैं। विदेशी कुंजी में एनयूएलएस के साथ काम करना मुश्किल है लेकिन इसका मतलब यह नहीं है कि आप इस तरह के कॉलम को नल में बदलते हैं और डमी ("एन/ए", "अज्ञात", "नो वैल्यू" इत्यादि) को अपने संदर्भ तालिकाओं में दर्ज करते हैं।

विदेशी चाबियों में एनयूएलएल का उपयोग करने के लिए अक्सर आपको इनर जॉइन के बजाय बाएं/दाएं जॉइन का उपयोग करने की आवश्यकता होती है।

+3

INNER में शामिल होने या किसी प्रकार का बाहरी शामिल होने का उपयोग उन परिणामों पर निर्भर करता है जिन्हें आप ढूंढ रहे हैं। ऐसे समय होते हैं जब एक INNER शामिल होता है वांछित उत्तर देता है। –

+1

हां, और ऐसे मामलों में जब आपके पास एफके में एनयूएलएल के साथ पंक्तियां होंगी, तो आपको * सभी * पंक्तियों को आंतरिक शामिल होने के साथ नहीं मिलेगा; लेकिन बाहरी शामिल होने के साथ। –

+1

कोई उदाहरण? यह InnoDB स्टोरेज इंजन - MySQL का उपयोग कर मेरे लिए काम नहीं कर रहा है – dev

3

यह शून्य से कई रिश्तों के लिए 1 है। मैंने SQL सर्वर के साथ कई बार इसका उपयोग किया है। मेरा मानना ​​है कि यह MySQL के साथ भी करना संभव है।

मैं डेटा एकाग्रता से संबंधित मुद्दों के कारण अपने डेटाबेस में एनयूएलएल से बचना पसंद करता हूं, इसलिए, मेरे डिज़ाइन के आधार पर, मैंने लुकअप टेबल में एक अज्ञात पंक्ति डाली।

+4

हाय राज! "अज्ञात पंक्ति" से आपका क्या मतलब है? – Industrial

1

हां आपके विदेशी-कुंजी-बाधित कॉलम में एक पूर्ण होना संभव है। मैंने बस कोशिश की। ध्यान रखें कि यदि आप इनो डीबी स्टोरेज इंजन का उपयोग नहीं कर रहे हैं, तो आपकी विदेशी कुंजी बाधाओं को वैसे भी अनदेखा कर दिया जाएगा।

+0

बेशक इनो डीबी का उपयोग करना! – Industrial

4

हालांकि आप विदेशी कुंजी कॉलम को निरर्थक बना सकते हैं, लेकिन मैं सुझाव दूंगा कि बिना किसी विदेशी कुंजी के टेबल को डिज़ाइन करना बेहतर होता है। नल हमेशा कुछ अस्पष्टताओं और गलत परिणामों का कारण बनते हैं, लेकिन यदि प्रश्न में कॉलम कुछ बाधा के अधीन होने की उम्मीद है तो यह दोगुनी समस्या है।

+1

हाय डेविड, तो आप इसे कैसे करेंगे? केवल मुक्त-पाठ-मूल्यों के लिए एक अतिरिक्त तालिका? – Industrial

+1

हां, इसे किसी अन्य तालिका में डालने का यह स्पष्ट तरीका है। यदि आप गुणों के सही सेट के साथ तालिकाओं में तथ्यों का प्रतिनिधित्व करते हैं तो आपको उन विशेषताओं के लिए नल का उपयोग करने की आवश्यकता नहीं होगी जो लागू नहीं होते हैं। केवल मॉडल में नल जोड़ें जहां ऐसा करने के लिए कुछ विशेष लाभ है या जहां कुछ सॉफ़्टवेयर सीमा आपको मजबूर करती है। – sqlvogel

1

बेशक, विदेशी संभावनाओं में एक सामान्य मूल्य है, लेकिन इसके लिए आपको चिंता नहीं है, मुझे आशा है कि आप मुख्य बाधाओं को प्रबंधित करने के लिए इनो डीबी डेटाबेस डेटाबेस के रूप में उपयोग कर सकते हैं। इस मामले के लिए मैं डीबी और ग्रुप से पंक्तियां प्राप्त करने के लिए बाएं जॉइन या राइट जॉइन का उपयोग करने का सुझाव देता हूं इसका उपयोग डुप्लिकेशन से बचने के लिए किया जा सकता है। कृपया इनर जॉइन का उपयोग न करें।

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