तालिका के बजाय दृश्य का उपयोग कब करें?


108

वास्तव में एक वास्तविक तालिका पर एक दृश्य का उपयोग कब किया जाना चाहिए? मुझे इस उत्पादन के लिए क्या लाभ की उम्मीद करनी चाहिए?

कुल मिलाकर, एक मेज पर एक दृश्य का उपयोग करने के क्या फायदे हैं? क्या मुझे उस तालिका को डिज़ाइन नहीं करना चाहिए जिस तरह से दृश्य को पहली जगह में देखना चाहिए?

जवाबों:


80

ओह, कई मतभेद हैं जिन पर आपको विचार करना होगा

चयन के लिए दृश्य:

  1. दृश्य तालिकाओं पर अमूर्तता प्रदान करते हैं। आप अपने अंतर्निहित स्कीमा को संशोधित किए बिना आसानी से एक दृश्य में फ़ील्ड जोड़ / हटा सकते हैं
  2. व्यू कॉम्प्लेक्स जॉइन को आसानी से मॉडल कर सकते हैं।
  3. दृश्य आपसे डेटाबेस-विशिष्ट सामान छिपा सकते हैं। जैसे अगर आपको Oracles SYS_CONTEXT फ़ंक्शन या कई अन्य चीजों का उपयोग करके कुछ चेक करने की आवश्यकता है
  4. आप वास्तविक तालिकाओं के बजाय अपने GRANTS को आसानी से विचारों पर सीधे प्रबंधित कर सकते हैं। यह प्रबंधित करना आसान है कि क्या आप जानते हैं कि एक निश्चित उपयोगकर्ता केवल एक दृश्य का उपयोग कर सकता है।
  5. दृश्य आपको पीछे की संगतता के साथ मदद कर सकते हैं। आप अंतर्निहित स्कीमा को बदल सकते हैं, लेकिन विचार उन तथ्यों को एक निश्चित ग्राहक से छिपा सकते हैं।

प्रविष्टि / अपडेट के लिए दृश्य:

  1. आप इस तरह की कार्यक्षमता का उपयोग करके व्यू के साथ सुरक्षा समस्याओं को देख सकते हैं, जो कि Oracle के "CHECK OPTION के साथ" क्लॉज सीधे दृश्य में है

कमियां

  1. आप संबंधों के बारे में जानकारी खो देते हैं (प्राथमिक कुंजी, विदेशी कुंजी)
  2. यह स्पष्ट नहीं है कि आप किसी दृश्य को सम्मिलित / अपडेट कर पाएंगे या नहीं, क्योंकि दृश्य आपके अंतर्निहित संकेतों को आपसे छिपाता है

3
त्वरित प्रश्न: क्या विचार "स्थायी" हैं, या क्या वे केवल सत्र के जीवन तक ही रहते हैं? कारण मैं पूछता हूं: हमारे पास एक प्रणाली है जो कभी-कभी लंबे कोड रन के बीच में नीचे जाती है। मैं कोड के अंशों को मध्यवर्ती तालिकाओं में काटकर इसे कम करता हूं जो मध्यवर्ती परिणाम बचाते हैं। इसलिए यदि कोड पूरा होने से पहले सिस्टम शंकु है, तो मुझे केवल अंतिम सहेजे गए अस्थायी तालिका से शुरू करना होगा। यदि वे समान स्थायित्व की पेशकश करते हैं तो मैं विचारों का उपयोग कर सकता हूं। अन्यथा मैं बस वही करता रहूंगा, और रन के अंत में टेम्पों को छोड़ दूंगा। धन्यवाद!
इयोनोमोस

8
@ यूओनोस: एक सामान्य दृश्य में कोई डेटा नहीं होता है। यह सिर्फ एक संग्रहीत SQL कथन है, अर्थात अंतर्निहित डेटा पर एक दृश्य। कुछ डेटाबेस (जैसे Oracle, PostgreSQL) भौतिक विचारों का समर्थन करते हैं, जो "व्यू" को अस्थायी रूप से तेज़ एक्सेस के लिए किसी अन्य तालिका में संग्रहीत करते हैं। जब दृश्य जटिल होता है तो रीड एक्सेस को गति देने के लिए ऐसा किया जाता है। लेकिन यह आपके मामले में आपकी मदद नहीं करता है क्योंकि एक भौतिक दृष्टिकोण अभी भी एक दृश्य है, अपने दम पर डेटा नहीं। आपका दृष्टिकोण शायद ठीक है।
लुकास ईडर

44

दृश्य कर सकते हैं:

  • एक जटिल तालिका संरचना को सरल बनाएं
  • आपको संवेदनशील डेटा को फ़िल्टर करने और सरल तरीके से अनुमतियाँ असाइन करने की अनुमति देकर अपने सुरक्षा मॉडल को सरल बनाएं
  • आपको आउटपुट संरचना को बदले बिना तर्क और व्यवहार को बदलने की अनुमति दें (आउटपुट समान रहता है लेकिन अंतर्निहित SELECT काफी बदल सकता है)
  • प्रदर्शन बढ़ाएँ (Sql सर्वर अनुक्रमित दृश्य)
  • विशिष्ट क्वेरी ऑप्टिमाइज़ेशन को उस दृश्य के साथ प्रस्तुत करें जो अन्यथा चमकाना मुश्किल हो सकता है

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

इसके अलावा, यह पूछना कि "एक मेज पर एक दृश्य का उपयोग करने के फायदे क्या हैं?" एक महान तुलना नहीं है। आप तालिकाओं के बिना नहीं जा सकते, लेकिन आप बिना विचारों के कर सकते हैं। वे प्रत्येक बहुत अलग कारण से मौजूद हैं। तालिकाएँ ठोस मॉडल हैं और दृश्य एक सार, अच्छा, दृश्य हैं।


1
+1 दृश्य आंशिक रूप से एक उपकरण है जो एक जटिल, सामान्यीकृत मॉडल से उत्पन्न होने वाली जटिलताओं को कम करता है, जो आपको उस जटिलता को अमूर्त करने की अनुमति देता है।
मेट्सोस

34

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

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

दृश्य का उपयोग यह सुनिश्चित करने के लिए किया जा सकता है कि उपयोगकर्ताओं के पास केवल रिकॉर्ड के एक सेट तक पहुंच है - उदाहरण के लिए, किसी विशेष क्लाइंट के लिए तालिकाओं का दृश्य और तालिकाओं पर कोई सुरक्षा अधिकार का मतलब नहीं हो सकता है कि उस ग्राहक के लिए उपयोगकर्ता केवल कभी डेटा देख सकते हैं उस ग्राहक के लिए।

डेटाबेस को रीफ्रैक्ट करने पर व्यू बहुत मददगार होते हैं।

जब आप विचारों को कॉल करने के लिए विचारों का उपयोग करते हैं तो दृश्य स्वीकार्य नहीं होते हैं जिसके परिणामस्वरूप भयानक प्रदर्शन हो सकता है (कम से कम SQL सर्वर में)। हमने लगभग एक मल्टीमिलीयन डॉलर क्लाइंट खो दिया क्योंकि किसी ने डेटाबेस को एब्सट्रैक्ट करने के लिए चुना था, जिस तरह से और प्रदर्शन भयावह था और बार-बार टाइमआउट होता था। हमें फिक्स के लिए भी भुगतान करना था, क्लाइंट को नहीं, क्योंकि प्रदर्शन का मुद्दा पूरी तरह से हमारी गलती थी। जब दृश्य कॉल दृश्य होते हैं, तो उन्हें अंतर्निहित दृश्य को पूरी तरह से उत्पन्न करना होगा। मैंने इसे देखा है, जहां दृश्य को एक दृश्य कहा जाता है, जिसे एक दृश्य कहा जाता है और उपयोगकर्ता के तीनों को देखने के लिए लाखों रिकॉर्ड बनाए गए थे ताकि अंततः इसकी आवश्यकता हो। मुझे याद है कि इनमें से एक दृश्य को रिकॉर्ड्स की एक साधारण गणना (*) करने में 8 मिनट का समय लगा था। दृश्य कॉलिंग दृश्य एक बेहद खराब विचार है।

रिकॉर्ड को अद्यतन करने के लिए उपयोग करने के लिए दृश्य अक्सर एक बुरा विचार होते हैं क्योंकि आमतौर पर आप केवल उसी तालिका से फ़ील्ड्स को अपडेट कर सकते हैं (फिर से यह SQL सर्वर है, अन्य डेटाबेस भिन्न हो सकते हैं)। यदि ऐसा है, तो यह वैसे भी टेबल को सीधे अपडेट करने के लिए अधिक समझ में आता है ताकि आप जान सकें कि कौन से क्षेत्र उपलब्ध हैं।


1
नहीं पता था कि दृश्य कॉलिंग दृश्य के साथ एक प्रदर्शन मुद्दा था। यह अजीब लगता है। क्या यह सही ढंग से क्वेरी ऑप्टिमाइज़र द्वारा नियंत्रित नहीं किया गया है? आपके मामले में SQL सर्वर का कौन सा संस्करण इस्तेमाल किया गया था?
पैट्रिक ऑनोरेज़

7

जब आपको कई तालिकाओं से चयन करने की आवश्यकता होती है, या किसी तालिका का सबसेट प्राप्त करने के लिए दृश्य आसान होते हैं।

आपको अपनी तालिकाओं को इस तरह से डिजाइन करना चाहिए कि आपका डेटाबेस अच्छी तरह से सामान्यीकृत हो (न्यूनतम दोहराव)। यह क्वेरी को कुछ हद तक कठिन बना सकता है।

दृश्य जुदाई का एक सा है, तो आप करने के लिए अनुमति नहीं है देखने को अलग ढंग से टेबलों में डेटा की तुलना में वे जमा हो जाती है।


7

एक सामान्य अभ्यास उपयोगकर्ता को एक और अधिक डेटा मॉडल प्रस्तुत करने के लिए दृश्य को छिपाने के लिए है। अन्य उपयोगों में सुरक्षा शामिल है (उदाहरण के लिए कुछ कॉलम और / या पंक्तियों को छिपाकर) या प्रदर्शन (भौतिक विचारों के मामले में)


6

आपको विचारों पर विचार किए बिना अपनी तालिका डिज़ाइन करनी चाहिए।
जुड़ने और शर्तों को बचाने के अलावा, दृश्य का प्रदर्शन लाभ होता है: SQL सर्वर इसकी निष्पादन योजना की गणना कर सकता है और दृश्य में सहेज सकता है, और इसलिए इसे "मक्खी पर" SQL कथनों से तेज बनाता है।
फ़ील्ड स्तर पर उपयोगकर्ता की पहुँच से संबंधित आपके काम को आसानी से देख सकते हैं।


5

सबसे पहले, जैसा कि नाम से पता चलता है कि यह अपरिवर्तनीय है। क्योंकि दृश्य डीबी में एक संग्रहीत क्वेरी से बनाई गई आभासी तालिका के अलावा और कुछ नहीं है। इस वजह से आपके पास विचारों की कुछ विशेषताएं हैं:

  • आप केवल डेटा का एक सबसेट दिखा सकते हैं
  • आप एक ही दृश्य में कई तालिकाओं में शामिल हो सकते हैं
  • आप एक दृश्य में डेटा एकत्र कर सकते हैं (गिनती का चयन करें)
  • न तो वास्तव में डेटा पकड़, वे किसी भी टेबलस्पेस की जरूरत नहीं है क्योंकि वे अंतर्निहित तालिकाओं के आभासी एकत्रीकरण हैं

इसलिए ऐसे गजलों के उपयोग के मामले हैं जिनके लिए तालिकाओं की तुलना में विचार बेहतर हैं, केवल एक वेबसाइट पर सक्रिय उपयोगकर्ताओं को प्रदर्शित करने के बारे में सोचें। एक दृश्य बेहतर होगा क्योंकि आप केवल उस डेटा के सबसेट पर काम करते हैं जो वास्तव में आपके DB (सक्रिय और निष्क्रिय उपयोगकर्ताओं) में है

इस लेख को देखें

उम्मीद है कि इस मदद की ..


2

विकिपीडिया के अनुसार ,

तालिकाओं पर दृश्य कई लाभ प्रदान कर सकते हैं:

  • दृश्य तालिका में निहित डेटा के सबसेट का प्रतिनिधित्व कर सकते हैं
  • दृश्य बाहरी दुनिया में अंतर्निहित तालिकाओं के संपर्क की डिग्री को सीमित कर सकते हैं: किसी दिए गए उपयोगकर्ता को दृश्य को क्वेरी करने की अनुमति हो सकती है, जबकि शेष आधार तालिका तक पहुंच से वंचित।

  • दृश्य एक ही आभासी तालिका में कई तालिकाओं को जोड़ और सरल कर सकते हैं

  • दृश्य कुल तालिकाओं के रूप में कार्य कर सकते हैं , जहां डेटाबेस इंजन डेटा (योग, औसत, आदि) को एकत्र करता है और गणना किए गए परिणामों को डेटा के भाग के रूप में प्रस्तुत करता है।

  • दृश्य डेटा की जटिलता को छिपा सकते हैं । उदाहरण के लिए, एक दृश्य Sales2000 या Sales2001 के रूप में प्रकट हो सकता है, वास्तविक अंतर्निहित तालिका को पारदर्शी रूप से विभाजित कर सकता है।

  • दृश्य संग्रह करने के लिए बहुत कम जगह लेते हैं ; डेटाबेस में केवल एक दृश्य की परिभाषा होती है, न कि सभी डेटा की एक प्रति जो वह प्रस्तुत करता है।

  • उपयोग किए गए SQL इंजन के आधार पर दृश्य अतिरिक्त सुरक्षा प्रदान कर सकते हैं

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