MENGATASI DUPLIKASI DATA DALAM QUERY
Dalam mengotak-atik
query, terkadang kita harus menggunakan beberapa tabel dalam database. Dan
tentu saja, dari masing-masing tabel terdapat key yang identik, sehingga
tabel-tabel bisa saling dihubungkan.Anggap
Anda telah memahami tentang penjoinan tabel. Nah, masalah yang sering muncul
adalah, duplikasi data pada query. Ya, duplikasi ini bisa disebabkan beberapa
hal. Misalkan dua tabel yang dihubungkan tidak memiliki key yang unik.
Pemasangan non-unique key memang bisa dilakukan. Namun, resiko ada data kembar
kemungkinan besar terjadi.
Kedua, tidak adanya
key penghubung yang cukup kuat. Dalam kasus tabel dengan banyak field, kita
sering menemui adanya lebih daru satu primary key yang bisa dimanfaatkan. Nah,
kesalahan yang sering terjadi adalah, kita tidak memasangkan cukup banyak atau
spesifik dari key tabel satu ke tabel lainnya.
Pahit nih...
Untuk database
dengan sedikit tabel, field, dan data, tentu relatif mudah dalam memeriksa
atau menelusuri penyebab terjadinya duplikasi. Tapih, bagaimana kalau database
sudah complicated secara struktur dan isiny?. Aduh, perlu kerja keras sekeras-kerasnya...
Beberapa tips untuk
mengatasi data kembar dalam melakukan query. Dimulai dari tindakan pencegahan dulu.
Pertama, selalu upayakan tiap
tabel paling tidak memiliki satu unique primary key, yang menjadi 'identitas' dari sang tabel. Dengan kata lain, pastikan ada satu field yang isinya tidak pernah sama
meski data menjulang hingga ribuan.
Kedua, membuat strukturasi
antar tabel dengan jelas dan mudah ditelaah. Ini gampang diomongin tapi sedikit sulit diterapkan.
Kita harus bisa memilah tiap tabel sesuai dengan fungsinya, pastikan untuk
meminimalisir pemborosan kolom. Dalam istilah kerennya sering disingkat
normalisasi database. Pasti pernah dengar normalisasi waduk di Jakarta,'kan? Nah, mirip-mirip kok. Hehehe...
Tujuannya adalah
sama-sama menghilangkan jumlah data yang berlebihan. Jika satu kolom bisa
dipakai untuk dependency banyak tabel, kenapa harus memasukkan kolom itu
disetiap tabel? Tentunya akan membengkakkan kapasitas tabel. Kalau datanya cuma
puluhan mungkin tak terasa. Tapi di instansi besar yang memiliki data hingga
puluhan hingga ratusan ribu, ini hal sentimen yang kudu diperhatikan.
Nah, sekarang dari
tindakan non-preventif.
Tips untuk
menghilangkan data ganda pada query adalah dengan pemakaian distinct.
Syntax :
select distinct bla bla bla...
Mudah 'kan?
Yang perlu
dilakukan hanyalah menempatkan kata distinct setelah select. Distinct sendiri
berasal dari bahasa Inggris yang artinya jelas, terang, atau berbeda. Nah, dengan
adanya command ini, maka query akan memproses data yang pure beda.
Contoh data tanpa
distinct:
Select nama_pegawai, nomor_induk, status from tpegawai
Maka muncul hasil
seperti di bawah :
Nama_pegawai
|
Nomor_induk
|
Status
|
John
|
12300
|
Lajang
|
Herman
|
12301
|
Duda
|
Budi
|
12302
|
Lajang
|
Anduk
|
12303
|
Menikah
|
Budi
|
2302
|
Lajang
|
Perhatikan. Dari
contoh di atas, terdapat dua data Budi. Hal ini bisa terjadi karena salah input
dua kali, atau join table yang kurang tepat. (Dalam kasus ini hanya memakai satu
tabel, jadi tidak ada join).
Wah, gak lucu dong
kalau muncul data dua kali. Untuk itu, kita bisa menambahkan perintah distinct
setelah select sehingga hasil query menjadi :
Nama_pegawai
|
Nomor_induk
|
Status
|
John
|
12300
|
Lajang
|
Herman
|
12301
|
Duda
|
Budi
|
12302
|
Lajang
|
Anduk
|
12303
|
Menikah
|
Lihat, hanya
tinggal ada 4 row. Data yang duplikat telah lenyap dan yang
muncul hanyalah data yang memang berbeda. Eitss.. Ada
beberapa hal yang perlu diperhatikan dalam pemakaian distinct.
1. Distinct tidak menghapus data di tabel. Ya, distinct hanya
'menghilangkan' data dobel di query. Sedangkan di source aslinya tetap ada
ganda. Distinct tidak menghilangkan duplikasi satu kolom saja. Ya, lihat dari
contoh di atas. Ada 3 buah kolom dan 4 row yang muncul.
Contohnya :
Nama_pegawai
|
Jenis_kelamin
|
Umur
|
Budi
|
Pria
|
27
|
Budi
|
Pria
|
27
|
Budi
|
Pria
|
25
|
Dari contoh itu,
maka yang dimaksud duplikat adalah nomor 1 dan 2. Kenapa? Karena datanya sama!
Dari kolom 1 hingga akhir tidak ada yang berbeda. Sementara itu, meski data
nomor tiga Budi dan Prianya sama dengan yang lain. Tapi tidak dianggap
duplikasi. Karena ada kolom lain yang berbeda, yaitu umurnya 25. Jadi, distinct melakukan
pengecekan duplikasi tidak per kolom. Tapi menyeluruh semua kolom pada tiap
row.
Insya Allah, semoga sedikit informasi ini dapat
bermanfaat!