Tipe Range
Bukan rahasia lagi bahwa PostgreSQL adalah salah satu database yang paling fleksibel di pasaran. Bahkan, ekstensibilitas PostgreSQL dan set fitur yang kaya baru-baru ini mendorong PostgreSQL mengungguli MySQL sebagai sistem database yang paling dikagumi dan diinginkan oleh para developer. Dalam seri ini tentang membuat tipe data kustom di PostgreSQL menggunakan Navicat Premium 17. kami telah menjelajahi beberapa opsi sejauh ini, termasuk Domain kustom, serta tipe Composite dan Enumerated. Topik blog minggu ini adalah tipe Range, yang sangat berguna ketika Anda perlu bekerja dengan interval atau rentang nilai yang berkelanjutan.
Deskripsi Singkat RANGE TYPE
Tipe Range di PostgreSQL menyediakan sarana untuk bekerja dengan interval nilai yang terus menerus. Oleh karena itu, sebuah range dapat mencakup semua harga produk antara $10 dan $20. Rentang ini memungkinkan Anda bekerja dengan value apa pun yang berada dalam batas-batasnya, sehingga mudah untuk memeriksa hal-hal seperti konflik penjadwalan atau pencocokan harga. Rentang sangat berguna dalam database ketika Anda perlu bekerja dengan rentang waktu yang terus menerus, interval numerik, atau data berurutan lainnya.
Misalnya, dalam database bioskop, Anda dapat menggunakan rentang untuk merepresentasikan waktu pemutaran, memastikan tidak ada dua film yang dijadwalkan tumpang tindih di bioskop yang sama. Atau dalam sistem pemesanan hotel, rentang dapat melacak tanggal ketersediaan kamar, sehingga memudahkan untuk memeriksa konflik kekosongan kamar. Tipe rentang sangat berharga karena PostgreSQL menangani semua logika yang rumit dalam membandingkan dan memanipulasi interval ini, menyediakan operasi bawaan untuk memeriksa tumpang tindih, penahanan, dan perpotongan antar rentang.
Pada bagian selanjutnya, kita akan membahas beberapa contoh praktis menggunakan Navicat Premium 17 dan DVD Rental database.
Menentukan Rentang Pemutaran Film
Sebelum mempertimbangkan tipe range kustom, kita harus memeriksa apakah salah satu tipe range bawaan PostgreSQL akan memenuhi apa yang kita cari. Tipe-tipe tersebut antara lain:
- int4range:Rentang bilangan bulat
- int8range:Rentang dari bigint
- numrange: Rentang numerik
- tsrange: Rentang cap waktu tanpa zona waktu
- tstzrange: Rentang cap waktu dengan zona waktu
- daterange: Rentang tanggal
Meskipun waktu putar film dalam database Rental DVD disimpan sebagai bilangan bulat, membuat jenis rentang kita sendiri masuk akal ketika kita memiliki persyaratan bisnis tertentu yang tidak tercakup dalam jenis bawaan. Misalnya, jika kita melacak rentang waktu pemutaran film dengan aturan validasi khusus:
-- Creating a custom minutes range type with specific validation CREATE TYPE runtime_range AS RANGE ( subtype = integer, subtype_diff = int4mi ); CREATE TABLE film_runtime_categories ( category_name VARCHAR(50), typical_runtime runtime_range, CHECK (lower(typical_runtime) >l= 30 AND upper(typical_runtime) <= 240) ); -- Adding rows to the table INSERT INTO film_runtime_categories VALUES ('Short Film', '[30,45]'); INSERT INTO film_runtime_categories VALUES ('Feature Film', '[75,180]');
Membuat Tipe Range di Navicat 17
Cara yang lebih mudah untuk mendefinisikan Tipe kustom 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” pada 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 yang baru, klik tanda panah di sebelah item “New Type” pada toolbar “Objects” dan pilih item “Range” dari menu konteks:

Desainer Range Type memiliki tiga tab: Umum, Komentar, dan Preview SQL. Pada tab General, detail utama yang perlu kita berikan adalah “Subtipe” dan “Subtipe Diff”. Kita akan mendasarkan tipe kita pada int4 sebagai berikut:

Sebelum mengklik tombol “Simpan” kita dapat melihat pernyataan yang akan dihasilkan Navicat dengan mengklik tab “Preview SQL”:

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. Kita namakan saja “runtime_range”:

Kita sekarang dapat menggunakan tipe “runtime_range” seperti halnya tipe data PostgreSQL lainnya. Sebagai contoh, jika kita membuat tabel “film_runtime_categories” yang kita lihat pada contoh di atas, kita dapat mengatur kolom “typical_runtime” ke tipe khusus kita dengan memilihnya dari drop-down “Object Type”:

Kita kemudian dapat menambahkan field validasi kita pada tab Cek:

Kesimpulan
Pada blog hari ini, kita telah membuat Range Type menggunakan alat bantu Type Navicat Premium 17 dan membuat tabel baru yang menampilkan tipe kustom kita. Di Bagian 5 kita akan menyimpulkan seri ini dengan memperluas Tipe Dasar.