2010-07-06 9 views
5

यह एक मूर्खतापूर्ण सवाल हो सकता है, लेकिन यहां के लिए बेस्ट प्रैक्टिस जाता है:तालिका में विदेशी कुंजी स्तंभ स्थिति

वहाँ एक मानक या सबसे अच्छा अभ्यास है जो क्या एक मेज चाहिए में विदेशी कुंजी कॉलम के आदेश में निर्दिष्ट करता है?

तालिका में बहुत पहले कॉलम जा रहा है पी के विचार, सभी विदेशी कुंजी है, और फिर स्तंभ की तरह एक के लिए

मुझे लगता है कि तालिका के लिए प्रासंगिक thats ..

करने का अन्य तरीका यह है पीके को पहले कॉलम के रूप में, फिर सभी सहायक कॉलम, और फिर सभी विदेशी कुंजी ...

मुझे लगता है कि यह वास्तव में कोई फर्क नहीं पड़ता, लेकिन मैं इसके लिए अपने संगठन में एक मानक प्राप्त करना चाहता हूं। ..

+0

तालिका स्कीमा आरेख या लिस्टिंग होना बेहतर होगा, जो आपके संगठन का उपयोग लगातार तरीके से क्रमबद्ध होता है (पीके पहले और फिर fks, या एक रंग/फ़ॉन्ट में fks और fks में किसी अन्य ...), जो में है नामकरण सम्मेलनों के अलावा। – potatopeelings

+2

जब आप स्क्रैच से नई टेबल बनाते हैं तो सिफारिश के रूप में काम कर सकते हैं - लेकिन समय के साथ इसे बनाए रखना असंभव के बगल में होगा। इसके अलावा: कॉलम ऑर्डरिंग एक रिलेशनल डेटाबेस में अप्रासंगिक परिभाषा है - हम केवल अनियंत्रित tuples के बारे में बात कर रहे हैं, सब के बाद। तो किसी चीज में बहुत अधिक प्रयास न करें जो वास्तव में कोई मुद्दा नहीं है। –

+0

तालिकाओं की प्राथमिक कुंजी, उम्मीदवार कुंजी और विदेशी कुंजी का प्रतिनिधित्व करने वाले कॉलम (प्रत्येक को याद रखना कई कॉलमों में एक समग्र हो सकता है) ओवरलैप कर सकते हैं ताकि आपके मानक को काफी विशिष्ट होना आवश्यक हो ... लेकिन मुझे आश्चर्य होगा, मुझे आश्चर्य है? – onedaywhen

उत्तर

1

दिलचस्प विचार, लेकिन व्यक्तिगत रूप से मुझे लगता है कि इसके लिए "मेरे संगठन में एक मानक" होने से अच्छा से ज्यादा नुकसान होगा।

प्रशिक्षण और सर्वोत्तम प्रथाएं ठीक लगती हैं, लेकिन एक अंधेरे लागू नियम को "हानिकारक माना जाता है"।

+0

कारण है कि मैं पहले सभी विदेशी कुंजी देखना चाहता हूं, क्योंकि हमारी कुछ टेबलों में बहुत सारे कॉलम हैं, इसलिए चयन करने के दौरान क्या हो रहा है और सभी विदेशी कुंजी पहले सूचीबद्ध हैं, यह करना आसान है .. इस तरह के नियम को शुरू करने के बारे में सोचने का एकमात्र कारण है .. एल :) – FaNIX

+0

@coxymla: कोडिंग सम्मेलन आम तौर पर एक अच्छी बात है। लेकिन मैं ऐसी किसी भी नीति के लिए किनारे के मामले प्रदान कर सकता हूं जहां नियम के अपवाद को बेहतर बनाना बेहतर होगा। –

+0

हाँ, मैं निश्चित रूप से कोडिंग सम्मेलनों का विरोध नहीं कर रहा हूँ! यह सिर्फ इतना है कि मैं वास्तव में इस बिंदु को नहीं देख सकता। ऐसी टेबलें होंगी जहां सम्मेलन विशेष रूप से उपयुक्त हो सकता है और संभवतया संभवतः सारणी जहां यह काफी उपयुक्त नहीं होगा। लेकिन एक लागू नियम होने से आईएमओ की मदद नहीं मिलती है। – Coxy

3

मामूली बातों में कोई फर्क नहीं पड़ता, मुझे लगता है कि सबसे महत्वपूर्ण बात यह है कि आप कॉलम का नाम कैसे देते हैं। यह सुनिश्चित करना कि सभी प्रकार के सम्मेलन का पालन करने वाली विदेशी कुंजी विकास के दौरान आपके जीवन को आसान बना देगी।

उदाहरण के लिए सभी विदेशी कुंजी या कुछ समान _fk प्रत्यय जोड़ना।

तो जब वाहन कुंजी के रूप में उपयोग किया जाता है तो vehicle_id vehice_id_fk बन जाता है।

2

जहां मैंने काम किया है, मैंने पहले पीके देखा है, उसके बाद विदेशी कुंजी, फिर डेटा। लेकिन डीआरएल सही है; कोई फर्क नहीं पड़ता कि। ऑर्डर जिसमें आप मल्टी-कॉलम इंडेक्स निर्दिष्ट करते हैं, वह महत्वपूर्ण है, लेकिन उस क्रम में जिसमें आप तालिका में कॉलम निर्दिष्ट करते हैं। यदि आप _fk या _key या _id या इसी तरह के सम्मेलन के साथ विदेशी कुंजी कॉलम नामों को प्रत्ययित करते हैं तो यह आपके और आपके उत्तराधिकारी के लिए समय बचाएगा।

2

डीआरएल से सहमत। कॉलम ऑर्डरिंग के आधार पर एक सम्मेलन बनाए रखना मुश्किल होगा क्योंकि नए कॉलम जोड़े गए थे। इसके अलावा, अधिकांश डीबी ग्राहक आपको कॉलम और उनके पदनामों (पीके, एफके इत्यादि) की एक सूची दे पाएंगे।

1

बेहतर नियम नहीं है, मैं सुझाव दूंगा। नियम मूर्खों के लिए हैं।

क्या होगा यदि आपने ऐसा नियम पेश किया था, और कोई नई कुंजी जोड़ना चाहता था? या मौजूदा कुंजी में नया कॉलम जोड़ें? क्या वे ऐसा करने के लिए सभी कॉलम पुनर्व्यवस्थित करना चाहते हैं? मैं नहीं देख सकता कि आप इससे क्या हासिल करेंगे।

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

1

तालिका में विदेशी कुंजी कॉलम का क्रम नहीं है, और प्रासंगिक नहीं होना चाहिए। सबसे अच्छा मानक मैंने देखा है (कि समय के साथ खराब हो, स्वाभाविक रूप से, है):

  1. प्राथमिक कुंजी कॉलम
  2. नहीं NULL स्तंभों को "तय" लंबाई के होते हैं और उस बदलने की संभावना नहीं कर रहे हैं।
  3. नहीं NULL कॉलम कि संभावना है अद्यतन के माध्यम से आबादी होने के लिए
  4. नल स्तंभों को अद्यतन
  5. कॉलम, नल, या नहीं, कि लगभग हमेशा बदल के माध्यम से आबादी होने की संभावना है। (एक MOD_TIMESTAMP कॉलम के बारे में सोचें जिसका उपयोग स्टेटलेस आशावादी लॉकिंग के लिए किया जाता है।)

इस तरह के कार्यान्वयन का लक्ष्य अद्यतन पर आवश्यक लॉगिंग की मात्रा है।

एक प्रस्तुति परिप्रेक्ष्य से, एक सभ्य ईआरडी उपकरण को कॉलम और "लाइन" स्तर दोनों पर विदेशी कुंजी संदर्भ प्रस्तुत करना चाहिए।

इसके अलावा, मैं पहले जो सलाह देखी है उसका पालन नहीं करता - उदा। VEHICLE_ID_FK। केवल VEHICLE_ID को VEHICLE तालिका की बाल तालिका में रखें और आगे बढ़ें। यदि आपको एकाधिक VEHICLE_ID कॉलम की आवश्यकता है, तो उन्हें उचित रूप से टाइप करें, जैसे कि COPS_VEHICLE_ID और ROBBERS_VEHICLE_ID।

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