ROWGUIDCOL के रूप में पीके या एक अलग पंक्तिबद्ध कॉलम का उपयोग करें?


9

यहां एक लंबी-लंबी बहस चल रही है इसलिए मैं अन्य राय सुनना चाहूंगा।

मेरे पास अद्वितीय पहचानकर्ता पीके के साथ कई टेबल हैं। क्या यह एक अच्छा विचार है, यहाँ से बाहर है (और यह जल्द ही कभी भी बदलने वाला नहीं है)।

अब, डेटाबेस को प्रकाशित किया जाना है और DEV, मौजूदा PK को ROWGUIDCOL के रूप में चिह्नित करने के बजाय एक अलग पंक्तिबद्ध कॉलम के उपयोग की वकालत कर रहे हैं।

असल में, वे कहते हैं कि एप्लिकेशन को कभी भी अपने डोमेन में नहीं लाना चाहिए जो केवल प्रतिकृति द्वारा उपयोग किया जाता है (यह उनके लिए केवल "डीबीए सामान" है)।

एक प्रदर्शन के दृष्टिकोण से, मुझे कोई कारण नहीं दिखता है कि मुझे एक नया कॉलम जोड़ना चाहिए जिससे मैं मौजूदा किसी के साथ कुछ कर सकूं। इसके अलावा, चूंकि यह केवल "डीबीए सामान" है, तो डीबीए को क्यों नहीं चुनने दिया?

मैं DEVs की बात को समझता हूं, लेकिन मैं अभी भी असहमत हूं।

विचार?

संपादित करें: मैं सिर्फ यह जोड़ना चाहता हूं कि मैं इस बहस में अल्पमत में हूं और मेरी स्थिति पर सवाल उठाने वाले DEV ऐसे लोग हैं जिनका मैं सम्मान और विश्वास करता हूं। यही कारण है कि मैंने राय मांगने के लिए सहारा लिया।
मुझे भी कुछ याद आ रहा है और उनकी बात को गलत समझा जा सकता है।


क्या कोई मौका है कि पीके मूल्य को भविष्य में बदलने की आवश्यकता हो सकती है?
रॉबर्ट एल डेविस

नहीं वास्तव में नहीं। यह एक सरोगेट कुंजी है, इसलिए ऐप वास्तव में उस कॉलम के साथ बहुत कुछ नहीं करता है। यह कभी नहीं बदलता है और यह उपयोगकर्ताओं को कभी प्रदर्शित नहीं होता है।
स्पेगेटीडैबा

वे एक अलग rowguidcol क्यों चाहते हैं? और सामान्य तौर पर वे कौन सी योजना का चयन करेंगे, यदि वे पीके के लिए कर सकते हैं, और क्यों?
जस्टिनसी

@spaghettidba क्रॉसिंग डोमेन की बात करते हुए, आप कितनी बार उन्हें बताते हैं कि उन्हें अपने ऐप कोड में कौन से डिज़ाइन पैटर्न का उपयोग करना चाहिए या नहीं करना चाहिए? शायद वे अपने "डोमेन" से चिपके रहें? ;-)। इसके अलावा, सभी तालिकाओं में 16 बाइट कॉलम जोड़ने से प्रदर्शन के लिए भयानक होगा और कोई लाभ नहीं मिलेगा।
सोलोमन रटज़की

जवाबों:


7

असल में, वे कहते हैं कि एप्लिकेशन को कभी भी अपने डोमेन में नहीं लाना चाहिए जो केवल प्रतिकृति द्वारा उपयोग किया जाता है (यह उनके लिए केवल "डीबीए सामान" है)।

मैं पूरी तरह से सहमत हूँ। लेकिन ... प्राथमिक कुंजी का उपयोग केवल प्रतिकृति के लिए नहीं किया जाता है (संभवतः एप्लिकेशन इसे किसी तरह से उपयोग करता है )। इस संदर्भ में तर्क का कोई मतलब नहीं है।

किसी भी घटना में, जहाँ तक मुझे जानकारी है, इस "डीबीए सामान" के लिए केवल २ ही तरीके हैं, जो सीमा पार करने के लिए हैं:

  1. यदि एप्लिकेशन ऐसे प्रश्नों का उपयोग कर रहा है जो ROWGUIDCOLकॉलम को इस तरह संदर्भित करते हैं :

    DECLARE @a table (id uniqueidentifier ROWGUIDCOL);
    
    SELECT ROWGUIDCOL FROM @a;
    

    मैं मान रहा हूं कि आपके किसी भी कॉलम में यह संपत्ति नहीं है, इसलिए एप्लिकेशन ऐसा नहीं कर रहा है। (वैसे, ROWGUIDCOLप्रतिकृति से एक पूरी तरह से अलग अवधारणा है। यह सिर्फ इतना होता है कि मर्ज प्रतिकृति इसका उपयोग करती है।)

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

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


जवाब के लिए धन्यवाद। नहीं, आवेदन नहीं कर रहा है 1. और न ही 2. पूर्णता के लिए, कुछ तालिकाओं को पहले से ही PK में ROWGUIDCOL संपत्ति से सजाया गया है।
स्पेगेटिडिबा

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

@spaghettidba: हाँ, मैं इस बात से पूरी तरह सहमत हूँ कि यदि प्रतिकृति कार्ड में है, तो डेटाबेस को निश्चित रूप से इसके लिए डिज़ाइन किया जाना है। अक्सर केवल सर्वोत्तम प्रथाओं का पालन करने से वहां अधिकतर रास्ते मिल जाएंगे; यह बदसूरत, बालों वाली विरासत डेटाबेस है जो सबसे अधिक डिजाइन की समस्या रखते हैं। मेरे अनुभव से, विशेष रूप से मर्ज प्रतिकृति अन्य प्रतिकृति तंत्रों की तुलना में अधिक चुनौतीपूर्ण है।
जॉन सीगल

@spaghettidba और जॉन: बस FYI करें, ROWGUIDCOLउस संदर्भ का उपयोग (अर्थात CREATE TABLE/ एक ALTER TABLEबयान में नहीं ) कम से कम SQL Server 2008 R2 (FeatureID 182 के लिए खोज) के पक्ष में पदावनत किया गया है $ROWGUID
सोलोमन रटज़की

6

मैं सहमत हूँ। जब तक पीके मूल्य को बदलने में सक्षम होने की आवश्यकता नहीं है, तब तक मौजूदा यूनीकॉलीफायर कॉलम को रोइंगगिडोल के रूप में उपयोग करना बेहतर होगा।


5

"मूल रूप से, वे कहते हैं कि आवेदन को कभी भी अपने डोमेन में नहीं लाना चाहिए जो केवल प्रतिकृति द्वारा उपयोग किया जाता है (यह उनके लिए केवल" डीबीए सामान "है)।"

लेकिन यह केवल प्रतिकृति के लिए उपयोग नहीं किया जाता। यह भी (और पहले से ही) आपका पीके है।

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