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

Dekomposisi Tabel: Roll Up

Pada posting yang lalu, GROUP BY WITH ROLLUP, NULL dan IFNULL masih ada masalah redudansi data pada tabel yang Dzaky buat. Kali ini Dzaky akan perbaiki skema basis data dan seperti biasa, ayah selalu setia mendampingi dan memberikan arahan. Untuk itu kita lihat kembali struktur tabel yang sudah Dzaky buat :

+ lihat / tutup
Untuk kasus diatas misal R(t,u,k,j) adalah suatu relasi dimana t=tanggal, u=uraian, k=kode dan j=jumlah maka bisa didekomposisi menjadi R1(u,k) dan R2(t,j) dan untuk menggabungkan kembali informasi yang ada dalam relasi R maka pada kedua relasi tersebut harus ada atribut yang menghubungkannya. Jika attribut u bersifat unik, menjadi R1(u,k) dan R2(t,u,j). Attribut u menjadi primary key pada R1 dan sebagai foreign key pada R2.

Berikutnya adalah mengoptimasi tabel R1(u,k), dari ketergantungan fungsional diuji apakah u->k dan k->u? Jika u+k bersifat unik, primary key akan menjadi komposit terdiri dari u+k. Untuk itu bisa dipilih atribut baru pk sehingga pk->u,k. Dzaky ambil keputusan R1(pk,u,k) dan R2(t,pk,j).

"Bagaimana ini ayah? Bagaimana menetapkan nilai untuk pk? "

"Gunakan AUTO_INCREMENT, karena pk hanya diperlukan untuk optimasi, tidak memiliki arti tersendiri sebagaimana halnya NIM mahasiswa".

"Oke ayah, Dzaky buat dulu tabelnya.

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'  

Tapi ayah, bagaimana kalau data transaksi pada tabel sebelumnya sudah ada, kalau satu hari saja ayah melakukan sebanyak 5 transaksi, dalam satu bulan sudah mencapai 150 transaksi. Bagaimana mengatasinya ayah, agar Dzaky tidak perlu mengisi kembali dari awal, tetapi menggunakan data transaksi yang sudah ada tersebut?

"Gampang aja, nanti lah. Biarkan saja dulu tabel transaksi Dzaky seperti itu. Sekarang Dzaky harus mandi, Dzaky harus ngaji dulu. Nanti kita bahas lagi, Dzaky tidak perlu memasukkan datanya kembali, bahkan Dzaky nanti bisa buatkan query untuk membuat pivot tabelnya, menghitung subtotal setiap uraian dan total keseluruhan dengan query yang Dzaky buat. Pokoknya terserah Dzaky, informasi seperti apa yang ingin Dzaky dapatkan dari transaksi tersebut".

"Ya ayah "