Enumerated Types
Dalam seri ini tentang membuat tipe data kustom di PostgreSQL menggunakan Navicat Premium 17, kita telah menjelajahi beberapa opsi sejauh ini. Pada bagian 1, kita telah mempelajari cara membuat Domain khusus untuk database Penyewaan DVD gratis. Minggu lalu, kita telah membuat Tipe Komposit untuk mengembalikan data kompleks dari fungsi yang ditentukan pengguna. Blog hari ini akan membahas Tipe Enumerasi, yang membatasi nilai satu set opsi yang telah ditentukan sebelumnya.
Overview Singkat ENUM TYPE
Tipe enumerasi (ENUM) memungkinkan kita untuk mendefinisikan tipe data dengan serangkaian value yang statis dan terurut. Hal ini berguna untuk situasi dimana sebuah kolom harus berisi salah satu dari sekumpulan value yang telah ditentukan sebelumnya.
Seperti tipe PostgreSQL lainnya, tipe ENUM dibuat dengan menggunakan pernyataan CREATE TYPE. Berikut adalah ENUM yang mendefinisikan empat status pengguna:
CREATE TYPE user_status AS ENUM ('active', 'inactive', 'suspended', 'pending');
Berikut ini satu lagi yang mendefinisikan peringkat film:
CREATE TYPE movie_rating AS ENUM ('G', 'PG', 'PG-13', 'R', 'NC-17');
Setelah didefinisikan, kita dapat menggunakan tipe kustom kita dalam tabel sebagai berikut:
CREATE TABLE films ( film_id SERIAL PRIMARY KEY, title VARCHAR(255), rating movie_rating );
Membuat Tipe Enumerasi di Navicat 17
Cara yang lebih mudah untuk mendefinisikan Enumerated Type adalah dengan menggunakan alat bantu berbasis GUI Navicat. Anda akan menemukannya di Navicat Premium 17 dan Navicat for PostgreSQL 17. Untuk mengakses alat Type, cukup klik “Others” di toolbar utama dan kemudian pilih “Type” dari drop-down:

Ini akan memunculkan panel Objects, di mana kita akan melihat daftar tipe yang sudah ada. Untuk membuat tipe baru, klik tanda panah di sebelah item “New Type” pada toolbar “Objek” dan pilih item “Enum” dari menu konteks:

Hal itu akan meluncurkan perancang Tipe di tab baru. Pada tab General akan ada sel kosong di mana kita dapat memasukkan Label pertama untuk Enum kita, yaitu “G”:

Kita dapat menambahkan baris baru untuk memasukkan Label berikutnya dengan mengklik “Label Baru”. Setelah semua Label dimasukkan, tab General akan menampilkan sebagai berikut:

Sebelum mengklik tombol “Simpan” kita dapat melihat pernyataan bahwa Navicat akan menghasilkan dengan mengklik pada tab “SQL Preview”:

Perhatikan bahwa nama Type adalah “Untitled” karena kita belum menyimpan definisinya. Hal ini memang diharapkan.
Setelah mengklik tombol “Simpan”, kita akan dihadapkan pada dialog “Simpan Sebagai” di mana kita dapat memberikan nama pada Type kita. Mari kita beri nama “film_rating”:

Menggunakan Tipe film_rating pada Definisi Tabel
Sekarang kita dapat menggunakan tipe “film_rating” seperti halnya tipe data PostgreSQL lainnya. Sebagai contoh, kita dapat mengatur kolom tabel dengan tipe khusus kita. Kita bahkan dapat mengubah tipe pada tabel yang sudah ada asalkan nilai datanya sesuai dengan nilai Enum kita. Bahkan, mengubah tipe kolom dari VARCHAR umum ke ENUM yang lebih ketat adalah cara yang efisien untuk menentukan dengan cepat apakah suatu kolom berisi nilai yang tidak valid.
Jika kita membuka tabel “film” di Navicat Table Designer, kita dapat mengatur kolom “rating” ke tipe “film_rating” dengan memilih “(Type)” dari drop-down “Type” dan kemudian mengatur “Object Type” ke “film_rating”:

Pastikan juga bahwa kolom “Collation” kosong.
Jika kolom tersebut tidak berisi nilai yang tidak valid, kita seharusnya dapat menyimpan definisi tabel tanpa kesalahan atau peringatan.
Salah satu keuntungan dari mengatur tipe kolom menjadi ENUM adalah Navicat akan menyediakan drop-down untuk memilih nilai:

Kesimpulan
Dalam blog hari ini, kita telah membuat Enumerated Type menggunakan alat bantu Type Navicat Premium 17 dan memperbarui tabel yang sudah ada untuk menggunakan tipe kustom kita untuk membatasi nilai kolom. Bagian 4 akan dilanjutkan dengan Tipe Rentang.