שיעורי מודול (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 הם וירטואליים: בכל פעם שאתה מכניס את השם של View ב-SELECT שלך, Postgres מאחורי הקלעים ממזג את הבקשה שלך על ידי הפעלת חישוב בזמן אמת המבוסס על מצב ה-DB באותה אלפית השנייה המדויקת. כך שלעולם לא תקראו נתונים מעופשים.
בשביל מה הם נועדו?
- פשטות: תצוגות מגנות על אפליקציות חיצוניות מפני שינויים. אם צוות הקצה יודע שעליו לקרוא נתונים מהתצוגה
top_selling, הם לא צריכים לדאוג אם מחר נשנה את מסד הנתונים על ידי הוספת שלושה קשרי ביניים כדי להוציא את המוכרים המובילים! - אבטחה והפרדה: ב-DBs ענקיים, תצוגה יכולה לבחור מראש ולהסתיר חלק מנתוני המשתמש ממפתחים חיצוניים, ומעניקה להם גישה (לדוגמה) רק לתצוגה משנה של אנליטיקה משופשפת בשמות אמיתיים.
הפלת נוף
בדיוק כמו טבלאות, כאשר אין צורך יותר, אתה ממשיך עם הפקודה DROP:
DROP VIEW user_spending;נסה את זה
צור תצוגה (VIEW) שנקראת 'מוצרי_ערך גבוה'. זה חייב להתנהג כמיכל שבוחר את כל 3 השדות החיוניים (`מזהה`, `שם`, `מחיר`) מטבלת 'מוצרים', אבל רק ותמיד עבור אותם מוצרים שיש להם 'מחיר' גדול מ-50.00.
הצג רמז
כתוב CREATE VIEW view_name AS SELECT ... FROM ... WHERE ...
הפתרון זמין לאחר 3 ניסיונות
מתקשר ל-View
מכיוון שכל תרגיל בפלטפורמה מתנהל בסביבה מבודדת (ונקיה), התצוגה הקודמת כבר לא קיימת בשלב זה. צור מחדש את תצוגת 'מוצרים_בעלי ערך גבוה' (עדיין עם מחיר של מוצרים מעל 50) ולאחר מכן, בשורה הבאה מיד, הפעל SELECT של כל התוכן שלה מסודר לפי מחיר יורד (DESC) כדי לוודא שהוא עובד.
הצג רמז
אל תשכח את ; בין משפטי SQL (שים את זה בסוף השורה הראשונה)! זה מאפשר ל-Postgres לבצע את 2 המשימות ברצף.
הפתרון זמין לאחר 3 ניסיונות