Kapan dan Mengapa seseorang memutuskan bahwa mereka perlu membuat Tampilan di basis data mereka? Mengapa tidak menjalankan prosedur tersimpan biasa atau memilih?
Kapan dan Mengapa seseorang memutuskan bahwa mereka perlu membuat Tampilan di basis data mereka? Mengapa tidak menjalankan prosedur tersimpan biasa atau memilih?
Jawaban:
Tampilan memberikan beberapa manfaat.
1. Tampilan dapat menyembunyikan kerumitan
Jika Anda memiliki kueri yang mengharuskan bergabung dengan beberapa tabel, atau memiliki logika atau perhitungan yang rumit, Anda bisa mengode semua logika itu ke dalam tampilan, lalu memilih dari tampilan seperti halnya Anda menggunakan tabel.
2. Tampilan dapat digunakan sebagai mekanisme keamanan
Tampilan dapat memilih kolom dan / atau baris tertentu dari tabel (atau tabel), dan izin ditetapkan pada tampilan alih-alih tabel yang mendasarinya. Ini memungkinkan hanya memunculkan data yang perlu dilihat pengguna.
3. Tampilan dapat menyederhanakan kode legacy pendukung
Jika Anda perlu memperbaiki tabel yang akan merusak banyak kode, Anda bisa mengganti tabel dengan tampilan dengan nama yang sama. Tampilan menyediakan skema yang sama persis dengan tabel asli, sementara skema yang sebenarnya telah berubah. Ini menjaga kode warisan yang referensi tabel tidak rusak, memungkinkan Anda untuk mengubah kode warisan di waktu luang Anda.
Ini hanyalah beberapa dari sekian banyak contoh bagaimana pandangan dapat bermanfaat.
Antara lain, bisa digunakan untuk keamanan. Jika Anda memiliki tabel "pelanggan", Anda mungkin ingin memberi semua staf penjualan Anda akses ke bidang nama, alamat, kode pos, dll., Tetapi tidak dengan credit_card_number. Anda dapat membuat tampilan yang hanya menyertakan kolom yang memerlukan akses lalu memberi mereka akses pada tampilan.
Select name, address, zipcode from customer
tidak akan melayani tujuan, bukan creating a view
?
select * from customer
yang memberi mereka akses ke semuanya. Jika Anda memberi mereka akses ke tampilan dan bukan tabel, mereka tidak bisa mengakses bidang yang tidak ada dalam tampilan.
Tampilan adalah enkapsulasi kueri. Pertanyaan yang diubah menjadi tampilan cenderung rumit dan menyimpannya sebagai tampilan untuk digunakan kembali dapat menguntungkan.
Saya biasanya membuat tampilan untuk mende-normalkan dan / atau mengagregasi data yang sering digunakan untuk tujuan pelaporan.
EDIT
Dengan cara elaborasi, jika saya memiliki database di mana beberapa entitas adalah orang, perusahaan, peran, tipe pemilik, pesanan, detail pesanan, alamat dan telepon, di mana tabel orang menyimpan karyawan dan kontak serta alamat dan tabel telepon menyimpan nomor telepon baik untuk orang maupun perusahaan, dan tim pengembangan ditugaskan untuk menghasilkan laporan (atau membuat data pelaporan dapat diakses oleh non-pengembang) seperti penjualan berdasarkan karyawan, atau penjualan berdasarkan pelanggan, atau penjualan berdasarkan wilayah, penjualan berdasarkan bulan, penjualan berdasarkan bulan , pelanggan oleh negara, dll. Saya akan membuat satu set pandangan yang mende-normalkan hubungan antara entitas basis data sehingga tampilan yang lebih terintegrasi (tidak ada kata pun dimaksudkan) dari entitas dunia nyata tersedia. Beberapa manfaat dapat meliputi:
Beberapa alasan: Jika Anda memiliki gabungan yang rumit, terkadang yang terbaik adalah memiliki pandangan sehingga setiap akses akan selalu memiliki gabungan yang benar dan pengembang tidak harus mengingat semua tabel yang mungkin mereka butuhkan. Biasanya ini untuk aplikasi keuangan di mana akan sangat penting bahwa semua laporan keuangan didasarkan pada set data yang sama.
Jika Anda memiliki pengguna yang ingin membatasi catatan yang pernah mereka lihat, Anda dapat menggunakan tampilan, memberi mereka akses hanya ke tampilan bukan tabel yang mendasari dan kemudian meminta tampilan
Laporan kristal tampaknya lebih suka menggunakan tampilan untuk procs yang disimpan, sehingga orang yang melakukan banyak penulisan laporan cenderung menggunakan banyak tampilan
Tampilan juga sangat berguna saat refactoring database. Anda dapat sering menyembunyikan perubahan sehingga kode lama tidak melihatnya dengan membuat tampilan. Baca di database refactoring untuk melihat bagaimana ini bekerja karena ini adalah cara yang sangat ampuh untuk melakukan refactor.
Satu keuntungan utama dari tampilan atas prosedur tersimpan adalah Anda bisa menggunakan tampilan sama seperti Anda menggunakan tabel. Yaitu, tampilan dapat dirujuk langsung pada FROM
klausa kueri. Misalnya SELECT * FROM dbo.name_of_view
,.
Dalam hampir semua hal lain, prosedur tersimpan lebih kuat. Anda dapat lulus dalam parameter, termasuk out
parameter yang memungkinkan Anda secara efektif untuk kembali beberapa nilai sekaligus, Anda dapat melakukan SELECT
, INSERT
,UPDATE
, dan DELETE
operasi, dll dll
Jika Anda ingin kemampuan Tampilan untuk meminta dari dalam FROM
klausa, tetapi Anda juga ingin dapat mengirimkan parameter, ada cara untuk melakukannya juga. Ini disebut fungsi bernilai tabel.
Inilah artikel yang cukup bermanfaat tentang topik ini:
EDIT: Ngomong-ngomong, pertanyaan semacam ini menimbulkan pertanyaan, apa keuntungan yang dimiliki pandangan atas fungsi bernilai tabel? Saya tidak memiliki jawaban yang benar-benar bagus untuk itu, tetapi saya akan mencatat bahwa sintaks T-SQL untuk membuat tampilan lebih sederhana daripada untuk fungsi bernilai tabel, dan pengguna database Anda mungkin lebih akrab dengan pandangan.
Ini bisa berfungsi sebagai "perantara" antara ORM dan tabel Anda.
Contoh:
Kami memiliki tabel Person yang kami butuhkan untuk mengubah struktur di atasnya sehingga kolom SomeColumn akan dipindahkan ke tabel lain dan akan memiliki hubungan satu ke banyak.
Namun, sebagian besar sistem, berkenaan dengan Orang, masih menggunakan SomeColumn sebagai satu hal, tidak banyak hal. Kami menggunakan tampilan untuk menyatukan semua SomeColumns dan menempatkannya dalam tampilan, yang bekerja dengan baik.
Ini berfungsi karena lapisan data telah berubah, tetapi persyaratan bisnis tidak berubah secara mendasar, sehingga objek bisnis tidak perlu berubah. Jika objek bisnis harus berubah, saya tidak berpikir ini akan menjadi solusi yang layak, tetapi pandangan pasti berfungsi sebagai titik tengah yang baik.
Untuk Fokus pada Data Tertentu Tampilan memungkinkan pengguna untuk fokus pada data spesifik yang menarik minat mereka dan pada tugas-tugas spesifik yang menjadi tanggung jawab mereka. Data yang tidak perlu dapat diabaikan. Ini juga meningkatkan keamanan data karena pengguna hanya dapat melihat data yang ditentukan dalam tampilan dan bukan data dalam tabel yang mendasarinya. Untuk informasi lebih lanjut tentang menggunakan tampilan untuk tujuan keamanan, lihat Menggunakan Tampilan sebagai Mekanisme Keamanan.
Untuk Menyederhanakan Manipulasi Data Tampilan dapat menyederhanakan cara pengguna memanipulasi data. Anda dapat mendefinisikan gabungan yang sering digunakan, proyeksi, kueri UNION, dan kueri SELECT sebagai tampilan sehingga pengguna tidak harus menentukan semua kondisi dan kualifikasi setiap kali operasi tambahan dilakukan pada data tersebut. Misalnya, kueri kompleks yang digunakan untuk tujuan pelaporan dan melakukan subkueri, gabungan luar, dan agregasi untuk mengambil data dari sekelompok tabel dapat dibuat sebagai tampilan. Tampilan menyederhanakan akses ke data karena kueri yang mendasarinya tidak harus ditulis atau diserahkan setiap kali laporan dihasilkan; pandangan itu dipertanyakan sebagai gantinya. Untuk informasi lebih lanjut tentang memanipulasi data.
Anda juga dapat membuat fungsi inline yang ditentukan pengguna yang beroperasi secara logis sebagai tampilan parameter, atau tampilan yang memiliki parameter dalam kondisi pencarian klausa WHERE. Untuk informasi lebih lanjut, lihat Fungsi Inline yang Ditentukan Pengguna.
Untuk Menyesuaikan Tampilan Data memungkinkan pengguna yang berbeda untuk melihat data dengan cara yang berbeda, bahkan ketika mereka menggunakan data yang sama secara bersamaan. Ini sangat menguntungkan ketika pengguna dengan berbagai minat dan tingkat keterampilan yang berbeda berbagi database yang sama. Misalnya, tampilan dapat dibuat yang hanya mengambil data untuk pelanggan yang berurusan dengan manajer akun. Tampilan dapat menentukan data mana yang akan diambil berdasarkan ID login manajer akun yang menggunakan tampilan.
Untuk Mengekspor dan Mengimpor Tampilan Data dapat digunakan untuk mengekspor data ke aplikasi lain. Misalnya, Anda mungkin ingin menggunakan toko dan tabel penjualan di database pub untuk menganalisis data penjualan menggunakan Microsoft® Excel. Untuk melakukan ini, Anda dapat membuat tampilan berdasarkan toko dan tabel penjualan. Anda kemudian dapat menggunakan utilitas bcp untuk mengekspor data yang ditentukan oleh tampilan. Data juga dapat diimpor ke tampilan tertentu dari file data menggunakan utilitas bcp atau pernyataan BULK INSERT asalkan baris dapat dimasukkan ke dalam tampilan menggunakan pernyataan INSERT. Untuk informasi lebih lanjut tentang batasan untuk menyalin data ke tampilan, lihat MASUKKAN. Untuk informasi lebih lanjut tentang menggunakan utilitas bcp dan pernyataan BULK INSERT untuk menyalin data ke dan dari tampilan, lihat Menyalin Ke atau Dari Tampilan.
Untuk Menggabungkan Data yang Dipartisi Operator himpunan UNI Transact-SQL dapat digunakan dalam tampilan untuk menggabungkan hasil dari dua atau lebih kueri dari tabel terpisah menjadi satu set hasil tunggal. Ini muncul kepada pengguna sebagai satu tabel yang disebut tampilan dipartisi. Misalnya, jika satu tabel berisi data penjualan untuk Washington, dan tabel lain berisi data penjualan untuk California, tampilan dapat dibuat dari UNION tabel tersebut. Tampilan mewakili data penjualan untuk kedua wilayah. Untuk menggunakan tampilan yang dipartisi, Anda membuat beberapa tabel identik, menentukan batasan untuk menentukan rentang data yang dapat ditambahkan ke setiap tabel. Tampilan kemudian dibuat menggunakan tabel dasar ini. Ketika tampilan ditanya, SQL Server secara otomatis menentukan tabel mana yang dipengaruhi oleh kueri dan hanya referensi tabel tersebut. Sebagai contoh, jika kueri menentukan bahwa hanya data penjualan untuk negara bagian Washington diperlukan, SQL Server hanya membaca tabel yang berisi data penjualan Washington; tidak ada tabel lain yang diakses.
Tampilan yang dipartisi dapat didasarkan pada data dari berbagai sumber heterogen, seperti server jarak jauh, bukan hanya tabel dalam database yang sama. Misalnya, untuk menggabungkan data dari server jarak jauh yang berbeda yang masing-masing menyimpan data untuk wilayah berbeda di organisasi Anda, Anda bisa membuat kueri terdistribusi yang mengambil data dari setiap sumber data, dan kemudian membuat tampilan berdasarkan kueri terdistribusi tersebut. Setiap kueri hanya membaca data dari tabel di server jauh yang berisi data yang diminta oleh kueri; server lain yang dirujuk oleh kueri yang didistribusikan dalam tampilan tidak diakses.
Saat Anda mempartisi data di beberapa tabel atau beberapa server, kueri yang mengakses hanya sebagian kecil dari data dapat berjalan lebih cepat karena ada lebih sedikit data untuk dipindai. Jika tabel terletak di server yang berbeda, atau di komputer dengan beberapa prosesor, setiap tabel yang terlibat dalam kueri juga dapat dipindai secara paralel, sehingga meningkatkan kinerja kueri. Selain itu, tugas pemeliharaan, seperti membangun kembali indeks atau membuat cadangan tabel, dapat melakukan lebih cepat. Dengan menggunakan tampilan yang dipartisi, data masih muncul sebagai tabel tunggal dan dapat ditanyakan seperti itu tanpa harus merujuk tabel dasar yang benar secara manual.
Tampilan yang dipartisi dapat diperbarui jika salah satu dari kondisi ini terpenuhi: BUKAN pemicu didefinisikan pada tampilan dengan logika untuk mendukung pernyataan INSERT, UPDATE, dan DELETE.
Pernyataan tampilan dan INSERT, UPDATE, dan DELETE mengikuti aturan yang ditetapkan untuk tampilan dipartisi yang dapat diupdate. Untuk informasi lebih lanjut, lihat Membuat Tampilan yang Dipartisi.
https://technet.microsoft.com/en-us/library/aa214282(v=sql.80).aspx#sql:join
Berikut adalah dua alasan umum:
Anda dapat menggunakannya untuk keamanan. Tidak memberikan izin pada tabel utama dan membuat tampilan yang membatasi akses kolom atau baris dan memberikan izin kepada pengguna untuk melihat tampilan.
Anda dapat menggunakannya untuk kenyamanan. Bergabunglah bersama beberapa tabel yang Anda gunakan bersama sepanjang waktu dalam tampilan. Ini dapat membuat kueri konsisten dan lebih mudah.
Ada lebih dari satu alasan untuk melakukan ini. Terkadang membuat kueri gabungan yang umum menjadi mudah karena seseorang hanya dapat menanyakan nama tabel daripada melakukan semua gabungan.
Alasan lain adalah membatasi data untuk pengguna yang berbeda. Jadi misalnya:
Table1: Kolum - USER_ID; USERNAME; SSN
Pengguna admin dapat memiliki priv di tabel sebenarnya, tetapi pengguna yang Anda tidak ingin memiliki akses untuk mengatakan SSN, Anda membuat tampilan sebagai
BUAT LIHAT USERNAM SEBAGAI PILIH user_id, nama pengguna DARI Table1;
Kemudian beri mereka privasi untuk mengakses tampilan dan bukan tabel.
Tampilan dapat menjadi anugerah saat ketika melakukan pelaporan pada database lama. Secara khusus, Anda dapat menggunakan nama tabel sensikal alih-alih 5 nama samar (di mana 2 di antaranya adalah awalan umum!), Atau nama kolom yang penuh dengan singkatan yang saya yakin masuk akal pada saat itu.
Secara umum saya pergi dengan pandangan untuk membuat hidup lebih mudah, mendapatkan detail yang diperluas dari beberapa entitas yang disimpan lebih dari beberapa tabel (menghilangkan banyak gabungan dalam kode untuk meningkatkan keterbacaan) dan kadang-kadang untuk berbagi data melalui beberapa basis data atau bahkan untuk membuat sisipan lebih mudah dibaca.
Berikut adalah cara menggunakan Tampilan bersama dengan izin untuk membatasi kolom yang dapat diperbarui pengguna dalam tabel.
/* This creates the view, limiting user to only 2 columns from MyTestTable */
CREATE VIEW dbo.myTESTview
WITH SCHEMABINDING AS
SELECT ID, Quantity FROM dbo.MyTestTable;
/* This uses the view to execute an update on the table MyTestTable */
UPDATE dbo.myTESTview
SET Quantity = 7
WHERE ID = 1
Ketika saya ingin melihat snapshot dari tabel, dan / atau tampilan (dengan cara read-only)
Saya suka menggunakan tampilan atas prosedur tersimpan ketika saya hanya menjalankan kueri. Tampilan juga dapat menyederhanakan keamanan, dapat digunakan untuk memudahkan sisipan / pembaruan ke beberapa tabel, dan dapat digunakan untuk memotret / mematerialisasikan data (menjalankan kueri yang sudah berjalan lama, dan menyimpan hasil dalam cache).
Saya telah menggunakan tampilan terwujud untuk menjalankan kueri rindu yang tidak diharuskan untuk tetap akurat secara real time.
Ini tidak menjawab pertanyaan Anda dengan tepat, tetapi saya pikir akan layak untuk menyebutkan Pandangan Terwujud . Pengalaman saya sebagian besar dengan Oracle tetapi seharusnya SQL-Server cukup mirip.
Kami menggunakan sesuatu yang serupa dalam arsitektur kami untuk mengatasi masalah kinerja XML. Sistem kami dirancang dengan banyak data yang disimpan sebagai XML pada satu baris dan aplikasi mungkin perlu meminta nilai tertentu di dalamnya. Menangani banyak XMLTip dan menjalankan XPath di sejumlah besar baris memiliki dampak besar pada kinerja sehingga kami menggunakan bentuk pandangan terwujud untuk mengekstrak simpul XML yang diinginkan ke tabel relasional kapan saja tabel dasar berubah. Ini secara efektif memberikan snapshot fisik kueri pada suatu titik waktu yang bertentangan dengan tampilan standar yang akan menjalankan kueri mereka berdasarkan permintaan.
Saya melihat prosedur tersimpan lebih sebagai metode yang dapat saya panggil terhadap data saya, sedangkan bagi saya tampilan menyediakan mekanisme untuk membuat versi sintetis dari data dasar terhadap kueri atau prosedur tersimpan yang dapat dibuat. Saya akan membuat tampilan saat penyederhanaan atau agregasi masuk akal. Saya akan menulis prosedur tersimpan ketika saya ingin memberikan layanan yang sangat spesifik.
Satu hal yang aneh tentang pandangan adalah bahwa mereka dilihat oleh Microsoft Access sebagai tabel: ketika Anda melampirkan front-end Microsoft Access ke database SQL menggunakan ODBC, Anda melihat tabel dan tampilan dalam daftar tabel yang tersedia. Jadi jika Anda menyiapkan laporan yang rumit di MS Access, Anda bisa membiarkan server SQL melakukan penggabungan dan pencarian, dan sangat menyederhanakan hidup Anda. Ditto untuk menyiapkan kueri di MS Excel.
Saya hanya memiliki 10 atau lebih tampilan dalam basis data produksi saya. Saya menggunakan beberapa untuk kolom yang saya gunakan sepanjang waktu. Satu set yang saya gunakan berasal dari 7 tabel, beberapa dengan gabungan luar dan alih-alih menulis ulang bahwa saya hanya perlu memanggil tampilan itu dalam pemilihan dan membuat satu atau 2 bergabung. Bagi saya itu hanya penghemat waktu.
Saya membuat xxx yang memetakan semua hubungan antara tabel utama (seperti tabel Produk) dan tabel referensi (seperti ProductType atau ProductDescriptionByLanguage). Ini akan membuat tampilan yang memungkinkan saya mengambil produk dan semua detailnya diterjemahkan dari kunci asingnya ke deskripsi. Lalu saya bisa menggunakan ORM untuk membuat objek agar mudah membangun kisi, kotak kombo, dll.
Anggap saja sebagai refactoring skema database Anda.
Saya pikir yang pertama. Untuk menyembunyikan kompleksitas Query. Ini sangat tepat untuk dilihat. Bagaimana ketika kita menormalkan tabel Database meningkat. Sekarang untuk mengambil data sangat sulit ketika jumlah tabel meningkat. Jadi cara terbaik untuk menangani adalah mengikuti tampilan. Jika saya salah, perbaiki saya.
Kami membuat tampilan untuk membatasi atau membatasi mengakses semua baris / kolom dalam tabel. Jika pemilik ingin hanya baris / kolom tertentu atau terbatas yang perlu dibagikan, maka ia akan membuat tampilan dengan kolom tersebut.
Untuk keamanan: Memberikan setiap izin pengguna untuk mengakses database hanya melalui sekumpulan kecil tampilan yang berisi data spesifik yang diizinkan untuk dilihat oleh pengguna atau grup pengguna, sehingga membatasi akses pengguna ke data lain.
Kesederhanaan untuk kueri dan struktur : Tampilan dapat menggambar data dari beberapa tabel dan menyajikan tabel tunggal, menyederhanakan informasi dan mengubah kueri multi-tabel menjadi kueri tabel tunggal untuk tampilan dan memberikan pengguna tampilan spesifik dari struktur database, menyajikan database sebagai satu set tabel virtual khusus untuk pengguna atau kelompok pengguna tertentu.
Untuk membuat struktur database yang konsisten : Tampilan menyajikan gambar yang konsisten dan tidak berubah dari struktur database, bahkan jika tabel sumber yang mendasarinya diubah.