Saya hanya mencoba untuk mendapatkan gambaran umum tentang tampilan apa yang digunakan untuk RDBMS. Artinya, saya tahu apa itu view dan bagaimana membuatnya. Saya juga tahu untuk apa saya menggunakannya di masa lalu.
Tapi saya ingin memastikan bahwa saya memiliki pemahaman menyeluruh tentang kegunaan sebuah tampilan dan untuk apa tampilan tidak bermanfaat. Lebih spesifik:
- Untuk apa tampilan berguna?
- Adakah situasi di mana Anda tergoda untuk menggunakan tampilan padahal Anda tidak boleh menggunakannya?
- Mengapa Anda menggunakan tampilan sebagai pengganti dari sesuatu seperti fungsi nilai tabel atau sebaliknya?
- Adakah keadaan di mana tampilan mungkin berguna yang tidak terlihat pada pandangan pertama?
(Dan sebagai catatan, beberapa dari pertanyaan ini sengaja dibuat naif. Ini sebagian adalah pemeriksaan konsep.)
sql
views
rdbms-agnostic
Jason Baker
sumber
sumber
Jawaban:
1) Untuk apa tampilan berguna?
2) Apakah ada situasi di mana Anda tergoda untuk menggunakan view padahal Anda tidak boleh menggunakannya?
3) Mengapa Anda menggunakan tampilan sebagai pengganti sesuatu seperti fungsi nilai tabel atau sebaliknya?
4) Apakah ada keadaan di mana tampilan mungkin berguna yang tidak terlihat pada pandangan pertama?
sumber
Di satu sisi, tampilan seperti antarmuka. Anda dapat mengubah struktur tabel yang mendasari semua yang Anda inginkan, tetapi tampilan memberikan cara agar kode tidak perlu diubah.
Tampilan adalah cara yang bagus untuk menyediakan sesuatu yang sederhana bagi penulis laporan. Jika pengguna bisnis Anda ingin mengakses data dari sesuatu seperti Crystal Reports, Anda dapat memberi mereka beberapa tampilan di akun mereka yang menyederhanakan data - bahkan mungkin mendenormalisasikannya untuk mereka.
sumber
Tampilan dapat digunakan untuk memberikan keamanan (yaitu: pengguna dapat memiliki akses ke tampilan yang hanya mengakses kolom tertentu dalam tabel), tampilan dapat memberikan keamanan tambahan untuk pembaruan, penyisipan, dll. Tampilan juga menyediakan cara untuk nama alias kolom (seperti halnya sp) tetapi pandangan lebih merupakan isolasi dari tabel sebenarnya.
sumber
Dalam arti tertentu pandangan mendenormalisasi. Denormalisasi terkadang diperlukan untuk memberikan data dengan cara yang lebih bermakna. Inilah yang dilakukan banyak aplikasi dengan cara pemodelan domain di objek mereka. Mereka membantu menyajikan data dengan cara yang lebih cocok dengan perspektif bisnis.
sumber
Selain apa yang dinyatakan orang lain, tampilan juga dapat berguna untuk menghapus kueri SQL yang lebih rumit dari aplikasi.
Sebagai contoh, alih-alih dalam aplikasi melakukan:
Anda bisa mengabstraksikannya menjadi tampilan:
dan dalam kode aplikasi, cukup memiliki:
Selain itu, jika struktur data berubah, Anda tidak perlu mengubah kode aplikasi, mengompilasi ulang, dan menerapkan ulang. Anda hanya akan mengubah tampilan di db.
sumber
Tampilan menyembunyikan kompleksitas database. Mereka bagus untuk banyak alasan dan berguna dalam banyak situasi, tetapi jika Anda memiliki pengguna yang diizinkan untuk menulis kueri dan laporan mereka sendiri, Anda dapat menggunakannya sebagai pengamanan untuk memastikan mereka tidak mengirimkan dengan desain yang buruk kueri dengan gabungan kartesius jahat yang menghapus server database Anda.
sumber
OP bertanya apakah ada situasi di mana Anda mungkin tergoda untuk menggunakan tampilan, tetapi itu tidak sesuai.
Anda tidak ingin menggunakan tampilan untuk menggantikan gabungan kompleks. Artinya, jangan biarkan kebiasaan pemrograman prosedural Anda dalam memecahkan masalah menjadi bagian-bagian yang lebih kecil menuntun Anda untuk menggunakan beberapa tampilan yang digabungkan, bukan satu gabungan yang lebih besar. Melakukan hal itu akan mematikan efisiensi mesin database karena pada dasarnya melakukan beberapa kueri terpisah daripada satu kueri yang lebih besar.
Misalnya, Anda harus menggabungkan tabel A, B, C, dan D bersama-sama. Anda mungkin tergoda untuk membuat tampilan dari tabel A & B dan tampilan dari K & D, lalu menggabungkan kedua tampilan tersebut. Lebih baik hanya menggabungkan A, B, C, dan D dalam satu kueri.
sumber
Tampilan dapat memusatkan atau menggabungkan data. Di mana saya berada, kami memiliki sejumlah database yang berbeda di beberapa server terkait yang berbeda. Setiap database menyimpan data untuk aplikasi yang berbeda. Beberapa dari database tersebut menyimpan informasi yang relevan dengan sejumlah aplikasi yang berbeda. Apa yang akan kita lakukan dalam keadaan tersebut adalah membuat tampilan di database aplikasi yang hanya menarik data dari database tempat datanya benar-benar disimpan, sehingga kueri yang kami tulis tidak terlihat seperti melintasi database yang berbeda.
sumber
Tanggapan sejauh ini benar - tampilan bagus untuk memberikan keamanan, denormalisasi (meskipun ada banyak kesulitan jika dilakukan salah), abstraksi model data, dll.
Selain itu, tampilan biasanya digunakan untuk menerapkan logika bisnis (pengguna yang sudah tidak aktif adalah pengguna yang tidak masuk dalam 40 hari terakhir, hal semacam itu).
sumber
Tampilan menyimpan banyak pernyataan GABUNG kompleks berulang dalam skrip SQL Anda. Anda bisa merangkum beberapa JOIN kompleks dalam beberapa tampilan dan menyebutnya dalam pernyataan SELECT Anda kapan pun diperlukan. Ini kadang-kadang akan berguna, langsung dan lebih mudah daripada menulis pernyataan bergabung di setiap kueri.
sumber
Sebuah view hanyalah sebuah disimpan, bernama pernyataan SELECT. Pikirkan tampilan seperti fungsi perpustakaan.
sumber
Saya ingin menyoroti penggunaan tampilan untuk pelaporan. Seringkali, ada konflik antara normalisasi tabel database untuk mempercepat kinerja, terutama untuk mengedit dan menyisipkan data (penggunaan OLTP), dan denormalisasi untuk mengurangi jumlah tabel bergabung untuk kueri untuk pelaporan dan analisis (penggunaan OLAP). Tentunya OLTP biasanya menang, karena pemasukan data harus memiliki kinerja yang optimal. Membuat tampilan, kemudian, untuk performa pelaporan yang optimal, dapat membantu memuaskan kedua kelas pengguna (pengakses entri data dan laporan).
sumber
Saya ingat SELECT yang sangat lama yang melibatkan beberapa UNION. Setiap UNION menyertakan gabungan ke tabel harga yang dibuat dengan cepat oleh SELECT yang dengan sendirinya cukup panjang dan sulit dipahami. Saya pikir itu akan menjadi ide yang baik untuk memiliki pandangan yang membuat tabel harga. Ini akan mempersingkat SELECT keseluruhan sekitar setengahnya.
Saya tidak tahu apakah DB akan mengevaluasi tampilan sekali, atau setiap kali masuk dipanggil. Ada yang tahu? Jika yang pertama, menggunakan tampilan akan meningkatkan kinerja.
sumber
Kapan pun Anda membutuhkan [my_interface]! = [User_interface].
Contoh:
TABEL A:
LIHAT untuk TABEL A:
ini adalah cara untuk menyembunyikan id dari pelanggan dan mengganti nama info menjadi nama yang lebih panjang sekaligus.
Tampilan akan menggunakan indeks yang mendasari untuk id kunci utama, jadi Anda tidak akan melihat kehilangan kinerja, hanya abstraksi yang lebih baik dari kueri pemilihan.
sumber