Pelajaran modul (4/4)
Tampilan dan abstraksi data
Sepanjang pelajaran kami, Anda akan memperhatikan bahwa kueri (terutama JOIN yang kompleks atau agregasi seperti GROUP BY) mulai menjadi panjang dan penuh dengan aturan dan perhitungan.
Bagaimana jika ada cara untuk menyimpan secara mental kueri yang telah selesai dan menyembunyikannya dari pandangan, dengan berpura-pura bahwa kueri tersebut, untuk semua maksud dan tujuan, merupakan "tabel" normal dari DB?
Selamat datang di dunia Tampilan.
BUAT TAMPILAN
Tampilan pada dasarnya adalah kueri SQL bernama persisten, namun berperilaku seperti tabel "virtual"!
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;Selesai! Sekarang, daripada harus selalu mengulang JOIN dan GROUP BY, Anda hanya perlu menulis kueri normal:
SELECT * FROM user_spending WHERE total_spent > 100;
-- Postgres dietro le quinte richiamerà automaticamente la grande formula.Tampilan dan "data waktu nyata"
Mitos yang sangat umum adalah berpikir bahwa Views mengambil data, menghitung jumlah seperti harga atau peringkat, dan menghasilkan cuplikan yang menyedihkan, seperti foto. Salah (hampir selalu)! Secara default, Tampilan bersifat virtual: setiap kali Anda memasukkan nama Tampilan di SELECT Anda, Postgres di belakang layar menggabungkan permintaan Anda dengan menjalankan komputasi real-time berdasarkan status DB tepat pada milidetik tersebut. Jadi Anda tidak akan pernah membaca data basi.
Untuk apa itu?
- Kesederhanaan: tampilan melindungi aplikasi eksternal dari perubahan. Jika tim frontend mengetahui bahwa mereka harus membaca data dari tampilan
top_selling, mereka tidak perlu khawatir jika besok kita memodifikasi database dengan menambahkan tiga relasi perantara untuk mengeluarkan yang terlaris! - Keamanan dan segregasi: di DB berukuran besar, tampilan dapat memilih terlebih dahulu dan menyembunyikan sebagian data pengguna dari pengembang eksternal, sehingga memberi mereka akses (misalnya) hanya ke sub-tampilan analitik yang dihapus dari nama asli.
Menjatuhkan Pandangan
Sama seperti tabel, bila tidak diperlukan lagi Anda lanjutkan dengan perintah DROP:
DROP VIEW user_spending;Cobalah
Buat tampilan (LIHAT) yang disebut 'produk_bernilai tinggi'. Itu harus berperilaku sebagai wadah yang memilih ketiga bidang penting (`id`, `nama`, `harga`) dari tabel 'produk', TETAPI hanya dan selalu untuk produk yang memiliki 'harga' lebih besar dari 50,00.
Tunjukkan petunjuk
Tulis CREATE VIEW view_name AS SELECT...FROM...WHERE...
Solusi tersedia setelah 3 upaya
Memanggil Tampilan
Karena setiap latihan di platform dijalankan di lingkungan yang terisolasi (dan bersih), tampilan sebelumnya tidak ada lagi pada langkah ini. Buat kembali tampilan 'produk_bernilai tinggi' (masih dengan produk yang memiliki harga > 50) dan kemudian, pada baris berikutnya, jalankan SELECT dari semua kontennya yang diurutkan berdasarkan harga menurun (DESC) untuk memverifikasi bahwa itu berfungsi.
Tunjukkan petunjuk
Jangan lupa; di antara pernyataan SQL (letakkan di akhir baris pertama)! Ini memungkinkan Postgres menjalankan 2 tugas secara berurutan.
Solusi tersedia setelah 3 upaya