2008-10-29 5 views
25

उदाहरण के लिए श्रेणियों का पदानुक्रम बनाने के लिए आप एक कॉलम 'parent_id' का उपयोग करते हैं, जो एक ही तालिका में किसी अन्य श्रेणी को इंगित करता है।क्या आप एक आत्म-संदर्भ तालिका कॉलम को विदेशी कुंजी बनाना चाहिए?

क्या यह एक विदेशी कुंजी होनी चाहिए? क्या/फायदे क्या होगा?

उत्तर

26

हां। यह सुनिश्चित करता है कि आपके पास अनाथ नहीं है (कोई अभिभावक के साथ प्रवेश नहीं है), और उपयोग के आधार पर, यदि आप एक कैस्केडिंग डिलीट को परिभाषित करते हैं, जब कोई अभिभावक हटा दिया जाता है, तो उसके सभी बच्चे भी हटा दिए जाएंगे।

नुकसान किसी अन्य विदेशी कुंजी की तरह थोड़ा सा प्रदर्शन होगा।

+4

ए "बेघर अनाथ" ??? ;-) – Yarik

4

हां, आपको इसे एक विदेशी कुंजी बनाना चाहिए।

लाभ कम रिडंडेंसी के साथ एक बेहतर डेटा मॉडल होगा।

13

हां, आपको चाहिए। यदि आपके पास डेटाबेस के संबंध में एक विशेषता है जो एक ही डेटाबेस में किसी अन्य संबंध की प्राथमिक कुंजी के रूप में कार्य करती है तो आपको इसे एक एफके बनाना चाहिए।

आप advantages associated to foreign keys मजा आएगा:

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

नुकसान:

  • आप विदेशी कुंजी को परिभाषित करते हैं, तो कभी-कभी यह कठिन है थोक कार्रवाई करने।
  • शायद यह अधिक डिस्क उपयोग और थोड़ा प्रदर्शन हिट का तात्पर्य है।
5

हां आपको चाहिए। (के रूप में किसी भी विदेशी कुंजी के लिए)

लाभ:

  • यह सुनिश्चित करता है PARENT_ID तालिका में कोई वास्तविक पंक्ति का संदर्भ देता है
  • एक माता पिता के बच्चे हैं, या कि नष्ट झरने को हटाने के लिए सुनिश्चित करता है कि को दुर्घटनावश हटाए रोकता है बच्चों को भी
  • जानकारी अनुकूलक का उपयोग कर सकते हैं

मैं किसी भी असली नुकसान नहीं सोच सकते हैं प्रदान करता है।

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