क्या यह मेरे अन्य प्रश्नों को सरल बनाने के लिए कंपनी तालिका में एक अन्य (अनावश्यक) संबंध देने का एक बुरा अभ्यास है?
हाँ, बिल्कुल, के रूप में यह है जब आप कंपनी के लिए कंपनी या अनुभाग के लिए संबंधों ग्राहक को अद्यतन हर अनावश्यक संबंध को अद्यतन करने का मतलब होगा - और अगर आप किसी भी तरह के अद्यतन याद आती है, अब आप एक डेटाबेस अनावश्यक डेटा से भरा है। यह एक बुरा denormalization है।
यदि आपका बिंदु केवल अपने SQL को सरल बनाना है, तो "डेटा को साथ लाने" के विचारों का उपयोग करने पर विचार करें। यहाँ एक राय यह है कि अनुबंध में company_id खींचती द्वारा, ग्राहक के माध्यम से शामिल होने के लिए:
create view contract_customer as
select
a.*,
b.contract_id, b.company_id
from
contract a
join customer b on (a.customer_id = b.customer_id);
इस में शामिल होने के लिए सरल है, लेकिन क्यों यह अधिक से अधिक दोहराने? इसे एक बार लिखें, और फिर अन्य प्रश्नों में दृश्य का उपयोग करें।
कई (लेकिन सभी नहीं) आरडीबीएमएसएस भी शामिल होने का अनुकूलन कर सकते हैं यदि आप चुनिंदा सूची में ग्राहक से कोई कॉलम नहीं रखते हैं या जब तक आप अनुबंध करते हैं, तब तक क्वेरी के आधार पर क्वेरी का खंड कहां है। कस्टमर_आईडी ग्राहक.customer_id पर एक विदेशी कुंजी संदर्भित अखंडता बाधा है। (इस तरह की बाधा की अनुपस्थिति में, शामिल नहीं किया जा सकता है, क्योंकि यह अनुबंध के लिए संभव होगा। कस्टमर_आईडी मौजूद है जो ग्राहक में मौजूद नहीं था। चूंकि आप कभी भी नहीं चाहते हैं, तो आप विदेशी कुंजी बाधा जोड़ें।)
दृश्य का उपयोग करके आप जो चाहते हैं उसे प्राप्त करते हैं, बच्चे के टेबल को अपडेट करने के समय के बिना, अनावश्यक कॉलम जोड़कर बच्चे पंक्तियों को व्यापक बनाने के स्थान के ऊपरी हिस्से के बिना (और यह वास्तव में शुरू होता है जब माता-पिता अद्यतन किया जाता है, लेकिन बच्चे नहीं बात करने के लिए आप कई पंक्तियों है जब, के रूप में व्यापक पंक्ति, कम पंक्तियां एक ही बार में स्मृति में फिट कर सकते हैं), और सबसे महत्वपूर्ण बात, असंगत डेटा की संभावना के बिना।
शब्द "रिलेशनशिप" का अर्थ यह नहीं है कि आप इसका क्या अर्थ रखते हैं। संबंधपरक डेटाबेस मॉडल में ए * संबंध * अधिकांश लोगों द्वारा तालिका को कॉल करने के अनुरूप होता है। अलग-अलग तालिकाओं में डेटा के बीच संबंधों के साथ इसका कोई लेना-देना नहीं है। – sqlvogel
हाँ, आप सही हैं। मैंने इसे सही कर दिया है। – svenwltr
@SvenWalter कृपया कोड ब्लॉक ('
') में तालिका के साथ प्रश्न अपडेट करें क्योंकि बाहरी छवि फ़ाइल अब उपलब्ध नहीं है। मैं एसई में उचित तालिकाओं के दर्द का दर्द साझा नहीं करता हूं (देवताओं को कभी भी इसे उपलब्ध कराने पर कठोर नहीं होता है), लेकिन कम से कम हम उन्हें बाहरी उपकरणों पर भरोसा करने के बजाय कोड ब्लॉक के साथ अनुकरण कर सकते हैं। – ADTC