Membuat pandangan

Selesai

Tampilan menyederhanakan cara Anda mengakses dan menyajikan data di SQL Server. Sebagai pengembang SQL, Anda membuat tampilan untuk merangkum kueri kompleks, menyediakan batas keamanan, dan menyajikan data dalam format yang sesuai dengan kebutuhan aplikasi Anda.

Memahami tampilan di SQL Server

Tampilan adalah tabel virtual berdasarkan SELECT perintah. Tidak seperti tabel fisik, tampilan tidak menyimpan data sendiri. Sebagai gantinya, mereka menampilkan data dari tabel dasar setiap kali Anda mengkueri mereka.

Diagram memperlihatkan bagaimana tampilan mengambil data dari tabel yang mendasar.

Dengan tampilan, Anda dapat menyembunyikan kompleksitas JOIN klausa, perhitungan, dan filter dari kode aplikasi. Misalnya, jika aplikasi Anda sering membutuhkan pesanan pelanggan dengan detail produk, Anda dapat membuat tampilan yang menggunakan JOIN di seluruh tabel Pelanggan, Pesanan, dan Produk. Aplikasi Anda kemudian mengkueri satu tampilan alih-alih menulis kompleks JOIN yang sama berulang kali.

Tampilan juga menyediakan lapisan keamanan. Anda dapat memberi pengguna akses ke kolom tertentu melalui tampilan sambil membatasi akses ke tabel yang mendasar. Pendekatan ini memungkinkan Anda hanya mengekspos data yang dibutuhkan pengguna tanpa memberi mereka akses tabel penuh.

Membuat tampilan dasar

Anda membuat tampilan menggunakan CREATE VIEW pernyataan diikuti oleh SELECT kueri. Definisi tampilan menentukan data apa yang muncul saat Anda mengkueri tampilan.

Berikut adalah tampilan sederhana yang menggabungkan informasi pelanggan dan pesanan:

CREATE VIEW Sales.CustomerOrders
AS
SELECT 
    c.CustomerID,
    c.CustomerName,
    c.Email,
    o.OrderID,
    o.OrderDate,
    o.TotalAmount
FROM Sales.Customers c
INNER JOIN Sales.Orders o ON c.CustomerID = o.CustomerID;

Setelah membuat tampilan ini, Anda bisa mengkuerinya seperti tabel apa pun:

SELECT * FROM Sales.CustomerOrders
WHERE CustomerName = 'Contoso Ltd';

Tampilan menjalankan pernyataan SELECT yang mendasar dan mengembalikan hasil seolah-olah berasal dari satu tabel. Penyederhanaan ini membuat kode aplikasi Anda lebih bersih dan lebih mudah dipertahankan.

Anda juga dapat membuat tampilan dengan kolom kalkulasi. Tampilan berikut menambahkan kolom yang mengategorikan pesanan menurut ukuran:

CREATE VIEW Sales.OrderSummary
AS
SELECT 
    OrderID,
    CustomerID,
    OrderDate,
    TotalAmount,
    CASE 
        WHEN TotalAmount < 100 THEN 'Small'
        WHEN TotalAmount < 1000 THEN 'Medium'
        ELSE 'Large'
    END AS OrderSize
FROM Sales.Orders;

Tampilan ini menangani logika kategorisasi di satu tempat. Setiap kueri terhadap OrderSummary mendapatkan perhitungan yang sama tanpa perlu menduplikasi ekspresi CASE.

Menerapkan pertimbangan desain

Saat merancang tampilan, pertimbangkan bagaimana tampilan tersebut akan digunakan dan dipertahankan. Tampilan yang dirancang dengan baik menyeimbangkan kesederhanaan, performa, dan keamanan.

Tentukan nama kolom secara eksplisit alih-alih menggunakan SELECT *. Kolom eksplisit membuat tampilan lebih dapat dipertahankan dan mencegah hasil yang tidak terduga saat tabel yang mendasar berubah. Jika seseorang menambahkan kolom ke tabel dasar, definisi tampilan Anda tetap konsisten:

CREATE VIEW Sales.ActiveCustomers
AS
SELECT 
    CustomerID,
    CustomerName,
    Email,
    Phone
FROM Sales.Customers
WHERE IsActive = 1;

Gunakan WITH CHECK OPTION klausa saat tampilan akan menangani modifikasi data. Opsi ini memastikan bahwa pernyataan INSERT dan UPDATE melalui tampilan hanya memengaruhi baris yang terlihat di dalam tampilan.

CREATE VIEW Sales.HighValueOrders
AS
SELECT 
    OrderID,
    CustomerID,
    OrderDate,
    TotalAmount
FROM Sales.Orders
WHERE TotalAmount > 1000
WITH CHECK OPTION;

Dengan opsi ini, Anda tidak dapat menyisipkan pesanan dengan TotalAmount 500 melalui tampilan HighValueOrders. Database menolak operasi karena baris baru tidak akan memenuhi kondisi tampilan WHERE .

Pertahankan definisi tampilan yang berfokus pada tujuan tertentu. Tampilan yang mencoba melayani beberapa tujuan seringkali menjadi sulit untuk dioptimalkan dan dipahami. Buat tampilan terpisah untuk kasus penggunaan yang berbeda daripada membangun satu tampilan kompleks.

Menentukan kapan menggunakan tampilan

Tampilan data unggul pada skenario tertentu di mana karakteristiknya memberikan manfaat yang jelas. Memahami skenario ini membantu Anda memilih alat yang tepat untuk setiap situasi.

Gunakan tampilan untuk menyederhanakan kueri kompleks yang perlu dijalankan oleh beberapa aplikasi atau pengguna. Alih-alih mengharuskan semua orang memahami kompleksitas menggabungkan lima tabel dengan kondisi tertentu, buatlah satu view. Sentralisasi ini juga berarti Anda dapat mengoptimalkan atau memodifikasi logika di satu tempat.

Pertimbangkan tampilan saat Anda perlu membatasi akses data di tingkat kolom atau baris. Tampilan hanya dapat mengekspos kolom yang sesuai untuk peran sambil menyembunyikan informasi sensitif. Dikombinasikan dengan izin yang sesuai, tampilan memungkinkan Anda memberikan akses ke data tertentu tanpa mengekspos seluruh tabel.

Tampilan bekerja dengan baik untuk menyajikan data dalam format yang berbeda untuk tujuan yang berbeda. Anda mungkin memiliki tabel Produk dengan detail teknis, tetapi tim pelaporan Anda memerlukan versi yang disederhanakan dengan bidang terhitung. Buat tampilan yang mengubah dan mengagregasi data dengan tepat.

Pada saat yang sama, kenali kapan objek lain berfungsi lebih baik. Untuk kueri kritis performa yang selalu mengembalikan hasil yang sama, tampilan terindeks (tampilan materialisasi) menyimpan tataan hasil secara fisik. Untuk perhitungan kompleks yang menerima parameter, fungsi yang ditentukan pengguna memberikan lebih banyak fleksibilitas. Untuk logika modifikasi data, prosedur tersimpan menawarkan kontrol yang lebih baik.

Saat Anda perlu merangkum logika kueri yang dapat digunakan kembali tanpa parameter, dan Anda ingin menyajikan data dengan cara yang disederhanakan, tampilan adalah solusi Anda. Mereka menjenjang kesenjangan antara struktur database fisik dan tampilan logis data yang dibutuhkan aplikasi Anda.