Why so serious

Ingatkah dengan postingan saya The Dark Knight.. Inilah musuh dari sang Kelelawar Batman.. 😀

Yaa.. tampang ini yang membuat batman kewalahan agar Gotham City menjadi aman terkendali. 😀 Why so serious ??..

Advertisements
Posted in For Fun. 1 Comment »

Jenis Tabel MySQL

mysql> select engine from engines;
+------------+
| engine     |
+------------+
| EXAMPLE    |
| CSV        |
| MyISAM     |
| BLACKHOLE  |
| MRG_MYISAM |
| InnoDB     |
| ARCHIVE    |
| MEMORY     |
| FEDERATED  |
+------------+
9 rows in set (0.00 sec)

Akhir-akhir ini saya lagi keranjingan dengan namanya Database MySQL. 😀 Sampai-sampai whitepapernya MySQL 5.1.x saya baca untuk mengetahui lebih jauh feature apa saja yang terdapat pada database yang satu ini. Dulu, biasanya saya hanya memakainya sebatas routine, syntax, trigger, view, penyimpan data dan pendukung aplikasi yang saya buat. Sekarang, saya benar-benar tertarik untuk menggali lebih jauh dan mengenalnya. Selain pekerjaan yang juga salah satunya memakai database ini, MySQL juga database kedua yang saya kenal setelah PostgreSQL . 😀 Pada postingan ini saya ingin menjelaskan jenis-jenis tabel yang ada pada mysql versi 5 keatas. Secara garis besar, Tabel MySQL dibedakan menjadi dua jenis, yaitu Transaction Safe dan Non-Transaction Safe.

  • Transaction Safe merupakan tabel yang mendukung transaksi. Dalam proses transaksi kita dapat memperkecil terjadinya kesalahan dalam pemrosesan data. Jenis tabel ini yang saya gunakan dalam penerapan aktifitas koding. Namun sayang, tabel jenis ini performa dalam hal kecepatan lebih lambat daripada jenis tabel non-transaction safe karena membutuhkan resource yang lebih banyak. Mungkin tabel jenis ini lebih memprioritaskan kapasitas/data daripada kecepatan.
  • Non Transaction Safe merupakan tabel yang tidak mendukung adanya transaksi. Garis besarnya jenis tabel ini kebalikan dari Transaction Safe. Tabel jenis ini mempunyai kelebihan dalam hal kecepatan. Namun tidak ada toleransi dalam kesalahan pemrosesan data. Misalkan ada kesalahan dalam update data, maka data tersebut tidak dapat dikembalikan. Tabel berjenis MyISAM, MEMORY, ARCHIVE termasuk dalam jenis ini.

Dibawah ini adalah jenis-jenis tabel yang terdapat pada MySQL. Baik itu Transaction Safe maupun Non-Transaction Safe :

Jenis tabelnya disini.. 😀

Rolling SUM data MySQL

Rolling SUM digunakan untuk menjumlahkan suatu kolom – k0lom tertentu pada tabel. Seperti halnya yang terdapat pada rekening tabungan. Setiap row akan di kalkulasi di row selanjutnya. Dapat juga dikelompokkan berdasarkan kolom-kolom tertentu. Saya ingin mencoba untuk membuat syntax sederhana yang berfungsi sebagai rolling sum. Sebelum saya membuat syntaxnya, saya akan membuat dulu tabelnya. tabel ini saya beri nama acBalance.

mysql> CREATE TABLE acbalance (
    ->   id int(11) NOT NULL AUTO_INCREMENT,
    ->   accountID int(5) DEFAULT NULL,
    ->   acPost date DEFAULT NULL,
    ->   balance double(15,0) DEFAULT NULL,
    ->   PRIMARY KEY (id)
    -> ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO acbalance (accountID, acPost, balance) VALUES
    ->   (3, '2007-01-31', 50000),
    ->   (3, '2007-02-28', 30000),
    ->   (3, '2007-03-31', 10000),
    ->   (3, '2007-04-30', 60000),
    ->   (3, '2007-05-31', 30000),
    ->   (3, '2008-01-31', 50000),
    ->   (3, '2008-02-29', 30000),
    ->   (3, '2008-03-31', 90000),
    ->   (3, '2008-04-30', 30000),
    ->   (3, '2008-05-31', 50000);
Query OK, 10 rows affected (0.06 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> SELECT b.accountName,
    ->   MONTHNAME(a.acPost) as MONTH,
    ->   a.balance
    ->   FROM
    ->   acbalance a JOIN
    ->   account b ON
    ->   a.accountID=b.accountID WHERE
    ->   acPost>'2008-01-01';

+-------------+----------+---------+
| accountName | MONTH    | balance |
+-------------+----------+---------+
| Kas         | January  |   50000 |
| Kas         | February |   30000 |
| Kas         | March    |   90000 |
| Kas         | April    |   30000 |
| Kas         | May      |   50000 |
+-------------+----------+---------+
5 rows in set (0.00 sec)

Sekilas memang tidak ada masalah dengan tabel diatas. Tabel diatas hanya sebagai contoh. Tapi bagaimana jika kita ingin menampilkan akumulasi jumlah dari bulan ke bulan pada tahun yang sama. Saya ambil contoh pada tahun 2007 terlebih dahulu. Untuk mendaptakan rolling sum, saya akan menggunakan sub query. Dua buah query akan akan dipakai untuk menghasilkan rolling sum. Query yang pertama untuk mendapatkan jumlah nominal balance, dan query yang kedua untuk mendapatkan rolling sum nya.

Syntax Querynya ada disini..

Hirarki Data di Oracle

Setelah postingan saya pada Hirarki data di MySQL, saya mencoba membuatnya di database yang lain. Apakah dengan database yang lain akan lebih mudah atau malah lebih sulit dari MySQL. Saya mencobanya di Oracle 9i. Dengan sedikit bantuan Google dan coba-coba sedikit, ternyata Oracle memberikan kemudahan dalam hal hirarki data. dengan menggunakan klausa CONNECY BY saya mendapatkan kemudahan untuk menampilkan data. Tidak semua database terdapat feature ini. Syntax yang dibutuhkan hanya seperti ini :

START WITH
CONNECT BY
[NOCYCLE]
CONDITION;

CONNECT BY PRIOR

Klausa ini mengidentifikasi hubungan antara parent row dan child row di dalam sebuah hirarki data. Seperti contoh dibawah ini :

SELECT employeeId,employeeName,managerId
FROM employees
CONNECT BY PRIOR employeeId = managerId;

START WITH

START WITH digunakan untuk menampilkan data berdasarkan level-level tertentu. Query dibawah ini mengembalikan nilai dari table employees pada hirarki data berdasarkan nama karyawan dan levelnya. Saya mencoba dengan nama karyawan Budi :

Syntax di Oracle yang lain..

Memberi hadiah dihari istimewa

To be kind to all, to like many and love a few, to be needed and wanted by those we love, is certainly the nearest we can come to happiness“.

Bersikap baik kepada semua orang, menyukai banyak orang dan mencintai sebagian kecil diantara mereka, dibutuhkan dan diinginkan oleh orang-orang yang kita cintai, sungguh merupakan posisi yang paling dekat untuk berada dalam kebahagiaan.”Mary Roberts Rinehart

Hari yang istimewa bagi seseorang misalnya hari ulang tahun, hari perjumpaan, hari bapak, hari ibu, dan lain sebagainya. Pada hari-hari yang dianggap istimewa tersebut merupakan kesempatan yang paling tepat untuk mengungkapkan penghargaan kepada orang-orang yang teristimewa dalam kehidupan kita. Lewat pemberian hadiah, kita juga bisa mengungkapkan cinta kasih.

Sebuah hadiah istimewa tidak harus selalu mahal, melainkan mengandung sesuatu yang khusus. Meskipun hadiah itu sifatnya sederhana, tetapi bila disampaikan dengan cara yang lebih kreatif maka akan terasa lebih spesial atau menjadi sesuatu yang unik dan tak mudah dilupakan si penerima. Begitu terkesannya, sampai-sampai sang penerima tak pernah bosan mengingat kebahagiaan yang berasal dari pemberian hadiah spesial kita.

Lalu hadiahnya apa dong..

What i’ve learn after break up

Cinta memang tidak pernah ada habisnya untuk dibahas. Paling tidak, cinta mewarnai dunia yang dirundung semakin banyak perang ini. Namun cinta tidak selalu berwarna segar, ceria, dan menggelora. Karena lewat cinta, warna-warna sendu juga bisa muncul. Terutama kalau sehabis diputus oleh pasangan. Sebenarnya, akhir kisah cinta tidak selalu menyedihkan. Tapi, supaya tulisan ini lebih melankolis, tulisan ini akan khusus bicara soal hikmah dari kisah cinta yang dialami seorang teman dan berakhir duka. Lagi pula, biasanya no pain, no gain, ‘kan? 😀

Tidak gampang memang menerima kenyataan yang tidak sesuai dengan keinginan kita. Terutama bila berhubungan dengan orang yang kita sayangi. Hanya segelintir saja yang tahu bahwa sebenarnya kita, para pria, bisa sangat melankolis dalam hal yang satu ini. Bahkan, terkadang proses yang kita jalani untuk hadapi kenyataan pahit ini tidak ada bedanya dengan Anda.

The We are OK, Im fine

Kami baik-baik aja, kok. Komentar seperti ini (atau yang mirip-mirip) sering sekali keluar. Ada keinginan dari hati yang paling dalam untuk tetap menjalani aktivitas seperti biasa, seperti tidak ada yang berubah, seperti tidak ada masalah. Masih berkirim SMS walaupun sudah tidak pernah dapat balasan atau malah sudah di black list. Masih mengikuti jadwal menjemput di kampus atau di kantor seperti biasa. Pokoknya, benar-benar seperti tidak ada perubahan.
Ada juga yang berpikir begini: Tenang saja. Keadaannya masih aman dan terkendali atau Biasa, deh. Lagi ngambek musiman. Nanti juga baikan lagi. Mungkin karena saking seringnya si wanita mengucapkan kata putus, si pria akan merasa proses ini seperti siklus yang nantinya akan kembali normal. Padahal, yang sesungguhnya terjadi adalah We are not OK and I am F.I.N.E (Frustrated Insecure Neurotic Emotional).
Betul sekali. Inilah tahap penyangkalan atau enggan menerima kenyataan. Bisa jadi karena akal dan hati tak lagi nyambung. Kenyataannya sudah putus, tapi hati masih belum mau terima. Biasanya, bila tahap denial ini makan waktu terlalu lama, bakal ada negative excess terhadap berat badan dan kesehatan, atau perilaku.

Next Phase is..

Hirarki data di MySQL

Ada beberapa programmer yang dihadapkan dengan kasus membuat hirarki data dalam SQL database. Hirarki data mempunyai relasi parent-child, namun bersifat rekursif. Tidak natural dalam konsep relasional database. Hirarki data adalah data collection yang tiap itemnya mempunyai single parent atau tidak sama sekali dan mempunyai satu, dua atau lebih children. Hirarki data dapat kita jumpai dalam banyak aplikasi database, termasuk forum dan mailing list, diagram oraganisasi bisnis, produk, multi level marketing dan kode akun dalam accounting. dalam postingan ini, saya mencoba untuk membuat data hirarki dengan kasus membuat kode akun accounting. Contoh yang saya buat, kurang lebih sama dengan kasus-kasus yang lain seperti yang saya jelaskan diawal.

Sebelumnya, kita buat dulu tabel dengan nama tabelnya account (sekalian asaya buat fungsi CREATE dan INSERT jadi tinggal diikuti aja..) 😀

CREATE TABLE `account` (
  `accountId` int(11) NOT NULL AUTO_INCREMENT,
  `parentId` int(11) DEFAULT NULL,
  `accountName` char(20) NOT NULL,
  PRIMARY KEY (`accountId`)
);

INSERT INTO `account` (`accountId`, `parentId`, `accountName`) VALUES
  (1, 0, 'Harta'),  (2, 1, 'Harta Lancar'),  (3, 2, 'Kas'),
  (4, 2, 'Bank'),  (5, 2, 'Piutang Teman'),  (6, 1, 'Harta Tetap'),
  (7, 6, 'Kendaraan'),  (8, 7, 'Vario Matic'),
  (9, 6, 'Product Electronic'),  (10, 6, 'Investasi'),
  (11, 0, 'Pendapatan'),  (12, 11, 'Gaji'),
  (13, 12, 'Gaji gue'),  (14, 11, 'Hasil Investasi');

 SELECT * FROM account;

 +-----------+----------+--------------------+
 | accountId | parentId | accountName        |
 +-----------+----------+--------------------+
 |         1 |        0 | Harta              |
 |         2 |        1 | Harta Lancar       |
 |         3 |        2 | Kas                |
 |         4 |        2 | Bank               |
 |         5 |        2 | Piutang Teman      |
 |         6 |        1 | Harta Tetap        |
 |         7 |        6 | Kendaraan          |
 |         8 |        7 | Vario Matic        |
 |         9 |        6 | Product Electronic |
 |        10 |        6 | Investasi          |
 |        11 |        0 | Pendapatan         |
 |        12 |       11 | Gaji               |
 |        13 |       12 | Gaji gue           |
 |        14 |       11 | Hasil Investasi    |
 +-----------+----------+--------------------+
 14 rows in set (0.00 sec)

Penjelasan tentang query yang dibuat