RSS
When someone shares something of value with you and you benefit from it, you have a moral obligation to share it with others...

Tabel uraian: Roll Up

Pada posting sebelumnya, tentang dekomposisi tabel timbul permasalahan yaitu ketika suatu tabel telah berisikan data yang banyak kemudian didekomposisi menjadi dua atau lebih tabel. Hasil dekomposisi harus bisa mempertahankan informasi yang ada pada tabel sebelum didekomposisi. Bagi pembaca yang belum membaca postingan sebelumnya, sebaiknya dibaca terlebih postingan sebelumnya dimulai dari Intro, adanya nilai NULL kemudian digunakan pernyataan IFNULL dan memperbaiki struktur tabel dengan cara dekomposisi tabel.

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
pkuraiankode
1Makan siangK
2Makan malamK
3Beli rokokK
4Makan SateK
5Sarapan PagiK
6HonorM

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
tanggalpkuraiankodejumlah
2012-02-011Makan siangK15000
2012-02-012 Makan malamK12500
2012-02-013Beli rokokK10000
2012-02-014Makan SateK25000
2012-02-025Sarapan PagiK5000
2012-02-021Makan SiangK12500
2012-02-022Makan MalamK20000
2012-02-023Beli rokokK10000
2012-01-316HonorM750000
2012-02-056HonorM500000

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
tanggaluraiankodejumlah
2012-02-01Makan siangK15000
2012-02-01Makan malamK12500
2012-02-01Beli rokokK10000
2012-02-01Makan SateK25000
2012-02-02Sarapan PagiK5000
2012-02-02Makan siangK12500
2012-02-02Makan malamK20000
2012-02-02Beli rokokK10000
2012-01-31HonorM750000
2012-02-05HonorM500000

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.