Implementasi Kode Wilayah
Pada Tutorial SQL terdahulu telah sedikit disinggung mengenai kode wilayah. Kode tersebut sebenarnya adalah standar kodifikasi wilayah yang resmi dikeluarkan oleh Pemerintah Indonesia melalui Biro Pusat Statistik, yang fungsinya antara lain sebagai dasar pelaporan berbagai indikator berbasis wilayah. Kodifikasi tersebut cukup lengkap, yaitu meliputi pembagian wilayah administratif mulai dari propinsi, kabupaten/kota, kecamatan hingga desa/kelurahan.
Pembahasan kali ini akan difokuskan kepada bagaimana implementasi kode wilayah tersebut kedalam database dan model query yang bisa digunakan. Model implementasi ini penting sebagai landasan awal desain database untuk berbagai keperluan/kepentingan, terutama yang satu standar dengan bentuk pelaporan pada instansi-instansi pemerintah, supaya nantinya kita dapat memetik manfaat lebih dalam menggali informasi.
Untuk itu, terlebih dahulu kita perlu melihat kodenya, kita ambil sedikit contoh:
+-------------+-----------------+Jika kita perhatikan, kode diatas merangkum struktur hirarki wilayah administratif dalam satu atribut numerik (angka) yang terdiri dari 10 digit dengan susunan sebagai berikut (mulai dari kiri ke kanan):
| kode | nama_wilayah |
+-------------+-----------------+
| 3400000000 | D I YOGYAKARTA | << propinsi
| 3401000000 | KULON PROGO | << kabupaten
| 3401010000 | TEMON | << kecamatan
| 3401010001 | JANGKARAN | << kelurahan
| 3401010002 | SINDUTAN | << kelurahan
| 3401010003 | PALIHAN | << kelurahan
| 3401010004 | GLAGAH | << kelurahan
| 3403000000 | GUNUNG KIDUL | << kabupaten
| 3403011000 | PURWOSARI | << kecamatan
| 3403011001 | GIRIJATI | << kelurahan
| 3403011002 | GIRIASIH | << kelurahan
| 3403011003 | GIRICAHYO | << kelurahan
| 3403011004 | GIRIPURWO | << kelurahan
| 3403011005 | GIRITIRTO | << kelurahan
| 3403020000 | PALIYAN | << kecamatan
| 3100000000 | DKI JAKARTA | << propinsi
| 3171000000 | JAKARTA SELATAN | << kota
| 3171010000 | JAGAKARSA | << kecamatan
| 3171010001 | CIPEDAK | << kelurahan
| 3171010002 | SRENGSENG SAWAH | << kelurahan
| 3171010003 | CIGANJUR | << kelurahan
+-------------+-----------------+
- Diawali 2 digit kode propinsi.
- Diikuti 2 digit kode kabupaten.
- Diikuti 3 digit kode kecamatan.
- Diikuti 3 digit kode desa.
31 << Propinsi DKI JAKARTAContoh 2 : 3400000000
71 << Kota JAKARTA SELATAN
010 << Kecamatan JAGAKARSA
003 << Kelurahan CIGANJUR
34 << Propinsi D I YOGYAKARTAContoh 3 : 3171000000
00 << kota, kosong
000 << kecamatan, kosong
000 << kelurahan, kosong
31 << Propinsi DKI JAKARTADari ketiga contoh diatas, dapat kita lihat bagaimana struktur hirarki diperoleh/disusun dalam kodifikasi tersebut. Selanjutnya struktur tersebut akan kita manfaatkan dalam query-query.
71 << kota JAKARTA SELATAN
000 << kecamatan, kosong
000 << kelurahan, kosong
IMPLEMENTASI
Implementasi akan kita mulai dengan membuat sebuah tabel yang sederhana terlebih dahulu, yaitu tabel dengan 2 atribut, yaitu kode dan nama_wilayah:
CREATE TABLE wilayah (Kemudian kita isi dengan data contoh:
kode char(10) NOT NULL default '',
nama_wilayah char(100) NOT NULL default '',
PRIMARY KEY (kode)
);
INSERT INTO wilayah VALUES ('3400000000','D I YOGYAKARTA');
INSERT INTO wilayah VALUES ('3401000000','KULON PROGO');
INSERT INTO wilayah VALUES ('3401010000','TEMON');
INSERT INTO wilayah VALUES ('3401010001','JANGKARAN');
INSERT INTO wilayah VALUES ('3401010002','SINDUTAN');
INSERT INTO wilayah VALUES ('3401010003','PALIHAN');
INSERT INTO wilayah VALUES ('3401010004','GLAGAH');
INSERT INTO wilayah VALUES ('3403000000','GUNUNG KIDUL');
INSERT INTO wilayah VALUES ('3403011000','PURWOSARI');
INSERT INTO wilayah VALUES ('3403011001','GIRIJATI');
INSERT INTO wilayah VALUES ('3403011002','GIRIASIH');
INSERT INTO wilayah VALUES ('3403011003','GIRICAHYO');
INSERT INTO wilayah VALUES ('3403011004','GIRIPURWO');
INSERT INTO wilayah VALUES ('3403011005','GIRITIRTO');
INSERT INTO wilayah VALUES ('3403020000','PALIYAN');
INSERT INTO wilayah VALUES ('3100000000','DKI JAKARTA');
INSERT INTO wilayah VALUES ('3171000000','JAKARTA SELATAN');
INSERT INTO wilayah VALUES ('3171010000','JAGAKARSA');
INSERT INTO wilayah VALUES ('3171010001','CIPEDAK');
INSERT INTO wilayah VALUES ('3171010002','SRENGSENG SAWAH');
INSERT INTO wilayah VALUES ('3171010003','CIGANJUR');
QUERY
Selanjutnya akan kita lakukan test untuk mengetahui apakah desain tabel yang sederhana tersebut sudah cukup mampu mengakomodasi kebutuhan informasi kita.
1. Tampilkan propinsi:
SELECT * FROM wilayahhasilnya:
WHERE kode LIKE '__00000000';
+------------+----------------+2. Tampilkan kota/kabupaten saja:
| kode | nama_wilayah |
+------------+----------------+
| 3400000000 | D I YOGYAKARTA |
| 3100000000 | DKI JAKARTA |
+------------+----------------+
SELECT * FROM wilayahhasilnya:
WHERE kode LIKE '____000000'
AND kode NOT LIKE '__00000000';
+------------+-----------------+3. Tampilkan kecamatan saja:
| kode | nama_wilayah |
+------------+-----------------+
| 3401000000 | KULON PROGO |
| 3403000000 | GUNUNG KIDUL |
| 3171000000 | JAKARTA SELATAN |
+------------+-----------------+
SELECT * FROM wilayahhasilnya:
WHERE kode LIKE '_______000'
AND kode NOT LIKE '____000000';
+------------+--------------+4. Tampilkan desa/kelurahan saja:
| kode | nama_wilayah |
+------------+--------------+
| 3401010000 | TEMON |
| 3403011000 | PURWOSARI |
| 3403020000 | PALIYAN |
| 3171010000 | JAGAKARSA |
+------------+--------------+
SELECT * FROM wilayahhasilnya:
WHERE kode NOT LIKE '0';
+------------+-----------------+5. Tampilkan desa/kelurahan yang berada di kecamatan JAGAKARSA saja:
| kode | nama_wilayah |
+------------+-----------------+
| 3401010001 | JANGKARAN |
| 3401010002 | SINDUTAN |
| 3401010003 | PALIHAN |
| 3401010004 | GLAGAH |
| 3403011001 | GIRIJATI |
| 3403011002 | GIRIASIH |
| 3403011003 | GIRICAHYO |
| 3403011004 | GIRIPURWO |
| 3403011005 | GIRITIRTO |
| 3171010001 | CIPEDAK |
| 3171010002 | SRENGSENG SAWAH |
| 3171010003 | CIGANJUR |
+------------+-----------------+
SELECT * FROM wilayahhasilnya:
WHERE kode LIKE '3171010%'
AND kode NOT LIKE '0';
+------------+-----------------+6. Berapa jumlah kelurahan di propinsi D I YOGYAKARTA:
| kode | nama_wilayah |
+------------+-----------------+
| 3171010001 | CIPEDAK |
| 3171010002 | SRENGSENG SAWAH |
| 3171010003 | CIGANJUR |
+------------+-----------------+
SELECT COUNT(*) FROM wilayahhasilnya:
WHERE kode LIKE '34%'
AND kode NOT LIKE '0';
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+
APLIKASI
Sudah tergambar idenya? Kami kira tidak terlalu sulit bagaimana aplikasi praktisnya. Kita ambil contoh sebuah metode sederhana survei kasus-kasus penyakit x, dengan cukup menggunakan satu tabel untuk data kasus dengan struktur sebagai berikut:
+--------------+----------+Berikut ini perintah untuk membuat tabel dan sekaligus mengisinya dengan contoh datanya:
| Field | Type |
+--------------+----------+
| kasus_no | int(10) | << nomor kasus
| kode | char(10) | << kode wilayah
+--------------+----------+
CREATE TABLE kasus (Lalu segera kita coba hasilnya dengan query berikut:
kasus_no int(10) unsigned NOT NULL default '0',
kode char(10) NOT NULL default '',
PRIMARY KEY (kasus_no)
);
INSERT INTO kasus VALUES(1,'3171010003');
INSERT INTO kasus VALUES(2,'3171010002');
INSERT INTO kasus VALUES(3,'3171010001');
INSERT INTO kasus VALUES(4,'3403011005');
INSERT INTO kasus VALUES(5,'3403011004');
INSERT INTO kasus VALUES(6,'3403011005');
INSERT INTO kasus VALUES(7,'3403011003');
INSERT INTO kasus VALUES(8,'3401010004');
INSERT INTO kasus VALUES(9,'3171010003');
INSERT INTO kasus VALUES(10,'3403011003');
INSERT INTO kasus VALUES(11,'3403011005');
INSERT INTO kasus VALUES(12,'3171010003');
INSERT INTO kasus VALUES(13,'3401010004');
INSERT INTO kasus VALUES(14,'3401010003');
INSERT INTO kasus VALUES(15,'3401010001');
INSERT INTO kasus VALUES(16,'3401010002');
INSERT INTO kasus VALUES(17,'3401010003');
INSERT INTO kasus VALUES(18,'3171010001');
INSERT INTO kasus VALUES(19,'3401010003');
INSERT INTO kasus VALUES(20,'3171010003');
SELECT b.nama_wilayah as 'Wilayah',hasilnya:
COUNT(a.kasus_no) as 'Jumlah Kasus'
FROM kasus a
LEFT JOIN wilayah b USING(kode)
GROUP BY a.kode ORDER BY a.kode;
+-----------------+--------------+Kita coba lagi dengan query yang lain:
| Wilayah | Jumlah Kasus |
+-----------------+--------------+
| CIPEDAK | 2 |
| SRENGSENG SAWAH | 1 |
| CIGANJUR | 4 |
| JANGKARAN | 1 |
| SINDUTAN | 1 |
| PALIHAN | 3 |
| GLAGAH | 2 |
| GIRICAHYO | 2 |
| GIRIPURWO | 1 |
| GIRITIRTO | 3 |
+-----------------+--------------+
SELECT b.nama_wilayah as Wilayah,hasilnya:
COUNT(a.kasus_no) as 'Jumlah Kasus'
FROM kasus a
LEFT JOIN wilayah b
ON b.kode = CONCAT(SUBSTRING(a.kode,1,2),'00000000')
GROUP BY b.kode
ORDER BY b.kode;
+----------------+--------------+Selanjutnya terserah Anda. Tentunya akan lebih menarik lagi jika struktur tabel kasus tersebut dilengkapi dengan atribut lain misalnya: waktu, jenis kelamin, usia, dll. Okay, sekian dan enjoy ...
| Wilayah | Jumlah Kasus |
+----------------+--------------+
| DKI JAKARTA | 7 |
| D I YOGYAKARTA | 13 |
+----------------+--------------+
5 comments:
Kelemahan dasar dari negara kita di bidang kesehatan adalah kurangx database kesehatan yang nantinya dipergunakan dalam berbagai analisis kesehatan. Ayo maju terus sistem informatika kesehatan,, btw mohon bantuannya jika teman2 punya aplikasi yang bagus untuk memebuat database kesehatan (cecep_janur@yahoo.com).
Memang demikian adanya. Menurut kami tidak perlu menunggu peran dari negara namun mulai dari kita sendiri lah inisiatif dan ide dibangun.
pertanyaan teknis.
saya kok masih bingung dg kondisi NOT LIKE '0' bisa hanya memunculkan desa/kelurahan saja. bukannya itu malah memunculkan semua? atau apakah literal '0' itu diterjemahkan lain oleh mysql? bisa dijelaskan dg rinci?
sptnya query kecamatan masih kurang 1 kondisi utk menyaring data propinsi.
cmiiw.
ps:
ini bener2 bingung. :D
oops, yg query kecamatan udah bener ding. :D
Untuk kasus NOT LIKE '0', saya memang salah. Yang betul NOT LIKE '_______000'. Entah kenapa saya bisa kurang teliti begitu ya, hehehe, malah ada dua. Trims untuk koreksinya.
Post a Comment