Dzaky mulai dengan melihat daftar uraian yang ada pada tabel yang akan didekomposisi:
select distinct `uraian`, `kode` from transaksi
Query tersebut akan menampilkan setiap uraian yang unik dan bisa dilihat ada beberapa uraian yang berbeda tetapi maksudnya adalah sama. Pada contoh kasus misalnya "beli rokok" dan "rokok" memiliki makna yang sama, yaitu "membeli rokok". Karena itu Dzaky perbaiki terlebih dahulu.
update transaksi set uraian='Beli rokok'
where uraian = 'Rokok';
select distinct `uraian`, `kode` from transaksi;
Hal ini dilakukan untuk uraian yang lainnya sehingga tidak ada lagi uraian yang berbeda tetapi memiliki makna yang sama. Langkah selanjutnya adalah menyalin daftar uraian tersebut pada tabel turai yang sudah dibahas.
turai: +lihat / tutup
CREATE TABLE turai (
pk int(11) NOT NULL AUTO_INCREMENT,
uraian varchar(15) NOT NULL,
kode varchar(1) NOT NULL,
PRIMARY KEY (pk)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
COMMENT='Uraian transaksi'
insert into turai (uraian,kode)
select distinct uraian, kode from transaksi;
select * from turai;
Pernyataan pertama akan menyalin daftar uraian dan kode yang ada pada tabel transaksi ke tabel turai. Untuk field pk pada tabel turai tidak perlu dilibatkan karena pk adalah AUTO_INCREMENT dan secara otomatis akan diisi oleh mysql.
+lihat / tutup hasil
pk | uraian | kode |
---|---|---|
1 | Makan siang | K |
2 | Makan malam | K |
3 | Beli rokok | K |
4 | Makan Sate | K |
5 | Sarapan Pagi | K |
6 | Honor | M |
Berikutnya adalah menambakah field pk pada tabel transaksi yang berfungsi untuk merelasikan tabel ini ke tabel turai. Dzaky menempatkan tabel pk setelah tanggal transaksi.
ALTER TABLE transaksi ADD pk INT NOT NULL AFTER tanggal;
Setelah itu merelasikan uraian yang ada pada tabel transaksi dengan uraian pada tabel turai melalui field pk tersebut. Kita lakukan sekaligus
update transaksi a set a.pk = (
select distinct t.pk from turai t
where t.uraian= a.uraian
);
+lihat / tutup hasil
tanggal | pk | uraian | kode | jumlah |
---|---|---|---|---|
2012-02-01 | 1 | Makan siang | K | 15000 |
2012-02-01 | 2 | Makan malam | K | 12500 |
2012-02-01 | 3 | Beli rokok | K | 10000 |
2012-02-01 | 4 | Makan Sate | K | 25000 |
2012-02-02 | 5 | Sarapan Pagi | K | 5000 |
2012-02-02 | 1 | Makan Siang | K | 12500 |
2012-02-02 | 2 | Makan Malam | K | 20000 |
2012-02-02 | 3 | Beli rokok | K | 10000 |
2012-01-31 | 6 | Honor | M | 750000 |
2012-02-05 | 6 | Honor | M | 500000 |
Langkah terakhir adalah membuang field uraian dan kode yang ada pada tabel transaksi.
ALTER TABLE transaksi DROP uraian, DROP kode;
Untuk menampilkan kembali informasi yang ada pada tabel transaksi
SELECT t.tanggal, u.uraian, u.kode, t.jumlah
FROM transaksi t JOIN ( turai u )
WHERE t.pk = u.pk;
+lihat / tutup hasil
tanggal | uraian | kode | jumlah |
---|---|---|---|
2012-02-01 | Makan siang | K | 15000 |
2012-02-01 | Makan malam | K | 12500 |
2012-02-01 | Beli rokok | K | 10000 |
2012-02-01 | Makan Sate | K | 25000 |
2012-02-02 | Sarapan Pagi | K | 5000 |
2012-02-02 | Makan siang | K | 12500 |
2012-02-02 | Makan malam | K | 20000 |
2012-02-02 | Beli rokok | K | 10000 |
2012-01-31 | Honor | M | 750000 |
2012-02-05 | Honor | M | 500000 |
Selesai sudah dimulai dari Intro, adanya nilai NULL kemudian digunakan pernyataan IFNULL dan memperbaiki struktur tabel dengan cara dekomposisi tabel.
When someone shares something of value with you and you benefit from it, you have a moral obligation to share it with others.