Oleh Manoj Debnath
Tabel dalam database SQL mungkin berisi sejumlah besar data, tetapi tidak selalu dalam format yang berguna untuk segera digunakan. Volume data harus disaring berdasarkan beberapa kriteria tertentu untuk penggunaan yang efisien. Karena alasan keamanan, kami mungkin ingin membuat publik hanya sejumlah data tertentu sementara sisanya mungkin dapat diakses oleh pengguna yang memiliki hak istimewa. Operasi SQL DML dapat diperluas dan digunakan untuk memfilter satu atau beberapa tabel menggunakan ekspresi kueri yang kompleks. Memanfaatkan ide tersebut, kita dapat membuat tabel virtual dari tabel dasar persisten menggunakan SQL yang akan berisi data persis yang kita butuhkan. Inilah alasan standar SQL:2006 memperkenalkan penggunaan tabel tampilan, atau tampilan. Definisi tampilan atau tabel virtual ada sebagai objek skema. Artikel ini memperkenalkan konsep view dalam SQL, cara kerjanya dan menunjukkan bagaimana penerapannya dengan beberapa contoh.
Pengantar Tampilan SQL
Tampilan SQL tidak lain adalah tabel virtual yang berada di memori yang berasal dari satu atau lebih tabel dasar. Tabel virtual berarti tupel dalam tampilan tidak memiliki keberadaan fisik dan tidak disimpan ke dalam database. Tupel seperti data sementara yang dibuat sebagai hasil dari kueri SQL yang biasanya menarik data yang difilter dari satu atau lebih tabel dasar. Akibatnya, ada batasan pada jenis operasi yang dapat diterapkan ke tabel tampilan. Misalnya, operasi pembaruan tidak dapat diterapkan ke semua jenis tampilan, tetapi tidak memiliki batasan untuk menerapkan kueri SQL di atasnya.
Contoh di bawah ini diuji dengan database MySQL. Mulailah dengan membuat beberapa tabel:
perusahaan_saya basis data:
CREATE DATABASE my_company; CREATE TABLE Employee( empId INT(11) UNSIGNED CHECK (empId > 0), empName VARCHAR(20), birthDate DATE, address TEXT(128), gender VARCHAR(1), salary DECIMAL(15,2), managerId INT(11) UNSIGNED, deptId INT(11) UNSIGNED, PRIMARY KEY(empId) ); CREATE TABLE Department( deptId INT(11) UNSIGNED CHECK (empId > 0), deptName VARCHAR(20), deptMgrId INT(11) UNSIGNED, mgrStartDate DATE, PRIMARY KEY(deptId) ); CREATE TABLE Project( projId INT(11) UNSIGNED CHECK (empId > 0), projName VARCHAR(20), projLocation TEXT(128), deptId INT(11) UNSIGNED, PRIMARY KEY(projId) ); CREATE TABLE EmpWorksOnProj( empId INT(11) UNSIGNED, projId INT(11) UNSIGNED, hoursWorked DECIMAL(4,2) ); ALTER TABLE Employee ADD CONSTRAINT fk_emp_mgr FOREIGN KEY(managerId) REFERENCES Employee(empId); ALTER TABLE Employee ADD CONSTRAINT fk_emp_dept FOREIGN KEY(deptId) REFERENCES Department(deptId); ALTER TABLE Department ADD CONSTRAINT fk_dept_mgr FOREIGN KEY(deptMgrId) REFERENCES Employee(empId); ALTER TABLE Project ADD CONSTRAINT fk_proj_dept FOREIGN KEY(deptId) REFERENCES Department(deptId);
Tampilan dapat dianggap sebagai tabel referensi, dan kita dapat menggunakannya sesering yang kita inginkan meskipun mungkin tidak ada secara fisik. Misalnya, kami mungkin sering perlu merujuk ke perusahaan_saya database dan temukan Karyawan dan Proyek informasi. Perhatikan bahwa ada banyak ke banyak hubungan antara Karyawan dan Proyek karena satu orang dapat mengerjakan banyak proyek dan juga satu proyek memiliki banyak karyawan. Oleh karena itu, alih-alih menentukan gabungan tiga tabel:Karyawan , EmpWorksOnProj , dan Proyek setiap kali kami membutuhkan informasi kolaboratif dan mengeluarkan kueri, kami mendefinisikan tampilan yang ditentukan sebagai hasil gabungan di antara tabel-tabel ini. Tampilan membentuk tabel virtual yang dibuat dari hasil kueri. Keuntungannya adalah kueri sekarang dapat mengambil dari tabel hasil tunggal daripada harus mengambil dari tiga tabel yang digabungkan. Kumpulan tabel:Karyawan , Proyek , Departemen dll. sehingga membentuk tabel dasar atau tabel pendefinisian tampilan.
Mari kita buat beberapa tampilan berdasarkan skema yang diberikan di atas.
CREATE VIEW V1 AS SELECT empName, projName, hoursWorked FROM Employee, Project, EmpWorksOnProj WHERE Employee.empId=EmpWorksOnProj.empId AND Project.projId=EmpWorksOnProj.projId;
Cara menentukan kueri SQL pada tampilan atau tabel virtual sama dengan menentukan kueri yang melibatkan tabel dasar. Anda dapat menggunakan SQL SELECT pada tampilan untuk mendapatkan data sebagai berikut:
PILIH * DARI V1;
NamaEmp | ProjName | Jam Kerja |
Miki Tikus | ClubHouse | 6.50 |
… | … | … |
Donal Bebek | Bertani | 7.0 |
Berikut ini membuat tampilan kedua:
CREATE VIEW V2 AS SELECT deptName, COUNT(*), SUM(salary) FROM Department, Employee WHERE Employee.deptId=Department.deptId GROUP BY deptName;
SQL SELECT menghasilkan
SELECT * FROM V1;
Nama Dept | JUMLAH(*) | SUM(gaji) |
Musik | 5 | 560000.00 |
… | … | … |
Drama | 2 | 25400.00 |
Perhatikan bahwa dalam tampilan V1 nama atribut diturunkan dari tabel dasar. Dalam V2 nama atribut baru secara eksplisit ditentukan menggunakan korespondensi satu-ke-satu antara atribut yang ditentukan dari klausa CREATE VIEW dan yang ditentukan dalam klausa SELECT. Klausa SELECT dengan view menentukan definisi view.
Informasi pada tampilan harus selalu up to date. Itu berarti itu harus selalu mencerminkan perubahan yang dibuat pada tabel dasar yang didefinisikan. Ini menarik, karena itu berarti bahwa tampilan tidak benar-benar terwujud pada saat mendefinisikannya, tetapi kemudian ketika kueri ditentukan di atasnya. Sistem manajemen basis data di latar belakang bertanggung jawab untuk menjaga tampilan tetap mutakhir.
PERBARUI, MASUKKAN, dan HAPUS pada tampilan
Dalam SQL, dimungkinkan untuk membuat tampilan yang dapat diperbarui yang dapat digunakan untuk mengubah data yang ada atau menyisipkan baris baru ke dalam tampilan yang pada gilirannya menyisipkan atau memodifikasi catatan di tabel dasar . Tampilan dapat diperbarui atau tidak ditentukan oleh pernyataan SELECT yang ditentukan dalam definisi tampilan. Tidak ada klausa khusus untuk menetapkan tampilan yang dapat diperbarui. Biasanya, definisi tampilan harus sederhana dan tidak boleh berisi fungsi agregat apa pun seperti SUM, AVG, MAX, MIN, COUNT. Segala jenis pengelompokan atau klausa DISTINCT atau JOIN juga membuat tampilan tidak dapat diperbarui. Lihat manual database yang relevan dari RDBMS spesifik untuk mengetahui apa yang membuat tampilan tidak dapat diperbarui.
Mari buat tampilan yang dapat diperbarui:
CREATE VIEW v3_ch_dept_name AS SELECT deptId, deptName, deptMgrId, mgrStartDate FROM Department;
Kueri SELECT pada tampilan:
SELECT * FROM v3_ch_dept_name;
DeptId | Nama Dept | DeptMgrId | TanggalMgrStart |
1 | Musik | 123456789 | 01-01-2020 |
… | … | … | … |
5 | Drama | 987654321 | 03-05-2018 |
Sekarang perbarui tampilan dengan mengubah nama departemen (deptName).
UPDATE v3_ch_dept_name SET deptName = 'Security' WHERE deptId = 5;
Baris dapat disisipkan dalam tampilan sebagai berikut:
INSERT INTO v3_ch_dept_name VALUES (7,'Logistics',666884444,'1982-07-07');
Kita juga dapat MENGHAPUS satu baris dari tampilan sebagai berikut:
DELETE FROM v3_ch_dept_name WHERE deptId = 7;
Di MySQL, Anda dapat dengan mudah menemukan tampilan dalam database yang dapat diperbarui atau tidak menggunakan perintah SELECT berikut.
SELECT table_name FROM information_schema.views WHERE is_updatable like 'YES' AND table_schema like 'my_company';
LEPASKAN tampilan dari database
Tampilan selalu dapat dibuang dengan DROP VIEW
DROP VIEW V1;
Perhatikan bahwa ketika kita menjalankan perintah drop view itu menghapus definisi view. Data dasar yang disimpan dalam tabel dasar dari mana tampilan ini diturunkan tetap tidak berubah. Tampilan yang telah dihapus dapat dibuat ulang dengan nama yang sama.
Pernyataan ALTER VIEW
Tampilan umumnya tidak dapat diubah menurut standar SQL:2006, yang berarti pernyataan ALTER VIEW tidak berfungsi dengan tampilan. Namun, ada RDBMS seperti MySQL atau SQL Server yang mendukung pernyataan semacam ini. Oracle percaya dalam menjatuhkan tampilan terlebih dahulu kemudian membuatnya kembali daripada mengubahnya. Oleh karena itu, fungsi yang didukung pada tampilan oleh RDBMS bervariasi dari satu produk ke produk lainnya.
Kesimpulan
Tampilan SQL juga merupakan alat yang berguna untuk mengakses beberapa tipe data. Kueri kompleks dapat disimpan dalam definisi tampilan. Ini memanfaatkan penggunaan kembali karena kami dapat memanggil tampilan alih-alih membuat ulang kueri setiap kali kami membutuhkannya. Ini adalah cara yang nyaman untuk menyajikan informasi kepada pengguna yang menyembunyikan banyak informasi yang tidak ingin kami ungkapkan kepada semua orang. Ini penting dari perspektif keamanan juga. Struktur kompleks dapat disintesis dan disajikan dalam format yang mudah bagi pengguna akhir.
Referensi:
Elmasri, Ramez, dan Shamkant B. Navathe. Dasar-Dasar Sistem Basis Data . Pendidikan Pearson.