Memperoleh Data Terbaru dari Join Dua Tabel di MySQL

Dimisalkan, suatu instansi memberikan status kepada karyawannya menjadi tiga tingkat. Yaitu kontrak, tidak tetap dan tetap.

Setiap status, memiliki kode nomor karyawan sendiri, yang akan berganti jika sang Karyawan telah layak naik pangkat, sesuai dengan loyalitas dan prestasinya.

Di mana ketika karyawan berganti status, nomor lama ke yang baru, nomor yang lama akan tetap tersimpan di database (tanpa dihapus), kemudian nomor yang baru akan otomatis menjadi nomor acuan karyawan yang bersangkutan.

Lalu bagaimanakah desain databasenya?

Kesalahan yang potensial dihadapi sebagai programmer, untuk kasus di atas adalah menganggap nomor karyawan sebagai acuan di database.

Penulis yakin, dengan melihat NIK (Nomor Induk Karyawan), pasti kebanyakan programmer database, akan menjadikan NIK sebagai ID acuan utama karyawan.

Hal ini karena NIK dianggap tidak akan berubah sampai karyawan itu pensiun.

Sebab, biasanya, jika ID acuan diganti, maka data-data sebelumnya yang mengacu pada ID lama, bisa-bisa tidak terdeteksi (bug) jika si Programmer tidak menyiapkan jurus cadangan.

Sehingga, seringkali programmer akan pusing 7 keliling, jika diperlukan maintenance penggantian NIK di suatu hari, bahkan ketika si Programmer itu telah tidak dipekerjakan oleh pihak penyewa jasa.

Oleh karena itu, dengan melihat kasus di atas yang ternyata diperlukan acuan lain sebagai ID utama, maka menurut penulis, mudahnya adalah menggunakan nomor urut karyawan itu sendiri, ketika diregistrasikan pertama kali di database.

Untuk itu, dalam posting ini, penulis menawarkan desain dua tabel database MySQL, dengan kode seperti di bawah ini:

CREATE TABLE biodata
(
	id INT NOT NULL AUTO_INCREMENT,
	nama VARCHAR(255) NOT NULL,
	created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE nokaryawan
(
	iduser INT NOT NULL,
	nomor VARCHAR(255) NOT NULL UNIQUE,
	created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Tabel pertama bernama biodata, yang berisi kolom ID user dan nama, sedangkan tabel kedua bernama nokaryawan, yang berisi kolom nomor dan iduser.

Kolom iduser terkoneksi dengan ID user di tabel biodata.

Dengan cara seperti ini, maka karyawan dapat berganti-ganti nomor NIK lebih dari satu kali.

Sedangkan pengambilan nilai nomor, sebenarnya bisa saja dengan dua tahap, yaitu mengambil nilai ID dulu di tabel biodata, lalu baru mengambil nilai nomor yang terbaru dari iduser yang sesuai di tabel nokaryawan.

Namun, dua langkah ini dapat dilakukan dengan satu langkah, yaitu dengan menggunakan klausa JOIN antara tabel biodata dan nokaryawan, dengan perintah kurang lebih seperti di bawah ini:

SELECT biodata.id,biodata.nama,h.nomor FROM biodata JOIN (SELECT * FROM nokaryawan WHERE nokaryawan.created_at IN (SELECT MAX(nokaryawan.created_at) FROM nokaryawan GROUP BY nokaryawan.iduser)) AS h ON biodata.id=h.iduser

Dengan perintah ini, programmer akan dapat membuat daftar karyawan, dengan nomor terbaru, meskipun dengan tabel nomor terpisah.

Komentar



Postingan populer dari blog ini

Apps Script untuk Cetak Sertifikat

Kumpulan Source Code Greenfoot

Menyembunyikan Failed Load Images di Blogger

Kode Greenfoot Game Flappy Bird

Algorithma Coretan Abstrak dengan HTML5 Canvas

Kebodohan Karyawan Menyalahkan Sistem

Algorithma Bilangan Prima dengan Javascript

Checking Data yang Belum Dimasukkan dalam Daftar Menggunakan Query Google Sheet

Mencoba Submit Theme di Wordpress.org

Generate Karakter Acak dan Menempatkannya di Sel Google Sheets dengan Apps Script