ماڈیول اسباق (4/4)
ملاحظات اور ڈیٹا کا خلاصہ
ہمارے پورے اسباق کے دوران آپ نے دیکھا ہوگا کہ سوالات (خاص طور پر پیچیدہ JOINs یا مجموعے جیسے GROUP BY) طویل ہونے لگتے ہیں اور قواعد اور حسابات سے بھرے ہوتے ہیں۔
کیا ہوگا اگر مکمل استفسار کو ذہنی طور پر محفوظ کرنے اور اسے نظر سے چھپانے کا کوئی طریقہ ہوتا، تب سے یہ دکھاوا کرتے ہوئے کہ یہ تمام ارادوں اور مقاصد کے لیے، DB کا ایک عام "ٹیبل" ہے؟
مناظر کی دنیا میں خوش آمدید۔
منظر تخلیق کریں۔
ایک نقطہ نظر بنیادی طور پر ایک مستقل ہے، جس کا نام 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 کو دوبارہ کرنے کی بجائے، آپ کو صرف بالکل عام سوالات لکھنا ہوں گے:
SELECT * FROM user_spending WHERE total_spent > 100;
-- Postgres dietro le quinte richiamerà automaticamente la grande formula.ملاحظات اور "ریئل ٹائم ڈیٹا"
ایک بہت ہی عام افسانہ یہ سوچ رہا ہے کہ Views ڈیٹا لیتے ہیں، قیمتوں یا درجہ بندی جیسی رقم کا حساب لگاتے ہیں اور تصویر کی طرح کچھ اداس مستقل سنیپ شاٹ تیار کرتے ہیں۔ غلط (تقریبا ہمیشہ)! پہلے سے طے شدہ طور پر، Views ورچوئل ہوتے ہیں: جب بھی آپ اپنے SELECT میں کسی ویو کا نام ڈالتے ہیں، پردے کے پیچھے Postgres اس عین ملی سیکنڈ میں DB کی حالت پر مبنی ریئل ٹائم کمپیوٹیشن چلا کر آپ کی درخواست کو ضم کر دیتا ہے۔ لہذا آپ کبھی بھی باسی ڈیٹا نہیں پڑھیں گے۔
وہ کس لیے ہیں؟
- سادگی: نظارے بیرونی ایپس کو تبدیلیوں سے بچاتے ہیں۔ اگر فرنٹ اینڈ ٹیم جانتی ہے کہ اسے
top_sellingمنظر سے ڈیٹا پڑھنا ہے، تو انہیں پریشان ہونے کی ضرورت نہیں ہے کہ اگر کل ہم سب سے اوپر فروخت کنندگان کو نکالنے کے لیے تین درمیانی تعلقات شامل کرکے ڈیٹا بیس میں ترمیم کریں! - سیکیورٹی اور علیحدگی: بڑے DBs میں، ایک منظر پہلے سے منتخب کر سکتا ہے اور صارف کے ڈیٹا کے کچھ حصے کو بیرونی ڈویلپرز سے چھپا سکتا ہے، انہیں رسائی فراہم کرتا ہے (مثال کے طور پر) صرف اصلی ناموں سے صاف کیے گئے تجزیات کے ذیلی منظر تک۔
ایک منظر چھوڑنا
بالکل میزوں کی طرح، جب مزید ضرورت نہ ہو تو آپ DROP کمانڈ کے ساتھ آگے بڑھیں:
DROP VIEW user_spending;اسے آزمائیں
'high_value_products' نامی ایک منظر (VIEW) بنائیں۔ اسے ایک کنٹینر کے طور پر برتاؤ کرنا چاہیے جو 'پروڈکٹس' ٹیبل سے تمام 3 ضروری فیلڈز (`id`، `name`، `price`) کو منتخب کرتا ہے، لیکن صرف اور ہمیشہ ان مصنوعات کے لیے جن کی 'قیمت' 50.00 سے زیادہ ہے۔
اشارہ دکھائیں۔
CREATE VIEW view_name لکھیں بطور منتخب کریں ... سے ... کہاں ...
3 کوششوں کے بعد حل دستیاب ہے۔
ایک منظر کو کال کرنا
چونکہ پلیٹ فارم پر ہر مشق الگ تھلگ (اور صاف) ماحول میں چلائی جاتی ہے، اس لیے اس مرحلے میں پچھلا منظر اب موجود نہیں ہے۔ 'high_value_products' منظر کو دوبارہ بنائیں (ابھی تک پروڈکٹس کے ساتھ قیمت> 50 ہے) اور پھر، فوری طور پر مندرجہ ذیل لائن پر، اس کے کام کرنے کی تصدیق کرنے کے لیے قیمت میں کمی (DESC) کے ذریعے ترتیب دیے گئے تمام مواد کا SELECT چلائیں۔
اشارہ دکھائیں۔
مت بھولنا؛ ایس کیو ایل کے بیانات کے درمیان (اسے پہلی لائن کے آخر میں رکھیں)! یہ پوسٹگریس کو ترتیب میں 2 کاموں کو انجام دینے دیتا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔