Database Wilayah Indonesia 2022
Published: 2022-08-21 10:11:41


### Database Wilayah Indonesia 2022

Bertepatan dengan hari libur saya iseng mencari project di GitHub yang bisa saya clone untuk bahan belajar saya. Saat saya mencari bahan belajar, saya menemukan 1 repo yang menurut saya menarik, yaitu data data wilayah di Indonesia yang sudah valid berdasarkan **Kepmendagri №050–145 Tahun 2022.** Apa yang membuat ini menarik? Karena disediakannya data berupa .sql yang bisa kita gunakan pada local env kita.

Untuk kalian yang ingin melihat reponya, bisa dicek di

[**GitHub - cahyadsn/wilayah: Kode dan Data Wilayah Administrasi & Pulau Indonesia sesuai Permendagri…**  
_Kode dan Data Wilayah Administrasi & Pulau Indonesia sesuai Permendagri No 58 Tahun 2021* dengan PHP+MySQL+AJaX. Demo…_github.com](https://github.com/cahyadsn/wilayah "https://github.com/cahyadsn/wilayah")[](https://github.com/cahyadsn/wilayah)

**Catatan. Untuk project kali ini saya hanya akan menggunakan database wilayah_2022.sql**

### Penjelasan Awal

![](https://cdn-images-1.medium.com/max/800/1*cyHyskceio18aDWtYHDodQ.png)

Scema Table wilayah_2022

Table wilayah memiliki sebanyak kurang lebih 91K row yang terdapat banyak wilayah. Saya sendiri sempat bingung untuk memasukan ini semua karena biasanya hanya 1000 row yang bisa di insert setiap transaksi. Dan sangat memakan waktu jika kita insert per 1000 row.

![](https://cdn-images-1.medium.com/max/800/1*-QCMt-3JYp5WIa7bqZbxJg.png)

Insert data wilayah_2022

Dengan banyaknya data, bagaimana cara membaca semua wilayah tersebut? Sedangkan field yang ada hanya ada 2, kode dan nama. Mungkin saja untuk mempermudah orang orang yang menggunakannya, author tersebut menggabungkan kode provinsi, kabupaten/kota, kecamatan, kelurahan dalam 1 field string.

![](https://cdn-images-1.medium.com/max/800/1*SQt44gmLu_hfq-K_LKslVQ.png)

Struktur string kode wilayah

Sebagai contoh yang mudah, saya akan menggunakan DKI Jakarta. DKI Jakarta adalah sebuah Provinsi dengan kode wilayah 31, Kota Jakarta Pusat dengan kode wilayah 71, Kecamatan Gambir dengan kode wilayah 01, dan Kelurahan Gambar dengan kode wilayah 1001. Dengan begitu maka semuanya memiliki hirarki sebagai berikut:

![](https://cdn-images-1.medium.com/max/800/1*il55YQpc75uHuSXJ7m5ocQ.png)

Hirarki kode wilayah

### Refactoring

Sebetulnya tidak ada yang salah dengan struktur table diawal, tapi jika kita bisa membuatnya lebih clean kenapa tidak, terlebih menurut saya akan sulit dan waktu yang dibutuhkan jauh lebih lama untuk melakukan query.

Semisalnya untuk kita mengambil query kelurahan Gambir, maka dibutuhkan query:

![](https://cdn-images-1.medium.com/max/800/1*CI_ZqIGThoevSrxVvGfN-Q.png)

Query kelurahan Gambir

![](https://cdn-images-1.medium.com/max/800/1*uqZ6AI66B17FRVg9lnCYEA.png)

Hasil Query

Oke kita mendapatkan Query yang kita miliki, akan tetapi hasil yang didapatkan 2 records walaupun kita tahu bahwa hasil pada records kedua adalah hasil yang benar, maka dari itu kita perlu melakukan refactor struktur table yang ada.

![](https://cdn-images-1.medium.com/max/800/1*7VwWfifIF7Wxbeba3vdPlg.png)

Refactoring table

![](https://cdn-images-1.medium.com/max/800/1*EdH0vgDpxTF0tHVu6fc-CQ.png)

Create table

> Note disini saya tidak menggunakan key di tiap tablenya. Biarkan key tersebut di definisikan pada saat melakukan join table.

### Refactoring Data

Setelah selesai refactor table, sekarang saatnya memasukan semua data ke table yang telah kita buat.

Langkah pertama adalah kita harus memastikan data yang akan kita insert, disini saya akan insert data provinsi. Untuk pengecekannya saya akan lakukan select terlebih dahulu.

![](https://cdn-images-1.medium.com/max/800/1*BKxzGB2YGBwxZr6OyKOLjA.png)

Berdasarkan data master yang kita punya, setiap Provinsi memiliki panjang string sebanyak 2, maka saya melakukan select berdasarkan panjang dari kode wilayah.

![](https://cdn-images-1.medium.com/max/800/1*ghM4vMurZFWPLkVGTJdOyg.png)

Hasil query

Setelah hasil query dipastikan benar, maka saya akan melakukan insert data dengan cara INSERT SELECT. Ini adalah metode insert dengan data yang didasarkan oleh apa yang kita select.

![](https://cdn-images-1.medium.com/max/800/1*pICBuvvhFD-Ivq7KaKBX7g.png)

Insert data Provinsi

Jika berhasil, maka hasil yang didapat adalah table provinsi memiliki data provinsi yang telah kita dapat dari hasil select berdasarkan panjang kode provinsi.

Selanjutnya adalah melakukan insert Kota Kabupaten, Kecamatan, dan Kelurahan

![](https://cdn-images-1.medium.com/max/800/1*_c5Hx7JplRaQzzhLdshZ5w.png)

Insert data Kabupaten Kota

![](https://cdn-images-1.medium.com/max/800/1*kdWcW87WRfUBeD8Rsp2VpA.png)

Insert data Kecamatan

![](https://cdn-images-1.medium.com/max/800/1*R1JuZx4EDoYj9ngZ8UeoTA.png)

Insert data Kelurahan

Setelah selesai semuanya, maka kita akan mendapatkan data yang sudah tersortir berdasarkan kode wilayah. Selanjutnya data yang ada di setiap table bisa kita gunakan sebagai master jika ingin membuat API. Lalu mengapa dari data yang sudah ada harus kita “pecah” menjadi beberapa bagian? Dikarenakan untuk mempermudah kita dalam mencari data yang lebih spesifik. Kedepannya dengan data master yang sudah ada, apa saja yang akan saya buat?

### Coming soon project

1.  Data wilayah API
2.  Visualisasi Data

### Kesimpulan

Dengan data yang ada, saya sudah mempelajari bagaimana cara refactor sebuah table, insert select, dan instalasi MS SQL Server di Docker. Ohh iya untuk MS SQL saya menggunakan yang version Express karena free dan bisa di install pada MacOS dengan bantuan Docker.