क्या यह कभी समझ में नहीं आता है कि एक से एक रिश्तों के लिए संक्षेपण नहीं है?


12

अगर हमारे पास टेबल ए है, जिसका टेबल बी के साथ एक से एक संबंध है, तो क्या कभी उन्हें अलग रखने का कोई मतलब है? या उन्हें एक ही तालिका में संयोजित करने के लिए कभी चोट नहीं लगती है? क्या इनमें से कोई भी परिदृश्य (दो टेबल बनाम एक संयुक्त तालिका) अपने सामान्य रूप (1NF, 2NF, 3NF, आदि) के संबंध में कुछ भी प्रभावित करता है?


5
क्या आपका मतलब 1-से-1 या 1-से-0 या-1 है?
jpmc26

जवाबों:


30

हां, कई कारण हैं कि यह बेहतर डिजाइन क्यों हो सकता है।

आपके पास एक वंशानुक्रम / विस्तार संबंध हो सकता है, उदाहरण के लिए आपके पास एक Userतालिका हो सकती है और फिर एक Administratorतालिका जिसमें अधिक फ़ील्ड हैं। दोनों तालिकाओं में उपयोगकर्ता आईडी की प्राथमिक कुंजी हो सकती है (और इसलिए 1: 1 संबंध है) लेकिन सभी उपयोगकर्ताओं के पास Administratorतालिका में रिकॉर्ड नहीं होगा । यदि आप वर्कफ़्लो का समर्थन कर रहे हैं, तो आपको कुछ इसी तरह की आवश्यकता होगी, जैसे एक ScheduledTaskटेबल और CompletedTaskटेबल।

आप आमतौर पर उपयोग किए जाने वाले डेटा के लिए एक हल्की तालिका चाहते हैं Userऔर फिर विवरण के लिए एक बड़ी तालिका की आवश्यकता होती है जो आपको बहुत बार नहीं चाहिए UserDetails। यह प्रदर्शन में सुधार कर सकता है क्योंकि आप एकल डेटा पृष्ठ में अधिक रिकॉर्ड फिट करने में सक्षम होंगे।

आप तालिकाओं के लिए, Userऔर जैसे विभिन्न अनुमतियाँ चाहते हो सकता हैUserCredentials

आप अलग-अलग बैकअप रणनीति चाहते हैं और इसलिए अलग-अलग विभाजन, जैसे Transactionऔर पर दो तालिकाओं को रख सकते हैंTransactionArchive

आपको एक ही तालिका में समर्थित से अधिक स्तंभों की आवश्यकता हो सकती है, उदाहरण के लिए यदि बहुत बड़े पाठ स्तंभ हैं, जिन्हें आपको अनुक्रमणित करने में सक्षम होने की आवश्यकता है और आपका DB प्लेटफ़ॉर्म 4K डेटा पेज या व्हाट्सएव तक सीमित है।


यदि आपकी तालिका में डेटाबेस सिस्टम द्वारा समर्थित से अधिक कॉलम हैं, तो आपको एक डिज़ाइन समस्या है। लेकिन अन्यथा, आपका जवाब ध्वनि है।
रॉबर्ट हार्वे

2
सहमत ... मैं एक संपूर्ण सूची के लिए कोशिश कर रहा हूं, प्रत्येक कारण पर संपादकीय नहीं।
जॉन वू

वर्कफ़्लोज़ में आपकी पृष्ठभूमि क्या है? क्या आपके पास विशिष्ट सॉफ़्टवेयर है जो आप उपयोग करते हैं? क्या आपने अपना वर्कफ़्लो सिस्टम रोल किया है?
रॉबर्ट हार्वे

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

4
लिंक "एक संबंधपरक डेटाबेस में एक-से-एक संबंध तब होता है जब एक पैरेंट रिकॉर्ड या फ़ील्ड में केवल शून्य या एक चाइल्ड रिकॉर्ड होता है।"
जॉन वू

6

@ John-wu द्वारा उत्कृष्ट उत्तर में जोड़ना, एक और कारण है जब आपके पास चित्र की तरह एक BLOB प्रकार का कॉलम होता है।

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


3

जब आप टेबल बी में संबंधित रिकॉर्ड वैकल्पिक होना चाहते हैं, तो एक से एक संबंध केवल वास्तव में समझ में आते हैं

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

उदाहरण के लिए:

type Transaction(The_Type: PaymentType := Cash) is record

    Amount: Integer;

    case The_Type is
        when Cash =>
            Discount: boolean;
        when Check =>
            CheckNumber: Positive;
        when Credit =>
            CardNumber: String(1..5);
            Expiration: String(1..5);
    end case;
end record;

यदि यह वैकल्पिक है तो यह कैसे अलग है यह सब एक तालिका में होना और सिर्फ उन कॉलम का चयन करना है जो आप चाहते हैं?
29 वा साल्टशकर

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

2

व्यावसायिक मॉडलिंग में, दो इकाइयाँ A और B, जो तार्किक रूप से एक व्यवसायिक दृष्टिकोण से अलग हैं, आमतौर पर अलग-अलग तालिकाओं में मैप होती हैं।

उदाहरण के लिए, ऑब्जेक्ट ओरिएंटेड साधनों के साथ बिजनेस मॉडलिंग करते समय, आपके पास आमतौर पर किसी प्रकार की ऑब्जेक्ट-रिलेशनल मैपिंग होती है। आप किसी ऑब्जेक्ट मॉडल से शुरू कर सकते हैं और अपने रिलेशनल मॉडल को उससे प्राप्त कर सकते हैं। तो अपने ऑब्जेक्ट मॉडल में कल्पना करें कि आपने ए और बी कक्षाएं बनाई हैं, हालांकि, वस्तुओं में 1: 1 पत्राचार है, एकल जिम्मेदारी सिद्धांत के कारण अलग रहना चाहिए । अपने ऑब्जेक्ट मॉडल में ध्यान दें, ये कक्षाएं केवल विशेषताओं के साथ टेबल नहीं हैं, वे व्यापारिक वस्तुओं का प्रतिनिधित्व कर सकती हैं, कुछ तरीकों में लागू व्यवहार के साथ। और जब आप उन कक्षाओं को मैप करते हैं जो अब एक रिलेशनल मॉडल के लिए सीधा हैं, तो आपको 1: 1 संबंध के साथ अलग-अलग टेबल ए और बी मिलते हैं।

मेरे अनुभव के अनुसार, व्यवसाय या OO डेटा मॉडल बनाते समय, यह तार्किक पृथक्करण प्रदर्शन, व्यक्तिगत सुरक्षा या विभाजन जैसे "भौतिक" कारणों से 1: 1 संबंधों के लिए कहीं अधिक विशिष्ट है।


क्या आप इसका कोई ठोस उदाहरण दे सकते हैं?
29 वीं साल्टशकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.