Memanfaatkan View Pada MySQL Untuk Keperluan Login Multi Level

Dalam MySQL ada sebuah fitur yang bernama View. Pengertian dari view ini bisa didefinisikan sebagai Virtual Table dari hasil query yang kita punya.

Tabel virtual dari view ini sama dengan tabel asli pada database yang memiliki kolom (column) dan baris (row). Kolom pada view tergantung pada hasil select query yang kita punya pada view tersebut, begitu juga dengan row-nya.

Tujuan dari pembuatan view sendiri adalah untuk kenyamanan dalam penulisan query yang kompleks. Misal, kita punya sebuah SQL Query yang cukup rumit terdiri dari banyak join dari tabel satu ke tabel lainnya dan query tersebut kita eksekusi berulang kali. Kita bisa menyederhanakan eksekusi query tersebut menggunakan view.

Contoh lain yang bisa kita gunakan adalah proses login yang menggunakan multi level pada aplikasi web. Contoh kasus pada aplikasi sekolah di mana kita punya data siswa dan guru.

Desain Database

Dalam sebuah aplikasi terutama dalam lingkup sekolah, kita harus punya beberapa level user mulai dari Administrator, guru sampai dengan level siswa di mana setiap level akan punya akses tertentu.

Administrator, guru dan siswa akan kita pisah tabelnya karena tentu ketiga kategori user ini akan punya perbedaan data yang akan disimpan.

Jadi, kita akan buat 3 tabel:

  • Tabel user (tb_user)
  • Tabel guru (tb_guru)
  • Tabel siswa (tb_siswa)

Dari ketiga tabel tersebut anggaplah kita hanya perlu kolom username, password dan kategori/level. Untuk tabel guru dan siswa, kolom kategori/level bisa kita hard code nanti.

Jadi query dari masing-masing tabel di atas untuk hanya mengambil kolom username, password dan level dan UNION ketiga tabel tersebut seperti ini:

SELECT username, password, level FROM tb_user
UNION
SELECT username, password, 'guru' as level FROM tb_guru
UNION
SELECT username, password, 'siswa' as level FROM tb_siswa

Penjelasan:

Kita melakukan select query terhadap ketiga tabel (user, guru dan siswa) lalu kita union ketiganya agar hasil dari ketiga tabel tersebut menjadi satu.

Pada query tabel guru dan siswa kita melakukan hard code pada kolom level karena kita tidak punya kolom level pada tabel guru dan siswa. Alasan kenapa saya tidak membuat kolom level langsung di tabelnya adalah karena dari tabel guru sudah pasti untuk data guru. Begitupun dengan tabel siswa.

Sedangkan pada tabel user kita perlu membuat kolom level karena bisa jadi di tabel user berisi data dari berbagai level.

Membuat View

Sebelumnya kita sudah membuat query yang akan kita pakai untuk membuat view. Untuk membuat view sendiri adalah seperti ini:

CREATE VIEW `nama_view` 
AS (query kita di sini);

Sehingga jika gabungkan query yang sudah kita buat di atas, jadinya akan seperti ini:

CREATE VIEW `view_login` 
AS
(
    SELECT username, password, level FROM tb_user
    UNION
    SELECT username, password, 'guru' as level FROM tb_guru
    UNION
    SELECT username, password, 'siswa' as level FROM tb_siswa
);

Oke, script untuk membuat view login multi level sudah selesai. Sekarang kita hanya perlu mengeksekusi script tersebut. Jika tidak ada eror, kita sudah berhasil membuat view login.

Lalu bagaimana cara kita mengakses view yang sudah kita buat tadi? Caranya sama saja dengan select query ke tabel asli.

SELECT * FROM view_login WHERE username='username' and password='password'

Dari query di atas, kita akan mendapatkan hasil dari ketiga tabel sekaligus (user, guru dan siswa). Tinggal digunakan sesuai kebutuhan.

Kesimpulan

Pada dasarnya view yang kita buat hanya untuk menyederhanakan dalam penulisan query apalagi query yang komplek. Kita tidak perlu lagi menulis query yang komplek tersebut di sisi aplikasinya. Jadi kita hanya harus memanggil view yang sudah kita buat dengan cara yang sama ketika kita memanggil tabel aslinya.

Semoga bermanfaat :)

--

Sumber gambar : singlemind