मुख्य सामग्री पर जाएं
मॉड्यूल 9 · पाठ 4 का 4पाठ्यक्रम में 36/57~12 min
मॉड्यूल पाठ (4/4)

दृश्य और डेटा अमूर्तन

हमारे पूरे पाठ में आपने देखा होगा कि प्रश्न (विशेष रूप से जटिल JOINs या GROUP BY जैसे एकत्रीकरण) लंबे और नियमों और गणनाओं से भरे होने लगते हैं।

क्या होगा यदि पूरी की गई क्वेरी को मानसिक रूप से सहेजने और इसे दृश्य से छिपाने का कोई तरीका हो, तब से यह दिखावा करते हुए कि यह, सभी इरादों और उद्देश्यों के लिए, डीबी की एक सामान्य "तालिका" है?

दृश्यों की दुनिया में आपका स्वागत है।

दृश्य बनाएं

एक दृश्य अनिवार्य रूप से एक स्थायी है, जिसे SQL क्वेरी नाम दिया गया है, लेकिन यह बिल्कुल "वर्चुअल" तालिका की तरह व्यवहार करता है!

SQL
CREATE VIEW user_spending AS
SELECT
  c.id,
  c.first_name,
  SUM(o.amount) as total_spent
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.id;

हो गया! अब, हमेशा JOIN और GROUP BY को दोबारा करने के बजाय, आपको बस बिल्कुल सामान्य प्रश्न लिखना होगा:

SQL
SELECT * FROM user_spending WHERE total_spent > 100;
-- Postgres dietro le quinte richiamerà automaticamente la grande formula.

दृश्य और "वास्तविक समय डेटा"

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

ये किसलिए हैं?

  • सरलता: दृश्य बाहरी ऐप्स को परिवर्तनों से बचाते हैं। यदि फ्रंटएंड टीम को पता है कि उसे top_selling दृश्य से डेटा पढ़ना है, तो उन्हें चिंता करने की ज़रूरत नहीं है अगर कल हम शीर्ष विक्रेताओं को बाहर निकालने के लिए तीन मध्यवर्ती संबंध जोड़कर डेटाबेस को संशोधित करते हैं!
  • सुरक्षा और पृथक्करण: विशाल डीबी में, एक दृश्य बाहरी डेवलपर्स से उपयोगकर्ता डेटा के हिस्से को पूर्व-चयनित और छिपा सकता है, जिससे उन्हें केवल वास्तविक नामों के विश्लेषण के उप-दृश्य तक पहुंच प्रदान की जा सकती है (उदाहरण के लिए)।

एक दृश्य छोड़ना

तालिकाओं की तरह, जब आवश्यकता नहीं रह जाती है तो आप DROP कमांड के साथ आगे बढ़ते हैं:

SQL
DROP VIEW user_spending;

इसे अजमाएं

व्यायाम#sql.m9.l4.e1
प्रयास: 0लोड हो रहा है...

'high_value_products' नामक एक दृश्य (VIEW) बनाएं। इसे एक कंटेनर के रूप में व्यवहार करना चाहिए जो 'उत्पाद' तालिका से सभी 3 आवश्यक फ़ील्ड ('आईडी', 'नाम', 'मूल्य') का चयन करता है, लेकिन केवल और हमेशा उन उत्पादों के लिए जिनकी 'कीमत' 50.00 से अधिक है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

क्रिएट व्यू व्यू_नाम को चयन के रूप में लिखें...से...कहां...

3 प्रयासों के बाद समाधान उपलब्ध है

एक दृश्य को कॉल करना

व्यायाम#sql.m9.l4.e2
प्रयास: 0लोड हो रहा है...

चूँकि प्लेटफ़ॉर्म पर प्रत्येक अभ्यास एक अलग (और स्वच्छ) वातावरण में चलाया जाता है, पिछला दृश्य अब इस चरण में मौजूद नहीं है। 'हाई_वैल्यू_प्रोडक्ट्स' दृश्य को फिर से बनाएं (अभी भी कीमत> 50 वाले उत्पादों के साथ) और फिर, तुरंत निम्नलिखित पंक्ति पर, यह सत्यापित करने के लिए कि यह काम करता है, मूल्य अवरोही (डीईएससी) द्वारा आदेशित इसकी सभी सामग्री का एक चयन चलाएं।

संपादक लोड हो रहा है...
संकेत दिखाएँ

मत भूलना ; SQL कथनों के बीच (इसे पहली पंक्ति के अंत में रखें)! यह Postgres को क्रम से 2 कार्यों को निष्पादित करने देता है।

3 प्रयासों के बाद समाधान उपलब्ध है