Apa alasan yang baik untuk menggunakan tampilan SQL?

100

Saya membaca Alkitab SQL Server 2008 dan saya membahas bagian tampilan. Tetapi penulis tidak benar-benar menjelaskan tujuan dari pandangan. Apa kegunaan yang baik untuk tampilan? Haruskah saya menggunakannya di situs web saya dan apa manfaatnya?

Lukas101
sumber
Bisakah Anda memberi saya file database dari buku "SQL Server 2008 Bible" itu? Situs web penulis sudah mati dan saya tidak dapat menghubunginya.

Jawaban:

94

Penggunaan lain yang tampaknya tidak disebutkan oleh jawaban sebelumnya adalah penerapan perubahan struktur tabel yang lebih mudah.

Misalnya, Anda ingin menghentikan tabel ( T_OLD) yang berisi data untuk pengguna aktif, dan sebagai gantinya menggunakan tabel baru dengan data serupa (bernama T_NEW) tetapi tabel yang memiliki data untuk pengguna aktif dan tidak aktif, dengan satu kolom tambahan active.

Jika sistem Anda memiliki trilyun kueri SELECT whatever FROM T_OLD WHERE whatever, Anda memiliki dua pilihan untuk peluncuran:

1) Cold Turkey - Ubah DB, dan pada saat yang sama, ubah, uji dan lepaskan banyak potongan kode yang berisi query tersebut. SANGAT sulit dilakukan (atau bahkan dikoordinasikan), sangat berisiko. Buruk.

2) Bertahap - ubah DB dengan membuat T_NEWtabel, lepaskan T_OLDtabel dan sebagai gantinya buat TAMPILAN disebut T_OLDyang meniru T_OLDtabel 100% (misalnya kueri tampilan adalahSELECT all_fields_except_active FROM T_NEW WHERE active=1 ).

Itu akan memungkinkan Anda untuk menghindari melepaskan kode APAPUN yang saat ini dipilih T_OLD, dan melakukan perubahan untuk memigrasi kode dari T_OLDmenjadi T_NEWdi waktu luang.

Ini adalah contoh sederhana, ada orang lain yang lebih terlibat.

PS Di sisi lain, Anda mungkin harus memiliki API prosedur tersimpan daripada kueri langsung dari T_OLD, tetapi itu tidak selalu terjadi.

DVK
sumber
3
Saya mengabaikan istilah "API prosedur tersimpan" dan pro / kontra terkait dan menganggap artikel ini berguna: codinghorror.com/blog/2005/05/…
Jeff Widman
Maaf saya terlambat ke pesta, tapi bagaimana dengan pertunjukan. Jika saya membutuhkan penggabungan pada tabel asli dan saya akan bergabung dengan View sebagai gantinya, apakah itu akan menggunakan rencana eksekusi terbaik?
Zikato
@ Zikato ya, jika itu adalah tampilan yang diindeks
LinkBerest
V Indikasi Bagus
Afnan Ahmad
47

(Disalin dari tutorial pertama yang muncul dalam pencarian Google (tautan sekarang mati), tetapi memiliki semua manfaat yang saya sendiri ketik secara manual.)

Tampilan memiliki keuntungan sebagai berikut:

  • Keamanan - Tampilan dapat dibuat dapat diakses oleh pengguna sementara tabel yang mendasarinya tidak dapat diakses secara langsung. Ini memungkinkan DBA untuk memberi pengguna hanya data yang mereka butuhkan, sambil melindungi data lain dalam tabel yang sama.
  • Kesederhanaan - Tampilan dapat digunakan untuk menyembunyikan dan menggunakan kembali kueri kompleks.
  • Penyederhanaan atau Klarifikasi Nama Kolom - Tampilan dapat digunakan untuk memberikan alias pada nama kolom agar lebih mudah diingat dan / atau bermakna.
  • Batu Loncatan - Tampilan dapat memberikan batu loncatan dalam kueri "multi-level". Misalnya, Anda dapat membuat tampilan kueri yang menghitung jumlah penjualan yang dilakukan setiap penjual. Anda kemudian dapat meminta tampilan tersebut untuk mengelompokkan staf penjualan menurut jumlah penjualan yang telah mereka lakukan.
David
sumber
Karena saya menyukai jawaban Anda dan tidak melihat banyak gunanya menambahkan yang lain, dapatkah saya menyarankan dua tambahan ke daftar Anda? Tampilan Terindeks dapat meningkatkan kinerja. Menjalankan pembaruan terhadap tampilan daripada langsung ke tabel dapat memberikan keyakinan yang lebih tinggi Anda tidak akan salah memperbarui tabel produksi utama itu :)
David Hall
Satu poin lagi dalam daftar Anda, sebagian besar DBA menginginkan penggunaan tampilan karena mereka dapat menyetel satu tampilan dan sebagian besar (tidak selalu) semua kueri yang menggunakan tampilan tersebut akan disetel.
Nitin Midha
Ini adalah 99% jawaban dalam buku saya.
John Steedman
BTW @David tautan rusak
Manuel Jordan
Poin terakhir, tidak bisakah kita menggunakan tabel temp untuk itu?
Jiechao Wang
16

Beberapa alasan dari Wikipedia :

Tampilan dapat memberikan keuntungan dibandingkan tabel:

  1. Tampilan dapat mewakili subset dari data yang terdapat dalam tabel
  2. Tampilan dapat menggabungkan dan menyederhanakan beberapa tabel menjadi satu tabel virtual
  3. Tampilan dapat bertindak sebagai tabel agregat , di mana mesin database menggabungkan data (jumlah, rata-rata, dll.) Dan menyajikan hasil yang dihitung sebagai bagian dari data
  4. Tampilan dapat menyembunyikan kerumitan data ; misalnya tampilan dapat muncul sebagai Sales2000 atau Sales2001, secara transparan mempartisi tabel yang mendasari sebenarnya
  5. Tampilan membutuhkan sedikit ruang untuk disimpan ; database hanya berisi definisi tampilan, bukan salinan dari semua data yang disajikan
  6. Bergantung pada mesin SQL yang digunakan, tampilan dapat memberikan keamanan ekstra
  7. Tampilan dapat membatasi derajat keterpaparan suatu tabel atau tabel ke dunia luar
pengguna210748
sumber
14

VIEWS dapat digunakan sebagai bagian SELECT / CODE yang dapat digunakan kembali, yang dapat disertakan dalam pemilihan / kueri lain untuk digabungkan, dan menggunakan berbagai filter berbeda, tanpa harus membuat ulang seluruh SELECT setiap saat.

Ini juga menempatkan logika di satu lokasi, sehingga Anda tidak perlu mengubahnya di seluruh basis kode.

Silahkan lihat

Pilihan Antara Stored Procedures, Functions, Views, Triggers, Inline SQL

Keindahan utama tampilan adalah dapat digunakan seperti tabel dalam banyak situasi, tetapi tidak seperti tabel, tampilan dapat merangkum penghitungan yang sangat kompleks dan gabungan yang umum digunakan. Itu juga dapat menggunakan hampir semua objek di db kecuali untuk prosedur yang tersimpan. Tampilan paling berguna ketika Anda selalu perlu untuk menggabungkan sekumpulan tabel yang sama, katakanlah Pesanan dengan Detail Pesanan untuk mendapatkan bidang kalkulasi ringkasan, dll.

Adriaan Stander
sumber
6
Berhati-hatilah saat melakukan ini. Jika Anda menggunakan tampilan yang memanggil tampilan lain, Anda dapat membuat kekacauan kinerja yang sangat besar.
HLGEM
Anda dapat melakukannya dengan membuat metode & meletakkan kueri SQL di dalam metode. Metode ini dapat digunakan kembali setiap saat. Lalu kenapa lihat ???
ASharma7
10

Tampilan adalah lapisan abstraksi, dan melakukan apa yang dilakukan lapisan abstraksi yang baik, termasuk merangkum skema database dan melindungi Anda dari konsekuensi mengubah detail implementasi internal.

Ini sebuah antarmuka.

dkretz.dll
sumber
1
Selama Anda tidak menumpuk tampilan pada tampilan untuk abstraksi lebih lanjut.
HLGEM
Saya pikir saya telah secara efektif menolak segala jenis abstraksi bertingkat dalam database relasional. Dan saya juga tidak menyebut prosedur tersimpan dari prosedur tersimpan. :)
dkretz
3

Berikut adalah salah satu penggunaan umum menggunakan tampilan untuk membatasi entitas dengan beberapa kriteria.

Tabel: USERS berisi semua pengguna

Tampilan: ACTIVE_USERS berisi semua pengguna kecuali mereka yang ditangguhkan, diblokir, menunggu untuk diaktifkan dan tidak memenuhi kriteria apa pun yang dapat Anda pilih untuk ditentukan di masa mendatang sebagai bagian dari persyaratan aktif. Hal ini membuat Anda tidak perlu menghapus baris dari tabel USERS jika Anda memilih untuk tidak melakukannya karena ACTIVE_USERS selalu dapat menyembunyikan baris yang tidak diinginkan.

Dengan cara ini, Anda dapat menggunakan tabel di halaman manajemen pengguna, tetapi aplikasi lainnya dapat menggunakan ACTIVE_USERS karena mereka mungkin satu-satunya pengguna yang dapat menjalankan proses dan mengakses / mengubah data.

Nefsu
sumber
2

Tampilan dapat memungkinkan Anda menggabungkan data dari beberapa tabel berbeda dan memformatnya (menggabungkan bidang, memberikan nama bidang yang lebih bermakna, dll.) Sehingga lebih mudah bagi pengguna akhir. Mereka adalah abstraksi dari model database. Mereka juga dapat digunakan untuk memberi pengguna akses ke data dalam tabel tanpa memberi mereka akses langsung ke tabel itu sendiri.

TLiebe
sumber
2

Berikut adalah beberapa dari banyak alasan menggunakan view daripada tabel secara langsung

  • Kesederhanaan - Tampilan dapat digunakan untuk menyembunyikan kueri kompleks.
  • Keamanan - Tampilan dapat menyembunyikan beberapa informasi penting dari pengguna akhir dengan membuat tampilan pada beberapa kolom yang dipilih
  • Keamanan - Amankan tabel untuk mengubah strukturnya dengan menggunakan VIEW.
  • Redundansi - Mengurangi kode redundan di setiap prosedur / kueri dengan menggunakan tampilan umum.
  • Perhitungan - Semua perhitungan dapat dilakukan satu kali dalam kueri tampilan.
  • Arti Nama - Tabel mungkin memiliki nama untuk id seperti tbl_org_emp_id yang bisa alias seperti [No Karyawan] atau nama yang bermakna.

Dari imexploring.com

Ali Adravi
sumber
1

Daftar kecil alasan / penggunaan umum:

  • gunakan mereka untuk mengubah format atau 'tampilan' data (yaitu Anda dapat menggabungkan nama depan dan belakang bersama-sama)

    melakukan penghitungan atau pencarian data lainnya

    mendenormalisasi data (mengekstrak data dari beberapa tabel ke satu tempat)

siput
sumber
-6

Pandangan itu jahat! Hindari mereka jika memungkinkan dan gunakan hanya untuk alasan yang disebutkan oleh DVK - migrasi data sementara.

Anda harus memahami bahwa dalam database dengan 100 tabel sulit untuk mengingat tujuan setiap tabel. Sekarang, jika Anda menambahkan 300 tampilan lagi di sini, itu akan menjadi kekacauan total. Dari pada 'View lovers' cenderung menggunakan tampilan bersarang dan kemudian menggunakan tampilan bersarang dalam prosedur yang tersimpan. Saya secara pribadi bekerja sekarang dengan database di mana ada Tampilan yang bersarang secara mendalam 4 kali! Jadi untuk memahami logika paling sederhana dari prosedur tersimpan, saya harus melalui semua tampilan terlebih dahulu.

Dan
sumber
8
-1 Tampilan bagus. Mereka bisa menjadi jahat jika Anda menggunakannya secara tidak tepat - tetapi itu benar tentang apa saja.
NullUserException
1
Tampilan bisa menjadi jahat jika digunakan dengan buruk. Orang yang paling sering menggunakannya dengan buruk tampaknya adalah mereka yang menggunakannya untuk hal-hal abstrak dan kemudian melakukan apa yang Anda katakan, memanggil tampilan yang memanggil tampilan yang memanggil tampilan ke titik di mana Anda mungkin perlu mewujudkan 10 juta pengulangan sebelum mengembalikan hasil set 3. Tampilan tabel pemanggil langsung bisa sangat berguna.
HLGEM
@HGLEM Apakah ada cara untuk membatasi panggilan lihat dari tampilan lain?
Igor Soloydenko