SQL विचारों का उपयोग करने का एक अच्छा कारण क्या है?


98

मैं SQL Server 2008 बाइबिल के माध्यम से पढ़ रहा हूं और मैं विचार अनुभाग को कवर कर रहा हूं। लेकिन लेखक वास्तव में विचारों के उद्देश्य की व्याख्या नहीं करता है । विचारों के लिए एक अच्छा उपयोग क्या है? क्या मुझे उन्हें अपनी वेबसाइट में उपयोग करना चाहिए और उनके क्या लाभ हैं?


क्या आप मुझे उस पुस्तक "SQL Server 2008 बाइबिल" की डेटाबेस फाइलें प्रदान कर सकते हैं? लेखक की वेबसाइट मर चुकी है और मैं उस तक नहीं पहुँच सकता।

जवाबों:


92

एक अन्य उपयोग जो पिछले उत्तरों में से कोई भी प्रतीत नहीं होता है, वह तालिका संरचना परिवर्तनों की आसान तैनाती है।

कहते हैं, आप T_OLDसक्रिय उपयोगकर्ताओं के लिए डेटा युक्त एक तालिका ( ) को रिटायर करना चाहते हैं , और इसके बजाय समान डेटा (नाम T_NEW) के साथ एक नई तालिका का उपयोग करते हैं, लेकिन एक सक्रिय स्तंभ के साथ सक्रिय उपयोगकर्ताओं के लिए डेटा है active

यदि आपके सिस्टम में गज़िल के प्रश्न हैं SELECT whatever FROM T_OLD WHERE whatever, तो आपके पास रोल-आउट के लिए दो विकल्प हैं:

1) कोल्ड तुर्की - डीबी बदलें, और एक ही समय में, कोड के कई टुकड़ों को बदलें, परीक्षण करें और जारी करें जिसमें कहा गया प्रश्न शामिल था। बहुत मुश्किल (या समन्वय भी), बहुत जोखिम भरा है। खराब।

2) क्रमिक - बनाने के द्वारा डीबी बदलने T_NEWकी मेज, छोड़ने T_OLDकी मेज और बजाय एक बनाने दृश्य कहा जाता है T_OLDकि नकल करता T_OLDतालिका 100% (जैसे दृश्य क्वेरी है SELECT all_fields_except_active FROM T_NEW WHERE active=1)।

कि आप किसी भी कोड से है कि वर्तमान में चयन को रिहा से बचने के लिए अनुमति होगी T_OLD, और से विस्थापित कोड में परिवर्तन करने के T_OLDलिए T_NEWखाली समय में।

यह एक सरल उदाहरण है, इसमें कुछ और भी शामिल हैं।

पुनश्च दूसरी ओर, आपको संभवतः प्रत्यक्ष प्रश्नों के बजाय एक संग्रहीत कार्यविधि API होना चाहिए था T_OLD, लेकिन ऐसा हमेशा नहीं होता है।


3
मैं "संग्रहीत कार्यविधि API" और संबंधित पेशेवरों / विपक्षों के शब्द से अनभिज्ञ था और इस लेख को उपयोगी पाया: कोडिंगहोरर
जेफ

क्षमा करें, मुझे पार्टी के लिए देर हो रही है, लेकिन प्रदर्शन के बारे में क्या। अगर मुझे मूल तालिका में शामिल होने की आवश्यकता है और मैं इसके बजाय दृश्य में शामिल हो जाऊंगा, तो क्या यह सर्वश्रेष्ठ निष्पादन योजना का उपयोग करेगा?
जीकाटो

@Zikato हाँ, अगर यह एक अनुक्रमित दृश्य है
LinkBerest

वी गुड इंडिकेशन
अफान अहमद

47

(पहले ट्यूटोरियल से कॉपी किया गया जो Google खोज में लिंक हुआ था (लिंक अब मृत है), लेकिन इसके सभी लाभ हैं जो मैंने स्वयं स्वयं टाइप किए होंगे।)

दृश्य के निम्नलिखित लाभ हैं:

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

क्योंकि मुझे आपका उत्तर पसंद है और एक और बिंदु को जोड़ने के लिए बहुत कुछ नहीं दिखता है, क्या मैं आपकी सूची में दो जोड़ सुझा सकता हूं? अनुक्रमित दृश्य प्रदर्शन को बढ़ावा दे सकते हैं। तालिकाओं के लिए प्रत्यक्ष के बजाय विचारों के विरुद्ध चल रहे अपडेट उच्च आत्मविश्वास दे सकते हैं जो आपको गलत तरीके से उस प्रमुख उत्पादन तालिका को अपडेट नहीं करेंगे :)
डेविड हॉल

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

यह मेरी पुस्तक में 99% उत्तर है।
जॉन स्टीडमैन

BTW @ डेविड लिंक को तोड़ दिया
मैनुअल जॉर्डन

अंतिम बिंदु, क्या हम उसके लिए एक अस्थायी तालिका का उपयोग नहीं कर सकते हैं?
जिएचाओ वांग

16

विकिपीडिया से कुछ कारण :

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

  1. दृश्य तालिका में निहित डेटा के सबसेट का प्रतिनिधित्व कर सकते हैं
  2. दृश्य एक ही आभासी तालिका में कई तालिकाओं को जोड़ और सरल कर सकते हैं
  3. दृश्य कुल तालिकाओं के रूप में कार्य कर सकते हैं , जहां डेटाबेस इंजन डेटा (योग, औसत आदि) को एकत्र करता है और गणना किए गए परिणामों को डेटा के भाग के रूप में प्रस्तुत करता है।
  4. दृश्य डेटा की जटिलता को छिपा सकते हैं ; उदाहरण के लिए, एक दृश्य Sales2000 या Sales2001 के रूप में प्रकट हो सकता है, पारदर्शी रूप से वास्तविक अंतर्निहित तालिका को विभाजित कर सकता है
  5. दृश्य संग्रह करने के लिए बहुत कम जगह लेते हैं ; डेटाबेस में केवल दृश्य की परिभाषा होती है, न कि उसके द्वारा प्रस्तुत सभी डेटा की एक प्रति
  6. उपयोग किए गए SQL इंजन के आधार पर, दृश्य अतिरिक्त सुरक्षा प्रदान कर सकते हैं
  7. दृश्य किसी तालिका या तालिकाओं के प्रदर्शन की डिग्री को बाहरी दुनिया तक सीमित कर सकते हैं

14

VIEWS को SELECT / CODE के पुन: प्रयोज्य खंडों के रूप में उपयोग किया जा सकता है, जिसे अन्य चयन / प्रश्नों में शामिल होने के लिए शामिल किया जा सकता है, और हर बार पूरे SELECT को फिर से बनाए बिना विभिन्न विभिन्न फ़िल्टर का उपयोग किया जा सकता है।

यह तर्क को एक ही स्थान पर भी रखता है, ताकि आपको इसे कोड आधार पर बदलने की आवश्यकता न पड़े।

अच्छी तरह से देखिए

संग्रहीत कार्यविधियाँ, कार्य, दृश्य, ट्रिगर, इनलाइन SQL के बीच विकल्प

एक दृश्य की मुख्य सुंदरता यह है कि इसका उपयोग अधिकांश स्थितियों में तालिका की तरह किया जा सकता है, लेकिन एक तालिका के विपरीत, यह बहुत जटिल गणनाओं और आमतौर पर उपयोग किए जाने वाले योगों को संलग्न कर सकता है। यह संग्रहीत कार्यविधियों को छोड़कर db में किसी भी वस्तु का बहुत अधिक उपयोग कर सकता है। दृश्य तब सबसे उपयोगी होते हैं, जब आपको सारांश गणना क्षेत्रों आदि को प्राप्त करने के लिए हमेशा ऑर्डर डिटेल के साथ ऑर्डर सेट करने के लिए एक ही सेट में शामिल होने की आवश्यकता होती है।


6
ऐसा करने में बहुत सावधानी बरतें। यदि आप उन विचारों का उपयोग करते हैं जो अन्य विचारों को कहते हैं, तो आप एक बहुत बड़ा प्रदर्शन गड़बड़ कर सकते हैं।
HLGEM

10

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

यह एक इंटरफ़ेस है।


1
जब तक आप आगे के अमूर्तन के लिए विचारों पर विचारों को ढेर नहीं करते।
HLGEM

मुझे लगता है कि मैंने रिलेशनल डेटाबेस में किसी भी प्रकार के बहुस्तरीय अमूर्तता को प्रभावी ढंग से दोहराया है। और मैं संग्रहीत प्रक्रियाओं को संग्रहीत प्रक्रियाओं से नहीं कहता हूं, या तो। :)
dkretz

3

यहां कुछ मानदंडों द्वारा किसी इकाई को विवश करने के लिए विचारों का उपयोग करने का एक बहुत ही सामान्य उपयोग है।

तालिका: USERS में सभी उपयोगकर्ता हैं

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

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


2

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


2

यहाँ सीधे तालिका के बजाय दृश्य का उपयोग करने के कई कारण हैं

  • सरलता - दृश्यों का उपयोग जटिल प्रश्नों को छिपाने के लिए किया जा सकता है।
  • सुरक्षा - कुछ चुने हुए स्तंभों पर दृश्य बनाकर उपयोगकर्ता अंतिम उपयोगकर्ता से कुछ महत्वपूर्ण जानकारी छिपा सकते हैं
  • सुरक्षा - दृश्य का उपयोग करके इसकी संरचना को बदलने के लिए सुरक्षित तालिका।
  • अतिरेक - एक सामान्य दृश्य का उपयोग करके हर प्रक्रिया / क्वेरी में अनावश्यक कोड को कम करें।
  • गणना - सभी गणनाएँ क्वेरी में एक बार देखी जा सकती हैं।
  • सार्थक नाम - तालिका का नाम आईडी के लिए tbl_org_emp_id हो सकता है जो उपनाम की तरह हो सकता है [कर्मचारी संख्या] या कुछ सार्थक नाम।

से imexploring.com


1

सामान्य कारणों / उपयोगों की एक छोटी सूची:

  • डेटा का प्रारूप या 'लुक' बदलने के लिए उनका उपयोग करें (अर्थात आप पहले और अंतिम नाम को एक साथ जोड़ सकते हैं)

    डेटा पर गणना या अन्य लुकअप करें

    डेटा को असामान्य करें (एक स्थान पर कई तालिकाओं से डेटा निकालें)


-6

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

आपको यह समझना चाहिए कि 100 टेबल वाले डेटाबेस में हर टेबल के उद्देश्य को याद रखना कठिन है। अब, यदि आप यहां एक और 300 विचार जोड़ते हैं तो यह पूरी तरह गड़बड़ हो जाएगा। 'व्यू लवर्स' की तुलना में नेस्टेड विचारों का उपयोग करना और फिर संग्रहीत प्रक्रियाओं में नेस्टेड विचारों का उपयोग करना है। मैं एक डेटाबेस के साथ अब काम करता हूं जहां 4 बार गहराई से नेस्टेड दृश्य हैं! तो एक संग्रहीत प्रक्रिया के एक सरलतम तर्क को समझने के लिए मुझे पहले सभी विचारों से गुजरना होगा।


8
-1 दृश्य अच्छे हैं। वे बुराई बन सकते हैं यदि आप उन्हें अनुचित तरीके से उपयोग करते हैं - लेकिन यह सिर्फ कुछ के बारे में सच है।
NullUserException

1
अगर बुरी तरह से इस्तेमाल किया जाए तो दृश्य बुरे हो सकते हैं। जो लोग उन्हें बुरी तरह से सबसे अधिक बार उपयोग करते हैं, वे ऐसे प्रतीत होते हैं जो उन्हें अमूर्त चीजों के लिए उपयोग कर रहे हैं और फिर जैसा कि आप कहते हैं, उन विचारों को कॉल करें जो उस दृश्य को कॉल करते हैं जो आपको उस बिंदु पर कॉल करने के लिए कहते हैं जहां आपको परिणाम वापस करने से पहले 10 मिलियन recrods को मेटेरियल करने की आवश्यकता हो सकती है का सेट 3. दृश्य सीधे कॉलिंग टेबल बहुत उपयोगी हो सकता है।
HLGEM

@ HGLEM अन्य विचारों से दृश्य कॉल को प्रतिबंधित करने का एक तरीका है?
इगोर सोलोय्डेनको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.