Kapan menggunakan Tampilan dan bukan Tabel?

108

Kapan Tampilan benar-benar digunakan di atas Tabel sebenarnya? Keuntungan apa yang harus saya harapkan dari hasil ini?

Secara keseluruhan, apa keuntungan menggunakan tampilan di atas tabel? Bukankah sebaiknya saya mendesain tabel dengan tampilan yang semestinya?

bevacqua.dll
sumber

Jawaban:

80

Oh, ada banyak perbedaan yang perlu Anda pertimbangkan

Tampilan untuk seleksi:

  1. Tampilan memberikan abstraksi atas tabel. Anda dapat menambahkan / menghapus bidang dengan mudah dalam tampilan tanpa mengubah skema dasar Anda
  2. Tampilan dapat memodelkan gabungan yang kompleks dengan mudah.
  3. Tampilan dapat menyembunyikan hal-hal khusus database dari Anda. Misalnya jika Anda perlu melakukan beberapa pemeriksaan menggunakan fungsi Oracles SYS_CONTEXT atau banyak hal lainnya
  4. Anda dapat dengan mudah mengelola HIBAH Anda langsung pada tampilan, daripada tabel sebenarnya. Lebih mudah mengelola jika Anda mengetahui pengguna tertentu hanya dapat mengakses tampilan.
  5. Tampilan dapat membantu Anda dengan kompatibilitas mundur. Anda dapat mengubah skema yang mendasarinya, tetapi tampilan dapat menyembunyikan fakta tersebut dari klien tertentu.

Tampilan untuk penyisipan / pembaruan:

  1. Anda dapat menangani masalah keamanan dengan tampilan menggunakan fungsionalitas seperti klausul "WITH CHECK OPTION" dari Oracle secara langsung dalam tampilan

Kekurangan

  1. Anda kehilangan informasi tentang relasi (kunci utama, kunci asing)
  2. Tidak jelas apakah Anda akan dapat menyisipkan / memperbarui tampilan, karena tampilan menyembunyikan gabungan yang mendasarinya dari Anda
Lukas Eder
sumber
3
Pertanyaan singkat: apakah tampilan "permanen", atau apakah hanya bertahan selama sesi? Alasan saya bertanya: kami memiliki sistem yang terkadang turun di tengah-tengah kode yang berjalan lama. Saya mengurangi ini dengan menggigit bagian kode ke dalam tabel perantara yang menyimpan hasil antara. Jadi jika sistem conks sebelum kode selesai, saya hanya perlu mengambil mulai dari tabel temp terakhir yang disimpan. Saya mungkin beralih menggunakan tampilan jika mereka menawarkan keabadian yang sama. Kalau tidak, saya hanya akan terus melakukan hal yang sama, dan menurunkan suhu di akhir proses. Terima kasih!
ouonomos
8
@ouonomos: Tampilan normal tidak berisi data apa pun. Ini hanyalah pernyataan SQL yang disimpan, yaitu tampilan pada data yang mendasarinya. Beberapa database (misalnya Oracle, PostgreSQL) mendukung tampilan terwujud, yang menyimpan "tampilan" sementara di tabel lain untuk akses lebih cepat. Ini dilakukan untuk mempercepat akses baca ketika tampilan itu rumit. Tapi itu tidak membantu Anda dalam kasus Anda karena tampilan yang terwujud masih berupa tampilan, bukan data itu sendiri. Pendekatan Anda mungkin baik-baik saja.
Lukas Eder
44

Tampilan dapat:

  • Sederhanakan struktur tabel yang kompleks
  • Sederhanakan model keamanan Anda dengan memungkinkan Anda memfilter data sensitif dan menetapkan izin dengan cara yang lebih sederhana
  • Memungkinkan Anda mengubah logika dan perilaku tanpa mengubah struktur output (output tetap sama tetapi SELECT yang mendasarinya dapat berubah secara signifikan)
  • Meningkatkan kinerja (Tampilan Terindeks Server Sql)
  • Tawarkan pengoptimalan kueri khusus dengan tampilan yang mungkin sulit didapat jika tidak

Dan Anda sebaiknya tidak mendesain tabel agar sesuai dengan tampilan . Model dasar Anda harus memperhatikan penyimpanan dan pengambilan data yang efisien. Tampilan sebagian merupakan alat yang mengurangi kerumitan yang muncul dari model yang efisien dan dinormalisasi dengan memungkinkan Anda mengabstraksi kompleksitas itu.

Selain itu, menanyakan "apa keuntungan menggunakan tampilan di atas tabel?" Bukanlah perbandingan yang bagus. Anda tidak bisa pergi tanpa tabel, tapi Anda bisa melakukannya tanpa tampilan. Mereka masing-masing ada karena alasan yang sangat berbeda. Tabel adalah model konkret dan Views adalah abstrak, well, View.

Paul Sasik
sumber
1
Tampilan +1 sebagian merupakan alat yang mengurangi kerumitan yang muncul dari model yang efisien dan dinormalisasi dengan memungkinkan Anda mengabstraksi kompleksitas itu.
metdos
34

Tampilan dapat diterima saat Anda perlu memastikan bahwa logika kompleks diikuti setiap saat. Misalnya, kami memiliki tampilan yang membuat data mentah yang diperlukan untuk semua pelaporan keuangan. Dengan membuat semua laporan menggunakan tampilan ini, semua orang bekerja dari kumpulan data yang sama, bukan satu laporan menggunakan satu kumpulan gabungan dan lainnya lupa menggunakan satu yang memberikan hasil yang berbeda.

Tampilan dapat diterima jika Anda ingin membatasi pengguna ke subkumpulan data tertentu. Misalnya, jika Anda tidak menghapus rekaman tetapi hanya menandai yang saat ini sebagai aktif dan versi yang lebih lama sebagai tidak aktif, Anda ingin tampilan yang digunakan untuk memilih hanya rekaman yang aktif. Hal ini mencegah orang lupa meletakkan klausa where dalam kueri dan mendapatkan hasil yang buruk.

Tampilan dapat digunakan untuk memastikan bahwa pengguna hanya memiliki akses ke sekumpulan catatan - misalnya, tampilan tabel untuk klien tertentu dan tidak ada hak keamanan pada tabel dapat berarti bahwa pengguna untuk klien tersebut hanya dapat melihat data untuk klien itu.

Tampilan sangat membantu saat melakukan refactoring database.

Tampilan tidak dapat diterima saat Anda menggunakan tampilan untuk memanggil tampilan yang dapat mengakibatkan kinerja yang buruk (setidaknya di SQL Server). Kami hampir kehilangan klien jutaan dolar karena seseorang memilih untuk mengabstraksi database seperti itu dan kinerjanya sangat buruk dan sering timeout. Kami juga harus membayar untuk perbaikannya, bukan klien, karena masalah kinerja sepenuhnya adalah kesalahan kami. Saat tampilan memanggil tampilan, mereka harus sepenuhnya menghasilkan tampilan yang mendasarinya. Saya telah melihat ini di mana tampilan itu disebut tampilan yang disebut tampilan dan jutaan catatan dibuat untuk melihat tiga yang pada akhirnya dibutuhkan pengguna. Saya ingat salah satu tampilan ini membutuhkan waktu 8 menit untuk melakukan penghitungan sederhana (*) dari rekaman. Pandangan yang memanggil pandangan adalah ide yang sangat buruk.

Tampilan sering kali merupakan ide yang buruk untuk digunakan untuk memperbarui catatan karena biasanya Anda hanya dapat memperbarui bidang dari tabel yang sama (sekali lagi ini adalah SQL Server, database lain mungkin berbeda). Jika demikian, akan lebih masuk akal untuk memperbarui tabel secara langsung sehingga Anda tahu bidang mana yang tersedia.

HLGEM
sumber
1
Tidak tahu ada masalah kinerja dengan tampilan panggilan lihat. Sepertinya aneh. Bukankah itu ditangani dengan benar oleh pengoptimal kueri? Versi SQL Server mana yang digunakan dalam kasus Anda?
Patrick Honorez
7

Tampilan berguna saat Anda perlu memilih dari beberapa tabel, atau hanya untuk mendapatkan subset tabel.

Anda harus mendesain tabel Anda sedemikian rupa sehingga database Anda dapat dinormalisasi dengan baik (duplikasi minimum). Ini dapat membuat kueri agak sulit.

Tampilan adalah sedikit pemisahan, memungkinkan Anda untuk melihat data dalam tabel secara berbeda dari yang disimpan.

Oded
sumber
7

Praktik yang umum dilakukan adalah menyembunyikan gabungan dalam tampilan untuk menyajikan model data yang lebih dinormalisasi kepada pengguna. Penggunaan lain melibatkan keamanan (misalnya dengan menyembunyikan kolom dan / atau baris tertentu) atau kinerja (dalam kasus tampilan terwujud)

TToni
sumber
6

Anda harus mendesain meja Anda TANPA mempertimbangkan tampilan.
Selain menyimpan gabungan dan ketentuan, Tampilan memiliki keunggulan performa: SQL Server dapat menghitung dan menyimpan rencana pelaksanaannya dalam tampilan, dan karenanya membuatnya lebih cepat daripada pernyataan SQL "sambil jalan".
View juga dapat memudahkan pekerjaan Anda terkait akses pengguna di tingkat lapangan.

Patrick Honorez
sumber
5

Pertama-tama, seperti namanya, tampilan tidak dapat diubah. itu karena tampilan tidak lain adalah tabel virtual yang dibuat dari kueri yang disimpan di DB. Karena itu, Anda memiliki beberapa karakteristik tampilan:

  • Anda hanya dapat menampilkan sebagian dari data
  • Anda dapat menggabungkan beberapa tabel menjadi satu tampilan
  • Anda dapat menggabungkan data dalam satu tampilan (pilih jumlah)
  • view tidak benar-benar menyimpan data, mereka tidak memerlukan tablespace karena mereka adalah agregasi virtual dari tabel yang mendasarinya

jadi ada banyak sekali kasus penggunaan yang tampilan lebih pas daripada tabel, pikirkan tentang hanya menampilkan pengguna aktif di situs web. tampilan akan lebih baik karena Anda beroperasi hanya pada subkumpulan data yang sebenarnya ada di DB Anda (pengguna aktif dan tidak aktif)

lihat artikel ini

semoga ini membantu ..

fasseg.dll
sumber
2

Menurut Wikipedia ,

Tampilan dapat memberikan banyak keuntungan dibandingkan tabel:

  • Tampilan dapat mewakili subset dari data yang terdapat dalam tabel.
  • Tampilan dapat membatasi tingkat keterpaparan tabel yang mendasari ke dunia luar: pengguna tertentu mungkin memiliki izin untuk menanyakan tampilan, sementara menolak akses ke tabel dasar lainnya.

  • Tampilan dapat menggabungkan dan menyederhanakan beberapa tabel menjadi satu tabel virtual.

  • Tampilan dapat bertindak sebagai tabel gabungan , di mana mesin database menggabungkan data (jumlah, rata-rata, dll.) Dan menyajikan hasil yang dihitung sebagai bagian dari data.

  • Tampilan dapat menyembunyikan kerumitan data. Misalnya, tampilan bisa muncul sebagai Sales2000 atau Sales2001, secara transparan mempartisi tabel yang mendasari sebenarnya.

  • Tampilan membutuhkan sedikit ruang untuk disimpan ; database hanya berisi definisi tampilan, bukan salinan dari semua data yang disajikan.

  • Tampilan dapat memberikan keamanan ekstra , bergantung pada mesin SQL yang digunakan.

Loukan ElKadi
sumber