Selama Perguruan tinggi, kami terbentur dalam benak kami untuk tidak memperbarui tabel melalui tampilan, dan lagi ketika saya masuk ke tempat kerja kami di mana diberitahu tidak memperbarui database melalui tampilan.
Di mana ada / Apakah ada implikasi kinerja yang signifikan untuk melakukan ini? Atau apakah ini lebih merupakan kasus pengembang senior / DBA yang memberi tahu staf junior untuk tidak melakukan ini karena mereka tanpa disadari dapat mendatangkan malapetaka dengan bergabung secara tidak benar.
EDIT
Saya menggunakan MSSQL 2000-2008 (Tergantung pada rincian klien)
sql-server-2008
view
Tim Sparg
sumber
sumber
INSTEAD OF
pemicu? Saya belum pernah mendengar saran ini terutama BTW apakah Anda tidak pernah diberi alasan?instead of
pemicu digunakan, maka tidak ada ambiguitas dan saya tidak melihat alasan untuk tidak menggunakannya. Tapi saya tidak begitu terbiasa dengan SQL Server jadi saya tidak bisa mengomentari menggunakan tampilan tanpa pemicu.Jawaban:
Agar tampilan dapat diupdate tanpa menggunakan
INSTEAD OF
pemicu "SQL Server harus dapat melacak modifikasi dari definisi tampilan menjadi satu tabel dasar." .Tidak ada kerugian kinerja untuk Memperbarui Tampilan ini karena SQL Server hanya akan menghasilkan rencana kueri untuk tabel dasar yang terpengaruh. Salah satu kelemahan yang mungkin terjadi adalah menambahkan lapisan kebingungan jadi kecuali jika Anda menggunakan Views sebagai lapisan keamanan, lebih jelas untuk hanya menulis kode yang memperbarui tabel dasar secara langsung.
Yang lain mungkin jika tampilan berisi satu ke banyak
JOIN
dan Anda memperbarui sisi "satu" dengan nilai dari sisi "banyak" itu tidak pasti hasil apa yang Anda dapatkan, tetapi hal yang sama berlaku untukUPDATE ... FROM
sintaks kepemilikan SQL Server . Anda perlu menggunakanMERGE
atau kueri sub skalar yang dikorelasikan untuk menghindari kemungkinan masalah ini.Untuk Tampilan yang tidak dapat diupdate dan memerlukan
INSTEAD OF
pemicu ada implikasi kinerja karena tabel pseudoinserted
dandeleted
perlu dihasilkan dari tabel dasar sehingga jika mungkin memperbarui tabel dasar secara langsung kemungkinan akan lebih efisien.sumber