Selasa, 08 Desember 2009

Bung Hatta...

Adalah Bung Hatta, nama itu seakan hadir kembali. Sosok proklamator negeri kita tercinta ini, selain hal istimewa lainnya, juga meninggalkan teladan tentang kesederhanaan hidup.

Betapa tertibnya hidup Bung Hatta. Menurut cerita orang-orang terdekatnya, beliau tak pernah menyisakan satu butir nasi pun ketika makan. Sendok pun tak berbunyi. Beliau juga sangat rapi dalam berpakaian dan tentu beliau memiliki pergaulan yang baik. Beliau tetap sederhana walau telah menduduki posisi nomor dua negeri ini sebagai wakil presiden. Beliau tak mau memanfaatkan fasilitas negera. Sampai-sampai beliau pernah menunda keinginannya membeli sepatu karena uang beliau tidak cukup. Konon, sampai beliau wafat sepatu itu belum juga terbeli!

Konon…

Konon…di dunia ini ada 3 jenis manusia, yaitu:

1. Mereka yang menjadikan sesuatu itu terjadi,
2. Mereka yang mengamati hal itu terjadi, dan
3. Mereka yang terheran-heran melihat hal yang terjadi.

Mayoritas manusia pada umumnya termasuk ke dalam dua kategori yang terakhir.

Sebagian memiliki “mata untuk melihat“, tetapi “tidak mampu melihat” apa yang tengah berlangsung.

Sebagian besar memiliki “telinga untuk mendengar“, tetapi “tidak memahami” apa yang tengah berlangsung.

Anda termasuk kategori yang mana?

Benar Bisa Berpikir?

Pada satu hari libur yang cerah, berjalanlah satu keluarga muda. Ayah, ibu dan satu orang anaknya yang masih kecil. Anak kecil yang masih ‘jernih’, cerdas dan polos.

Seperti kebanyakan anak kecil calon generasi penerus, biasanya masih bisa berpikir kritis, selalu mengatakan sejujurnya apa yang ada dipikirannya tanpa tendeng aling-aling.
(toh, kita yang tua yang konon disebut kritis tidak mampu berkata sebebas anak kecil, bukan?)

Sampailah perjalanan mereka ke pinggir sungai. Kotornya sungai itu. Airnya tak jernih lagi. Baunya demikian menyengat. Berbagai sampah mengambang berbaris.

Melihat keadaan sungai itu, si anak bertanya pada ibunya,
“Bu, apa ya kira-kira yang akan dipikirkan ikan-ikan tentang sungai ini?”

Dengan enteng si ibu menjawab,
“Ah kamu Nak, ikan toh tidak bisa berpikir!”

Mendengar jawaban ibunya, anak kecil itu hanya terdiam. Dalam hatinya ia bergumam, “Oh iya ya, mana ada ikan bisa berpikir. Kan hanya seekor ikan.”

Keluarga muda itu terus berjalan. Kali ini melewati sebuah pabrik. Terlihat cerobong asapnya mengepulkan asap yang hitam pekat. Satu dua burung terlihat terbang di sekitar asap hitam itu.

Dengan seksama anak kecil itu mengamati burung-burung yang sedang berterbangan. Kali ini anak kecil itu bertanya pada ayahnya,
“Pa, apa ya yang akan dipikirkan burung-burung tentang asap hitam itu?”

Dengan enteng pula si Ayah menjawab,
“Ada-ada saja kamu ini Nak, burung-burung kan tidak bisa berpikir!”

Mendengar jawaban itu, kembali anak kecil itu bergumam dalam hatinya, “Oh iya Bapak benar, burung-burung kan tidak bisa berpikir.”

Entah apa yang dipikirkan kedua orang-tua anak kecil itu, mereka mengkerutkan dahinya sejenak, saling lirik, kemudian sama-sama berucap lirih,
“Syukurlah manusia bisa berpikir!”

Aduhai, seandainya benar seperti apa yang diucapkan kedua orang-tua itu, marilah kita mulai berupaya menjernihkan kembali air sungai itu, mencerahkan kembali langit kita itu, menghijaukan kembali lingkungan kita itu, melestarikan alam kita itu…ya, seandainya kita bisa berpikir!

Jumat, 27 November 2009

Mengenal Firebird

Pendahuluan
Jika Anda membaca makalah ini, mungkin ini adalah pertemuan Anda yang pertama dengan SMBDR Firebird. Makalah ini akan menjelaskan pada Anda keistimewaan-keistimewaan yang dimiliki database Firebird. Di akhir makalah, saya yakin Anda akan penasaran untuk segera mengunduh installer-nya yg kecil dan ringan serta mencobanya sendiri.

Sejarah
Firebird diturunkan dari kode sumber Borland Interbase 6.0 yang kemudian dikembangkan lebih lanjut. Firebird bersifat open source (kode sumber terbuka) dan tidak berlisensi ganda. Tak peduli Anda akan menggunakannya untuk tujuan aplikasi komersil atau sumber terbuka atau gratis, Anda tak perlu bingung apalagi khawatir, Firebird sepenuhnya BEBAS digunakan!

Teknologi Firebird, berdasarkan kode asalnya, telah digunakan selama lebih dari 20 tahun. Hal ini menjadikan Firebird sebagai produk yang mapan dan stabil.
Keistimewaan Utama

Jangan tertipu dengan ukuran installer-nya! Firebird adalah sebuah SMBDR yang hebat dan penuh keistimewaan. Firebird mampu menangani database dari yang cuma berukuran beberapa KB hingga gigabita dengan unjuk kerja yang baik dan nyaris tidak membutuhkan perawatan selama bekerja!

Berikut daftar beberapa keistimewaan utama yang dimiliki Firebird:
* Mendukung penuh Stored Procedure dan Trigger
* Sepenuhnya mengikuti aturan transaksi yang ACID
* Mendukung integritas keterhubungan
* Dibangun dengan arsitektur multigenerasi
* Kebutuhan sumber daya yang relatif sangat kecil
* Mendukung penuh pemrograman berbasis bahasa SQL (PSQL)
* Mendukung pustaka fungsi luar
* Membutuhkan sedikit atau tanpa campur tangan Admin Database
* Nyaris tidak perlu konfigurasi, tinggal install dan gunakan!
* Komunitas yang besar sehingga ada banyak tempat untuk bertanya dan meminta bantuan
* Tersedia versi yang tidak membutuhkan server (embedded), cocok untuk membuat katalog di CDROM, aplikasi pengguna-tunggal, atau aplikasi evaluasi
* Ada lusinan aplikasi bantu dari pihak ketiga, termasuk aplikasi GUI untuk pengelolaan, aplikasi penggandaan (replikasi), dlsb
* Teknik penyimpanan yang hati-hati, pemulihan yang cepat, tidak membutuhkan catatan (log) transaksi!
* Tersedia banyak cara untuk mengakses database, bisa melalui API langsung, dbExpress, ODBC, OLEDB, penyedia .Net, JDBC langsung tipe 4, modul Python, pustaka PHP, Perl, dlsb
* Mendukung banyak sistem operasi, seperti Windows, Linux, Solaris, MacOS
* Mendukung pencadangan berkelanjutan
* Tersedia versi untuk arsitektur CPU 64 bit
* Sepenuhnya menerapkan kursor dalam PSQL
* Tersedia tabel untuk memantau database
* Mendukung Trigger untuk koneksi dan transaksi
* Mendukung tabel sementara

Coba Sekarang Juga!
Mencoba Firebird adalah pekerjaan yang mudah. Ukuran installer-nya biasanya kurang dari 5 MB (tergantung pilihan sistem operasi Anda) dan sepenuhnya otomatis. Anda bisa mengunduhnya dari situs utama Firebird. Lepasan stabil paling akhir adalah versi 2.1.

Anda akan melihat bahwa Firebird tersedia dalam 3 jenis: SuperServer, Classic, dan Embedded. Anda lebih baik memulai dari SuperServer. Saat ini, Classic disarankan untuk digunakan di mesin yang mendukung SMP atau beberapa situasi khusus lain. SuperServer berbagi sumber daya untuk banyak koneksi dan menggunakan thread untuk menangani setiap koneksi. Sedangkan Classic menggunakan satu proses server yang mandiri dan terpisah untuk setiap koneksi yang ditangani.

Jenis Embedded adalah variasi yang mencengangkan. Jenis ini memiliki seluruh keistimewaan server Firebird yang dibungkus hanya dalam beberapa berkas saja. Sangat mudah disebarkan, karena tidak perlu dipasang di server. Ideal untuk katalog di CDROM, aplikasi demo, atau aplikasi desktop tunggal.

Firebird dilengkapi dengan seperangkat aplikasi yang bisa membantu Anda membuat database baru, membaca statistik database, menjalankan perintah SQL, melakukan pencadangan dan pengembalian, dlsb. Jika Anda lebih suka menggunakan aplikasi basis GUI (antarmuka grafis), tersedia banyak sekali pilihan untuk itu, termasuk yang gratis. Daftar aplikasi pada akhir makalah ini bisa menjadi awalan yang bagus.

Di Windows, Anda bisa menjalankan Firebird sebagai service atau aplikasi biasa. Installer bisa menyediakan ikon di Control Panel yang bisa Anda gunakan untuk mengelola server (mulai, hentikan, dlsb).


Dokumentasi

Ada banyak sekali makalah, tanya-jawab, dan artikel yang mungkin Anda ingin baca di situs utama Firebird. Anda mungkin juga perlu mencari tahu apakah ada situs komunitas atau milis lokal di negara Anda, sehingga Anda bisa memperoleh bantuan dalam bahasa asli Anda.

Seluruh informasi dapat Anda cari di lingkungan situs utama Firebird. Anda juga bisa mengakses situs Firebird News untuk memperoleh berita terbaru terkait Firebird.

Untuk Segala Ukuran Database
Beberapa orang mengira bahwa Firebird adalah SMDBR yang hanya cocok untuk database kecil dan hanya diakses beberapa pengguna saja. Mereka salah! Firebird digunakan di banyak perusahaan besar dengan akses pengguna yang tinggi. Salah satu contoh yang bagus adalah seperti yang ditunjukkan di Softool’06 dimana Avarda (aplikasi ERP buatan Rusia) beroperasi menggunakan Firebird 2.0 jenis Classic dengan rata-rata 100 koneksi berkesinambungan mengakses database berukuran 120 GB berisi 700 juta record! Servernya adalah mesin SMP (2 prosesor, Dell PowerEdge 2950) dengan RAM 6 GB.
Aplikasi Bantu dan Komponen

Berikut adalah daftar aplikasi yang menarik seperti aplikasi bantu, driver, dlsb. Silakan periksa situs resmi Firebird untuk daftar yang lebih lengkap dan terbarui.

Aplikasi Administrasi GUI
* IBExpert (tersedia versi GRATIS untuk pribadi)
* FlameRobin (open source, bisa di Windows, Linux, MacOS X, dan FreeBSD)
* DB Workbench
* Firebird Development Studio

Driver dan Komponen Akses
* Komponen Delphi
o IB Objects
o FIBPlus
o UIB (Unified Interbase Components)
o Zeos
o MDO
* ODBC
o Gemini ODBC Driver
o Firebird ODBC Driver
o EasySoft
* OLEDB
o ZStyleGroup
o IBProvider
* Java
o JayBird
* .Net Provider
o Firebird .Net Provider
* C++
o IBPP
* Bahasa pemrograman lain
o PHP
o Python
o Perl

Aplikasi Penggandaan
* IBReplicator
* FBReplicator
* Replication Manager

Dukungan dan Tautan Sumber Daya
* Firebird News
* FireBase (bahasa Portugis)
* IBPhoenix
* CFLP (bahasa Portugis)
* Daftar milis dan forum komunitas
* IBase (bahasa Rusia)
* Firebird Developers Magazine

Lain-Lain
* Firebird 2.1 – Kemampuan Baru
* Firebird 2008 RoadMap
* Fyracle – Oracle mode Firebird

Makalah dan Dokumentasi
* Firebird Official Documentation Project (awalan dan panduan umum)
* FB Online Manual (Admin, PHP, PSQL, etc.)
* FirebirdFAQ

Anda berniat membantu?
Sebagaimana umumnya proyek open source, setiap orang boleh menyumbang dengan cara membantu mengembangkan kode program Firebird atau memperbaiki kesalahan program yang ada. Jika Anda ingin menjadi anggota Tim Pengembang Firebird, unduh kode program Firebird dari SourceForge dan pelajarilah. Anda juga boleh bergabung dalam milis fbdevel untuk bertemu dengan para pengembang yang lain (catatan: fbdevel bukan milis bantuan umum, jadi jangan meminta bantuan di situ, sebaiknya gunakan milis firebird-support untuk mendapatkan bantuan gratis dari komunitas).

Anda tidak perlu menjadi penulis program untuk bisa membantu proyek ini. Menjadi anggota Yayasan Firebird atau memberi sumbangan uang berarti Anda telah membantu pendanaan para pengembang inti sehingga mereka bisa mencurahkan waktu dan tenaga mereka untuk proyek ini.

Terima kasih atas waktu Anda…

Selasa, 24 November 2009

Cross-tab dengan mysql

Cross-tab atau cross tabulation adalah bentuk laporan statistik yang merupakan de-normalisasi dari data dab ditampilkan dalam bentuk kelompok (group) dari sebuah field dan kolomnya terdiri atas nilai-nilai yang berbeda dari suatu field lain.

Misalnya ada tabel mhs dengan isi sebagai berikut:
nama seks fakultas
Joni P Biologi
Hardi P Biologi
Anita W Psikologi
Kadir P Ilmu Budaya
Budiman P Teknik
Husin P Psikologi
Linda W Biologi
Kartono P Teknik
Kartini W Psikologi
Suciwati W Teknik
Legiman P Biologi
Kuntoro P Teknik
Susan W Biologi
Aniati W Teknik

Hasil cross-tab untuk kolom fakultas dan seks adalah:
fakultas P W total
Biologi 3 2 5
Ilmu Budaya 1 0 1
Psikologi 1 2 3
Teknik 3 2 5

Pembuatan cross-tab secara manual
Tabel cross-tab tersebut dapat diperoleh dengan memanfaatkan fasilitas
query yang ada pada MySQL. Namun sebelum melihat bentuk query-nya, kita lihat
dulu penyelesaian masalah tersebut secara manual.

Kita buat tabel dengan kolom fakultas, P, dan W. Setelah itu kita urut
satu persatu baris dalam tabel mhs. Setiap menemukan data fakultas yang belum
ada di tabel kita tulis nama fakultas tersebut pada kolom fakultas. Untuk setiap
baris kita tambahkan nilai 1 pada kolom P jika seks bernilai \’P\’ dan kita tambahkan
nilai 1 pada kolom W jika seks bernilai \’W\’. Hasil tabel sementara sebagai berikut:
fakultas P W
Biologi 1+1 0+0

Ternyata mudah. Prinsipnya adalah jumlahkan ke kolom P jika bernilai \’P\’ dan
jumlahkan ke kolom W jika bernilai \’W\’.

Query I
Jika kata yang ditulis tebal pada kalimat sebelum ini diganti dengan Bahasa Inggris hasilnya
adalah: sum ke kolom P if bernilai ‘P’ dan sum ke kolom W
jika bernilai ‘W’. Atau dalam SQL menjadi:

mysql> SELECT fakultas, SUM(IF(seks=\'P\',1,0)) AS P,
-> SUM(IF(seks=\'W\',1,0)) AS W
-> FROM mhs
-> GROUP BY fakultas;

Hasilnya:
fakultas P W
Biologi 3 2
Ilmu Budaya 1 0
Psikologi 1 2
Teknik 3 2

Bagaimana dengan kolom jumlah (total)? Mudah juga ubah sedikit SQL tersebut menjadi:

mysql> SELECT fakultas, SUM(IF(seks=\'P\',1,0)) AS P,
-> SUM(IF(seks=\'W\',1,0)) AS W,
-> COUNT(*) as total
-> FROM mhs
-> GROUP BY fakultas;

Hasilnya:
fakultas P W total
Biologi 3 2 5
Ilmu Budaya 1 0 1
Psikologi 1 2 3
Teknik 3 2 5

Mungkin timbul pertanyaan kenapa ingin mencacah baris/record menggunakan
sum bukan count? Ternyata count dan sum
cara kerjanya mirip dan bisa dikatakan sama untuk kasus tertentu. Coba SQL berikut:

mysql> SELECT COUNT(*) from mhs;

Hasilnya:
count(*)
24

Sekarang ganti \’count(*)\’ pada SQL tersebut dengan \’sum(1)\’:

mysql> SELECT SUM(1) from mhs;

Hasilnya:
sum(1)
24


Query II
Pada kasus tersebut nama kolom sudah diketahui sebelumnya yaitu \’P\’ dan \’W\’. Bagaimana jika
isi kolom tidak atau belum diketahui sebelumnya? Misalnya untuk kasus tersebut tetapi nama
kolom adalah nama fakultas sedang baris berisi seks.

Pertama kita ambil nama-nama fakultas dengan SQL:

mysql> SELECT distinct fakultas from mhs;

Hasilnya:
fakultas
Biologi
Psikologi
Ilmu Budaya
Teknik

Anda bisa menyusun SQL secara manual dengan memasukkan sum/if untuk setiap fakultas.
Namun demikian ada cara yang lebih baik. Ubah SQL tersebut menjadi:

mysql> SELECT distinct concat(\', sum(if(fakultas=\"\',fakultas,
-> \'\",1,0)) as `\',fakultas,\'`\') from mhs;

Hasilnya:
concat(’, sum(if(fakultas=\”\”‘,
, sum(if(fakultas=\”Biologi\”,1,0)) as `Biologi`
, sum(if(fakultas=\”Psikologi\”,1,0)) as `Psikologi`
, sum(if(fakultas=\”Ilmu Budaya\”,1,0)) as `Ilmu Budaya`
, sum(if(fakultas=\”Teknik\”,1,0)) as `Teknik`

Terlihat bahwa kita dapat menyusun kode SQL dengan SQL. Dengan cut and paste maka
dapat disusun SQL sesuai dengan keinginan yaitu:

mysql>select seks
->, sum(if(fakultas=\" Biologi\",1,0)) as `Biologi`
->, sum(if(fakultas=\" Psikologi\",1,0)) as `Psikologi`
->, sum(if(fakultas=\" Ilmu Budaya\",1,0)) as `Ilmu Budaya`
->, sum(if(fakultas=\" Teknik\",1,0)) as `Teknik`
->, count(*) as total
->from mhs
->group by seks

Hasilnya:
seks Biologi Psikologi Ilmu Budaya Teknik total
P 3 1 1 3 8
W 2 2 0 2 6

Minggu, 22 November 2009

AdoDb PHP

Berikut langkah-langkah menggunakan library ADOdb untuk koneksi ke datatabase MySQL

1. Kebutuhan software
* OS Linux/ Windows
* Apache Web Server
* PHP 4 atau 5
* Database (Pada contoh ini menggunakan library MySQL)
* Library ADOdb yang dapat didownload di http://adodb.sourceforge.net

2. Direktori aplikasi
* Tentukan direktori dokumen root anda (direktori tempat meletakan aplikasi web), pada sistem operasi linux biasanya dokumen root terletak dalam direktori /var/www/html/. Jika anda menggunakan paket XAMPP pada sistem operasi windows, maka dokumen root terletak dalam DIREKTORI_INSTALASI_XAMPP/htdocs/ dan jika XAMPP di linux ada pada direktori /opt/lampp/htdocs.
* Ektrak pustaka ADOdb hasil download dalam direktori aplikasi anda (misal myapp) yang berada didalam direktori dokumen root, misalnya /var/www/html/myapp.
* Hasil ekstrak akan menghasilkan direktori adodb/.

3. Buat basis data (Pada contoh ini database yang digunakan MySQL )
* Misal sudah ada informasi database:
o Database server : localhost (komputer local)
o User Database : rojul
o Password Database : r4h4si4
o Nama Basis Data : latihan
* Buat tabel, misal tabel buku_tamu, dengan field :
o id : integer auto_increment primary key
o Nama : varchar(32)
o Pesan : text
o Tanggal : date

4. Memulai kode program
* Buat Kode Program Berikut ini pada direktori myapp dan beri nama adokoneksi.php :

include('adodb/adodb.inc.php');
// definisikan software database
$driver = 'mysql';

// definisikan variabel database
define("DBHOST","localhost");
define("DBUSER","rojul");
define("DBPASS","r4h4si4");
define("DBNAME","latihan");

$db = ADONewConnection($driver); # eg. 'mysql' or 'oci8'
$db->debug = true;

// Koneksi Ke Database
//$db->Connect($server, $user, $password, $database);
$status = $db->Connect(DBHOST,DBUSER,DBPASS,DBNAME);

if ($status ) echo '

Koneksi Sukses

'
else echo '

Koneksi Gagal

' . $db->ErrorMsg();
?>

5. Akses lewat BrowserBuka browser anda arahkan url ke file adokoneksi.php,misalnya alamat urlnya : http://localhost/myapp/adokoneksi.phpJika semua lancar, seharusnya dalam browser anda akan muncul halaman web yang berisi :
“Koneksi Sukses “

6. Query ke database :
* Diasumsikan telah ada table pada database anda, misal table members
* Buat file dalam myapp, beri nama file list_member.php, Berikut isi kode programnya :

// sertakan file koneksi
include_once 'adokoneksi.php';

// definisikan query
$sql = "select * from members";

// eksekusi query dan simpan dalam object resultset
$rs=&$db->Execute( $sql );

// populasi data
while (!$rs->EOF)
{
echo $rs->fields['idmember'].’ | ‘. $rs->fields['username'];
echo ‘
’;
$rs->moveNext();
}
?>

* Akses melalui browser file list_member.php maka akan tampil data members

ADO-DB PHP

ADOdb adalah kumpulan pustaka program (library) database untuk bahasa pemrograman PHP dan Python yang dikembangkan berdasarkan konsep ActiveX Data Objects (ADO) milik Microsoft. Dengan ADOdb memungkinkan pengembang software (programmer) menuliskan kode program untuk aplikasi yang dibuat menjadi lebih konsisten dalam berkomunikasi dengan sebuah database. Keuntungan utama dari menggunakan pustaka ADOdb adalah perubahan database pada sisi aplikasi dimungkinkan dengan minimnya perubahan kode program atau perubahan kode program hanya terjadi pada baris kode untuk koneksi ke database saja.

Saat ini ADOdb telah mensupport beberapa vendor database seperti : MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MS SQL, Foxpro, Access, ADO, Sybase, FrontBase, DB2, SAP DB, SQLite, Netezza, LDAP, and generic ODBC, ODBTP. The Sybase, Informix, FrontBase and PostgreSQL, Netezza, LDAP.

ADOdb juga telah mensupport secara penuh PHP5, versi terakhr ADOdb adalah versi 4990.

Berikut langkah-langkah menggunakan library ADOdb untuk koneksi ke datatabase MySQL
* Buat Kode Program Berikut ini adokoneksi.php :

include('adodb/adodb.inc.php');
// definisikan software database
$driver = 'mysql';

// definisikan variabel database
define("DBHOST","aquarius-db");
define("DBUSER","bps000");
define("DBPASS","r4h4si4");
define("DBNAME","bps000db");

$db = ADONewConnection($driver); # eg. 'mysql' or 'oci8'
$db->debug = true;

// Koneksi Ke Database
//$db->Connect($server, $user, $password, $database);
$status = $db->Connect(DBHOST,DBUSER,DBPASS,DBNAME);

if ($status ) echo '

Koneksi Sukses

'
else echo '

Koneksi Gagal

' . $db->ErrorMsg();
?>

Buka browser anda, arahkan url ke file adokoneksi. php,misalnya alamat urlnya : http://noc.bps.go.id/adokoneksi.phpJika semua lancar, seharusnya dalam browser anda akan muncul halaman web yang berisi :
“Koneksi Sukses “

Sejarah SQL

Sejarah dari SQL tidak lepas dari sejarah project dari IBM yang bernama System R. Tujuan dari project ini adalah untuk penelitian Relational ( hubungan ) Databases Server. Project ini dibuat pada laboratorium penelitian IBM di San Jose California. Project tersebut diniatkan untuk mendemonstrasikan keunggulan penggunaan fitur dari relasi pemodelan yang akan diterapkan pada suatu sistem untuk memenuhi kebutuhan database modern server.

Project System R ini telah memecahkan permasalahan yaitu permasalahan tentang tidak adanya bahasa baku pada relasional database. Sehingga dengan adanya bahasa yang baku, setiap database dapat diacu dengan mudah. Sequel adalah nama bahasa yang diasung oleh adanya project System R ini yang didesain oleh R.F Boyce dan D.D. Chamberlin. Dalam pembuatan project tersebut, bahasa Sequel berganti nama menjadi SQL karena kata “Sequel” bermasalah dalam trademark.

Project System R terbentuk dari 3 tahap, tahap pertama dinamakan tahap ke-0 sekitar tahun 1974-1975. Pada tahap ini hanya sebagian kecil yang di-implementasikan pada SQL. Sebagai contoh, fungsi JOIN ( menggunakan data dari beberapa table) belum diterapkan namun hanya single user version yang dulu diterapkan. Tujuan pada tahap ini adalah untuk mengetahui apakah implementasi pada beberapa sistem dapat diterapkan.

Tahap ke-1 dimulai pada tahun 1976-1977. Semua kode program ditulis pada tahap ke-0 sebagai awalan. Pada tahap ke-1 ini terdiri dari keseluruhan sistem, hal ini berarti pada tahap ini telah banyak hal baru dibuat. Sebagai contoh telah terbentuknya multiuser dan penggunaan JOIN.Tahap terakhir dari System R adalah sistem ini telah terinstal di beberapa komponen dalam IBM dan sebagian besar dari client IBM. Tahap ini terjadi sekitar tahun 1978-1979.

Para pengembang menggunakan pengetahuan yang dimiliki dan teknologi dari penerapan pada 3 tahap untuk membuat SQL/DS. SQL/DS adalah relational database server yang bersifat komersil pertama milik IBM. Pada tahun 1981, SQL/DS menjadi paket penjualan dari sistem operasi DOS/VSE, dan versi VM/CMS muncul tahun 1983. Pada tahun yang sama DB2 juga telah dilauncing. Sekarang ini DB2 telah banyak digunakan oleh beberapa sistem operasi.

IBM telah mempublikasikan idenya mengenai pengembangan dari System R pada suatu konferensi atau seminar mengenai relational database server sehingga perusahaan lain seperti Oracle menggunakan SQL sebagai bahasa databasenya. Dalam beberapa tahun sekarang ini telah muncul produk dari SQL pada dunia IT. Dan akhirnya SQL menjadi bahasa yang compatible dengan semua sistem operasi baik yang besar maupun yang kecil.

Referensi : Addison Wesley, SQL for MySQL Depelovers.
Semoga bermanfaat.

Foreign Key Di MySQL

Dalam relational basis data, terdapat istilah kunci utama (primary key) dan kunci tamu (foreign key). Tujuan utama dari adanya kedua istilah tersebut adalah pengidentifikasian tiap table dan kejelasan hubungan antara 2 atau lebih table. Primary key adalah satu atau beberapa kolom pada table yang mengidentifikasikan tiap kolom dan baris pada table tersebut. Sedangkan Foreign Key adalah satu atau beberapa kolom pada table yang merupakan primary key pada table satu namun diletakan pada table dimana tablenya berelasi dengan table dirinya.


Pada gambar diatas, nim pada table mhs adalah primary key. Sedangkan primary key pada table matkul adalah id_matkul. Lalu id_matkul menempel pada table mhs yang kita sebut sebagai foreign key.

Biasanya saya menyebut table yang berisi foreign key sebagai table anak karena table tersebut mengait pada table lain. Sedangkan table yang terkait saya sebut sebagai table induk. Pada contoh table di atas, mhs sebagai table anak sedangkan matkul sebagai table induk.
Contoh isi dari kedua table tersebut dapat dilihat dibawah ini.

Table mhs
Nim Nama Alamat Id_matkul
10107644 Adiputra Artupida Bekasi IF123
10107634 Hermansyah Bandung IF222
10107635 Budianto Nugroho Semarang IF111
10107636 Silan Bekasi IF333

Table Matkul
Id_matkul Nm_matkul Jml_sks
IF123 Pemrograman Web 3
IF111 Pemrograman C 3
IF222 Pemrograman Java 3
IF333 Pemrograman OOP 3

Saya langsung praktikan pada mysql. Berikut adalah codenya :

CREATE TABLE IF NOT EXISTS matkul(
id_matkul CHAR(5) NOT NULL PRIMARY KEY,
nm_matkul VARCHAR(30) NOT NULL,
jml_sks INT(3) NOT NULL
);



CREATE TABLE IF NOT EXISTS mhs(
nim CHAR(8) NOT NULL PRIMARY KEY,
nama VARCHAR(50) NOT NULL,
alamat VARCHAR(60) NOT NULL,
id_matkul CHAR(5),
FOREIGN KEY(id_matkul) REFERENCES matkul(id_matkul)
);

INSERT INTO mhs VALUES
(‘10107633′,’Adiputra Artupida’,'Bekasi’,'IF123′),
(‘10107634′,’Hermansyah’,'Bandung’,'IF222′),
(‘10107635′,’Budianto Nugroho’,'Semarang’,'IF111′),
(‘10107636′,’Silan’,'Bekasi’,'IF333′);

INSERT INTO matkul VALUES
(‘IF123′,’Pemrograman Web’,3),
(‘IF111′,’Pemrograman C’,3),
(‘IF222′,’Pemrograman Java’,3),
(‘IF333′,’Pemrograman OOP’,3);


Perhatikan baris kode pada table mhs,

FOREIGN KEY(id_matkul) REFERENCES matkul(id_matkul)

Itulah cara mendefinikan foreign key pada mysql. Id_matkul didefinisikan sebagai foreign key yang mereferensikan(mengacu) pada table matkul pada kolom id_matkul.

Yang ingin saya fokus bicarakan pada artikel ini adalah bagaimana bila data matkul misalnya data dengan id_matkul=’IF123’ dihapus? Apakah data mahasiswa yang mengambil id_matkul akan dihapus juga atau akan dibiarkan apa adanya?

DELETE FROM matkul WHERE id_matkul=’IF123’

Maka pasti terjadi error

“Cannot delete or update a parent row: a foreign key constaint fails (‘test’.’mhs’,CONSTRAINT ‘mhs_ibfk_3’ FOREIGN KEY (‘id_matkul’) REFERENCES ‘matkul’ (‘id_matkul))

Maksudnya adalah tidak dapat menghapus atau mengupdate kolom pada table induk karena bereferensi pada table mhs.
Lalu bagaimana solusinya?

Pada MYSQL, kita harus menambahkan perintah ON DELETE [opsi] dan ON UPDATE [opsi]pada table yang mereferensikan foreign key. Opsi pada perintah tersebut jelasnya dibawah ini.

1. RESTRICT, Jika tabel anak berisi nilai dalam kolom yang mengkait yang nilainya sama dengan di kolom terkait pada tabel induk, baris dalam tabel induk tidak bisa dihapus, dan nilai di kolom terkait tidak dapat diupdate. Ini adalah opsi default jika klausa ON DELETE atau ON UPDATE tidak dispesifikasikan.

2. CASCADE, Baris-baris dalam tabel anak yang berisi nilai-nilai yang juga terdapat dalam kolom terkait dari tabel induk dihapus ketika barisbaris yang berkaitan dihapus dari tabel induk. Baris-baris dalam tabel anak yang berisi nilai-nilai yang juga terdapat dalam kolom terkait dari tabel induk diupdate ketika nilai-nilai yang berkaitan diupdate dalam tabel induk.

3. SET NULL, Nilai-nilai dalam kolom yang mengkait dari tabel anak diset ke NULL saat baris-baris dengan data terkait dalam tabel induk dihapus dari tabel induk atau ketika data terkait dalam tabel induk diupdate. Untuk menggunakan opsi ini, semua kolom-kolom yang mengkait dalam tabel anak harus mengijinkan nilai NULL.

4. NO ACTION Tidak ada aksi yang diambil dalam tabel anak ketika baris-baris dihapus dari tabel induk atau nilai-nilai dalam kolom terkait dalam tabel induk diupdate.

5. SET DEFAULT Nilai-nilai dalam kolom-kolom yang mengkait dari tabel anak diset ke nilai default mereka ketika baris-baris dihapus dari tabel induk atau kolom terkait dari tabel induk diupdate.

Ketika kita mendefinisikan foreign key dengan
FOREIGN KEY(id_matkul) REFERENCES matkul(id_matkul)
Maka perintah ON DELETE dan ON UPDATE nya ber-Opsi RESTRICT karena defaultnya dari references foreign key, yang artinya tidak boleh dihapus atau diupdate. Itulah yang menyebabkan error bila kita mendelete atau mengapdate table induk.

Coba sekarang kita ubah struktur table dari mhs dengan merubah references foreign key dengan opsi ON DELETE dan ON UPDATE CASCADE.


Karena kita menggunakan OPSI CASCADE pada ON DELETE dan ON UPDATE nya maka bila kita menghapus salah satu kolom pada table induk maka table anak pun akan terhapus juga. Terlihat bahwa data mahasiswa yang bernama Adiputra Artupida dihapus karena Adiputra Artupida mengambil matkul dengan id ‘IF123’ dimana id tersebut telah dihapus pada table matkul.

Yang lainnya silakan improve sendiri. Saran kalau kita ingin merelasikan foreign key biasakan menggunakan perintah ON UPDATE dan ON DELETE dengan OPSI yang disesuaikan dengan kebutuhan.

Tentang ADOdb dan Class MySQL, SQLite (PHP)

Ketika kita membangun aplikasi berbasis web yang dinamis, semisal sistem informasi manajemen atau yang lebih sering dikenal dengan sebutan SIM, maka tidak pelak dibutuhkan sebuah bahasa pemrograman dan database. Dan dalam hal ini akan dibahas salah satu komponennya yaitu komunikasi bahasa PHP dengan database MySQL. Untuk melakukan manipulasi data pada database, maka sudah disediakan fungsi-fungsi dalam PHP, namun akan lebih praktis lagi jika fungsi-fungsi yang terpisah itu disusun dalam sebuah fungsi yang dapat dipanggil secara berulang-ulang. Dan fungsi-fungsi ini kita bungkus dalam sebuah class, sehingga dalam penggunaannya kita tinggal mengincludekannya saja.

Dan inilah yang dilakukan oleh ADOdb, namun lebih dari itu ia mendukung tidak hanya satu database saja.

Secara sederhana ADOdb ini adalah sebuah layer tambahan yang menjembatani berbagai database – MySQL, Oracle, MSQL, Sybase, Informix, PostgreSQL, FrontBase, SQLite, Interbase, Foxpro, Access, ADO, DB2, SAP DB dan ODBC – dengan bahasa pemrograman PHP, sehingga dengan mudah kita dapat menggunakan dan beralih database sesuai yang kita perlukan. Secara skematis hal ini dapat digambarkan di bawah ini.


Jika PHP telah menyediakan fungsi-fungsi manipulasi untuk masing-masing database, maka ADOdb berperan sebagai Abstraction layer seperti terlihat pada gambar di atas. Dalam mengaplikasikannya kita gunakan contoh database dengan nama adodb dan tabel agama_ref dengan database MySQL. Untuk instalasi Apache, MySQL dan PHP anda dapat menggunakan XAMP, WAMP, atau bahkan menginstallnya satu persatu. Di sini saya gunakan WAMP.


Nah, di atas kita sudah memiliki sebuah database adodb dan tabel agama_ref dengan 5 data di dalamnya, yang selanjutnya akan kita gunakan dalam artikel ini.

Kita akan mencoba membuat program PHP dengan memanfaatkan ADOdb untuk menampilkan data dari database yang telah dibuat. Maka secara sederhana, file nya adalah sebagai berikut dan kita beri nama file ini contoh.php.


Sesuai isi file contoh.php di atas, kita pakai beberapa fungsi ADOdb, diantaranya adalah :

1. Mengincludekan ADOdb ke dalam program yang kita buat [baris ke-2].
2. Mendeklarasikan kelas ADOdb dengan parameter mysql sebagai databasenya [baris ke-3].
3. Memanggil fungsi connect dengan memberikan parameter host, user, password dan database yang digunakan, dalam hal ini akan menjalankan mysql_connect dan mysql_select_db [baris ke-4].
4. Menjalankan query SQL, untuk mengambil semua data dari tabel agama_ref, dalam hal ini akan menjalankan mysql_execute [baris ke-5].
5. Untuk mendapatkan hasil berupa array 2 tingkat [baris ke-6].
6. Kemudian baris ke-8 sampai 12 adalah untuk menampilkan data yang telah didapatkan.

Maka jika dijalankan dalam browser akan didapatkan hasil sebagai berikut :


Dengan menggunakan ADOdb ini, jika kita kemudian akan melakukan migrasi dari MySQL ke PostgreSQL atau oracle atau bahkan database lainnya, maka kita tinggal mengganti baris ke-3 [nama database yang digunakan] dan ke-4 [fungsi untuk melakukan koneksi] dan file kita masih dapat memberikan hasil yang sama dan berjalan dengan baik.

Beberapa fungsi yang sering saya gunakan dalam manipulasi database, antara lain :
1. Melacak id terakhir yang dimasukkan dalam database secara autoincrement, untuk memanggilnya digunakan fungsi $db−>Insert_ID();
2. Melakukan transaction, untuk mengesekusi beberapa query atau membatalkannya jika terdapat beberapa kekeliruan. Fungsi yang digunakan $db−>BeginTrans(); kemudian beberapa query dan diakhiri dengan $db−>CommitTrans(); atau $db−>RollbackTrans();
3. Melakukan insert, update dan delete dengan fungsu $db−>Execute();

Sebagai catatan, transaction hanya dapat diterapkan pada tabel dengan tipe innodb. Jika anda hanya menggunakan ADOdb untuk database MySQL, maka ada baiknya jika hanya menyertakan file-file yang memang dipakai saja, diantaranya adalah
* adodb.inc.php
* adodb-lib.inc.php
* adodb-time.inc.php
* drivers/adodb-mysql.inc.php
* license.txt (untuk alasan legal)
* adodb-php4.inc.php
* adodb-iterator.inc.php

Anda dapat mengexplore lebih jauh fungsi-fungsi yang disuport oleh ADOdb dengan mendownload sourcenya di sini atau dapat didownload dari internet untuk mendapatkan versi terakhinya.

Namun saya juga telah mengembangkan sebuah class yang dapat melakukan fungsi-fungsi di atas untuk database mysql dan sqlite. Jika anda tertarik dapat anda download di sini.

Di dalamnya terdapat file contoh untuk mamanfaatkan class tersebut.