2016-02-22 6 views
5

मेरे पास डेटाबेस में टेबल फ़ील्ड नामकरण के बारे में एक व्यावहारिक प्रश्न है। उदाहरण के लिए, मेरे पास दो टेबल हैं:टेबल फ़ील्ड नामकरण सम्मेलन और एसक्यूएल स्टेटमेंट

student (id int; name varchar(30)) 
teacher (id int, s_id int; name varchar(30)) 

दो टेबल में 'आईडी' और "नाम" दोनों हैं। एसक्यूएल कथन में, यदि कोई टेबल नाम उपसर्ग नहीं किया गया है तो यह दोनों के लिए संदिग्ध होगा। दो विकल्प: SQL में एक क्षेत्र के उपसर्ग के रूप में

  1. उपयोग तालिका नाम 'जहां' खंड
  2. उपयोग पहले से जुड़ा हुआ तालिकाओं में फ़ील्ड नाम ताकि कोई उपसर्ग 'जहां' खंड में इस्तेमाल किया जाएगा।

कौन सा बेहतर है?

उत्तर

2

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

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

इन चीजों को सोचने के लायक है, लेकिन अंत में स्थिरता अधिक महत्वपूर्ण कारक हो सकती है। मैं id बजाय student_id के आसपास बनाया गया तालिकाओं के साथ सौदा कर सकते हैं, लेकिन मैं वर्तमान में एक असंगत स्कीमा निम्न में से सभी का उपयोग करता है के साथ काम कर रहा हूँ: id, sid, systemid और taskid की तरह विशिष्ट नाम। यह दोनों दुनिया में सबसे खराब है।

+1

हां, हमेशा एक क्वेरी में ** सभी ** कॉलम संदर्भों को अर्हता प्राप्त करें। यह क्वेरी को भविष्य में तोड़ने से रोकता है जब कोई तालिका में कॉलम जोड़ता है (अस्पष्ट कॉलम संदर्भ त्रुटियों को प्रस्तुत करता है)। और, यह बाद में पाठक को एसक्यूएल को समझने में आसान बनाता है ... कि 'foobar' कॉलम' के अयोग्य संदर्भ ... यह है कि 'फीस' तालिका में कॉलम का संदर्भ, 'fi' तालिका या' फॉ टेबल? (क्या आपको टेबल परिभाषाओं के माध्यम से शिकार करने की हिम्मत नहीं है, यह जानने के लिए कि कौन सी तालिका संदर्भित करती है।) लेकिन मेरी निजी वरीयता कॉलम 'आईडी' नाम देना है जहां यह प्राथमिक (या अद्वितीय) कुंजी है। – spencer7593

0

यदि यह बहुत लंबा नहीं मिलता है, तो मैं तालिका में स्वयं को उपसर्ग करना पसंद करता हूं, उदा। teacher.teacher_id, student.student_name। इस तरह, आप हमेशा सुनिश्चित हैं कि आप किस नाम या आईडी के बारे में बात कर रहे हैं, भले ही आप टेबल नाम उपसर्ग करने के लिए हों।

3

बिना किसी संदेह के, विकल्प 1 के साथ जाएं। यह किसी भी प्रकार के डेटाबेस में मान्य एसक्यूएल है और उचित और सबसे पठनीय प्रारूप माना जाता है। टेबल नाम को कॉलम पर उपसर्ग करना और आदत में होने पर बहुत जरूरी है। मैंने जो देखा है उसका एकमात्र अपवाद आईडी नाम के साथ आईडी कॉलम को उपसर्ग कर रहा है, लेकिन मैं अभी भी ऐसा नहीं करूँगा।
यदि आप विकल्प 2 के साथ जाते हैं, तो अनुभवी डीबीए की संभावना शायद आपको इंगित करेगी और हंस जाएगी।
आगे के प्रमाण के लिए, यहां # 2 देखें: https://www.periscopedata.com/blog/better-sql-schema.html
और यहां। नियम 1 बी - http://www.isbe.net/ILDS/pdf/SQL_server_standards.pdf

टीटी का उल्लेख है, यदि आप टेबल नाम के लिए alias का उपयोग करना सीखते हैं तो आप अपना जीवन अधिक आसान बना देंगे। यह इस तरह के रूप में, अपने प्रश्न में SomeTableNameThatsWayTooLong as long_table का उपयोग कर के रूप में सरल है:

SELECT LT.Id FROM SomeTableNameThatsWayTooLong AS LT 
+1

तो अधिक प्राथमिकता दी जाएगी, मैं क्षेत्र के नाम का इस्तेमाल नहीं करना चाहिए जैसे "student_ID", "teach_ID", "student_name", "teacher_name", लेकिन दोनों टेबलों में बस "आईडी" और "नाम"। सही? – marlon

+0

किस डेटाबेस में "student_id" नामक कॉलम अवैध SQL पर ले जाएगा? – Bampfer

+0

मैंने यह नहीं कहा कि यह अमान्य एसक्यूएल का कारण बन जाएगा। मैंने कहा कि बस 'आईडी' या 'नाम' का उपयोग करना हमेशा तब तक वैध होता है जब तक आप टेबल नाम के साथ अर्हता प्राप्त नहीं करते। हर कॉलम student_id, student_name, student_dorm, student_major, आदि नामकरण आपके देवताओं को पागल करने जा रहा है और अनावश्यक है। – Ageonix

2

मैं टेबल नामों के बजाय उपनाम का उपयोग करूंगा।

आप एक क्वेरी में एक तालिका में alias असाइन कर सकते हैं, जो तालिका नाम से छोटा है। यह क्वेरी को और अधिक पठनीय बनाता है।उदाहरण:

SELECT 
    t.name AS teacher_name, 
    s.name AS student_name 
FROM 
    teacher AS t 
    INNER JOIN student AS s ON 
     s.id=t.s_id; 

आप निश्चित रूप से तालिका नाम का उपयोग कर सकते है अगर आप उपनाम का प्रयोग नहीं करते, और कहा कि अपने विकल्प 2.

उस मामले में
+2

व्यक्तिगत रूप से, मैं विदेशी कुंजी कॉलम को पैटर्न ** 'referenced_table_id' के नाम पर नामित करना चाहता हूं। ** उदाहरण के लिए, 's_id' के बजाय' student_id'। इसके अलावा, यह वह पैटर्न है जिसका मैं अनुसरण करता हूं। – spencer7593

+1

उपनाम का उल्लेख करने पर अच्छा कॉल '। हमारे डीबीए का उपयोग पागल लंबे नामों का उपयोग करता है और प्रत्येक कॉलम को थकाऊ होने से पहले StudentClassListDetails टाइप करना। सिंटैक्स डेटाबेस प्रकार पर निर्भर करता है, लेकिन मुझे लगता है कि उनमें से अधिकतर 'छात्र क्लासलिस्ट डिस्प्ले स्केल के रूप में' – Ageonix

+1

@ spencer7593 गुड प्वाइंट के रूप में सरल हैं, जिनके पास बहुत से तालिकाओं के साथ बड़े डेटाबेस में भ्रम से बचने के लिए स्पष्ट नाम महत्वपूर्ण हैं। –

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