2009-10-27 17 views
7

हम एक डेटाबेस तैयार कर रहे हैं जिसमें मुझे कुछ एफके (विदेशी कुंजी) बाधाओं पर विचार करने की आवश्यकता है। लेकिन यह औपचारिक संरचना और सामान्यीकरण तक सीमित नहीं है। हम इसके लिए केवल तभी जाते हैं जब यह प्रदर्शन या स्केलेबिलिटी लाभ प्रदान करता हो।एसक्यूएल सर्वर विदेशी कुंजी बाधा लाभ

मैं कुछ दिलचस्प लेखों और व्यावहारिक लाभों के लिए googling के माध्यम से जा रहा है। ये कुछ लिंक कर रहे हैं:

http://www.mssqltips.com/tip.asp?tip=1296

मैं FK के लाभों के बारे में अधिक जानना चाहता था (अलग औपचारिक संरचना से और प्रसिद्ध \ अपडेट को हटाना सोपानी)।

  • एफके डिफ़ॉल्ट रूप से 'अनुक्रमित' नहीं हैं तो एफके अनुक्रमणित करते समय विचार क्या हैं?

  • विदेशी कुंजी के रूप में मैप किए गए शून्य फ़ील्ड को कैसे प्रबंधित करें - क्या यह अनुमति है?

  • अनुक्रमण के अलावा, क्या यह SQL-Server में क्वेरी-निष्पादन योजनाओं को अनुकूलित करने में मदद करता है?

मुझे पता है कि और भी कुछ है लेकिन मैं इस पर बोलने वाले विशेषज्ञों को पसंद करूंगा। कृपया मेरा मार्ग दर्शन कीजिए।

उत्तर

9
  • विदेशी कुंजी कोई प्रदर्शन या स्केलेबिलिटी लाभ प्रदान नहीं करती है।
  • विदेशी कुंजी रेफरेंसियल अखंडता को लागू करती है। अगर किसी ने मूल तालिका से पंक्तियों को गलती से हटाने का प्रयास किया है तो यह एक त्रुटि उठाकर व्यावहारिक लाभ प्रदान कर सकता है।
  • विदेशी कुंजी डिफ़ॉल्ट रूप से अनुक्रमित नहीं हैं। आपको अपने विदेशी कुंजी कॉलम को इंडेक्स करना चाहिए, क्योंकि जब आप अपनी मूल पंक्ति को हटाते/अपडेट करते हैं तो यह बाल तालिका पर टेबल स्कैन से बचाता है।
  • आप एक विदेशी कुंजी कॉलम को कमजोर बना सकते हैं और शून्य डाल सकते हैं।
+0

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

+0

उदाहरण के लिए, मेरे पास एक टेबल ऑर्गमास्टर है (इसमें सभी ऑर्ग रिकॉर्ड हैं) तो मेरे पास बुकिंगिंगस्टर तालिका है (सभी बुकिंग रिकॉर्ड शामिल हैं)। अब, OrgMaster.Id को BookingMaster.OrgId के रूप में 'संदर्भित' किया जा रहा है। तो, मेरे पास ऑर्जिड-टू-आईडी रिश्ते के लिए एक एफके है और मैं इन दोनों टेबलों के बीच किसी भी जॉइन ऑपरेशन के बेहतर प्रदर्शन के लिए इसे 'इंडेक्स' करता हूं .. क्या मुझे यह सही तरीके से मिला?
उपरोक्त सभी - अंतरिक्ष और समय के अतिरिक्त ओवरहेड की लागत पर (एफके के साथ तालिका में रिकॉर्ड डालने के दौरान)। –

+0

मैं अनुरोध करता हूं कि आप मुझे विचार करने के लिए अंक की एक सूची प्रदान करें, जैसे - - क्या एफके-इंडेक्स बहुत अधिक जगह \ बार खाने जा रहा है क्योंकि तालिका कुछ मिलियन रिकॉर्ड बढ़ती है? - उस स्थिति में, क्या एफके-इंडेक्स "हर बार" के लिए जाना उचित है? - क्या मामले में मैं FK या सूचकांक इसे लागू नहीं shud या इसके बारे में न तो (निश्चित रूप से मैं app से एक बहुत संभाल कर सकते हैं) करते हैं - किसी भी अन्य मुश्किल में शामिल हों या अन्य ऐसे समय लेने वाली लुकअप speedup करने के लिए? –

6

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

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

+1

न केवल छोटी गाड़ी क्लाइंट कोड। एसक्यूएल अपडेट कमांड में सीधे टाइप करके त्वरित फिक्स करने के दौरान "बग्गी" उपयोगकर्ता और डेटाबेस प्रशासक गलतियां करने के लिए जाने जाते हैं! –

4

एफके बाधाएं आपके डेटा को सुसंगत रखती हैं। बस। यह मुख्य लाभ है। एफके बाधाओं से आपको कोई प्रदर्शन लाभ नहीं मिलेगा।

लेकिन, जब तक कि आप उद्देश्य डीबी संरचना पर denormalized नहीं है, मैं आपको एफके बाधाओं का उपयोग करने की सलाह देंगे। मुख्य कारण - स्थिरता।

1

जैसा कि बताया गया है, वे डेटा अखंडता के लिए हैं। टूटा हुआ डेटा ठीक करने के लिए आवश्यक समय तक किसी भी प्रदर्शन "हानि" को पूरी तरह मिटा दिया जाएगा।

हालांकि, अप्रत्यक्ष प्रदर्शन लाभ हो सकता है।

कम से कम SQL सर्वर के लिए, एफके में कॉलम प्रत्येक पक्ष पर एक ही डेटाटाइप होना चाहिए। एक एफके के बिना, उदाहरण के लिए आप एक nvarchar माता पिता और एक varchar बच्चे हो सकता है।जब आप 2 टेबल में शामिल होते हैं, तो आपको डेटाटाइप रूपांतरण मिलेंगे जो प्रदर्शन को मार सकता है।

Example: different varchar lengths causing an issue

3

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

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