Rabu, 13 April 2011

Belajar MySQL untuk pemula

8 Hal Yang Harus Diketahui Programer Pemula Tentang MySQL
PHP+MySQL. Siapa yang tidak tahu bahwa duo sejoli ini adalah pasangan
terpopular di dunia open source, bahkan di seluruh Internet. PHP telah
menggeser Perl sebagai bahasa pilihan dalam membuat aplikasi Web,
terutama bagi pemula. Dan PHP hampir selalu bersanding dengan MySQL;
90–95%+ skrip PHP di http://www.hotscripts.com/ mungkin bertuliskan
“membutuhkan PHP dan MySQL”. Buku-buku PHP, termasuk untuk pemula,
tidak akan dipandang afdol kalau belum membahas MySQL. Dan programer
PHP, lambat atau cepat, mau atau tidak mau, pasti akan harus mengakrabi
software database yang satu ini.
Sayangnya, banyak programer sudah bermain-main dan memakai MySQL secara
live di situs produksi, padahal masih asing sama sekali dengan konsep
database relasional. Bahkan sebetulnya MySQL juga banyak memiliki
kekurangan dalam hal fitur SQL. Sehingga programer PHP tidak bisa
memahami dan memanfaatkan kekuatan penuh database relasional + SQL.
Buat Anda para programer pemula yang memang masih awam dengan MySQL dan
konsep database pada umumnya, tidak perlu minder atau khawatir. Di
dunia IT yang bergerak serba cepat ini memang ada terlalu banyak hal
yang harus dipelajari. Dan kebanyakan jadinya dipelajari sambil jalan,
sambil dipraktikkan. Ketika mulai membangun CMS untuk satunet.com tahun
1999 pun, saya hanya punya skill terbatas tentang SQL: hanya tahu
SELECT, UPDATE, DELETE, CREATE TABLE, dan DROP TABLE. Apa itu JOIN,
bagaimana mengubah skema tabel, bagaimana mendesain database yang baik
dan ternormalisasi, semuanya masih blank. Dan semua harus dipelajari
sambil jalan. Tapi toh akhirnya semua baik-baik saja.
Lewat artikel ini kita akan membahas hal-hal dasar apa yang perlu
diketahui agar bisa memakai MySQL dengan efektif dan efisien. Mari kita
mulai dengan hal nomor satu:
1. Tabel MySQL bukanlah array
Programer PHP atau Perl tentu saja familiar dengan array dan hash, yang
biasanya dipakai untuk menyimpan sekumpulan data terkait. Sebagian dari
mereka yang tidak familiar dengan MySQL akan cenderung menganalogikan
tabel database dengan array/hash (tepatnya, array of array atau array 2
dimensi). Tabel dipandang sama seperti sebuah array, hanya saja bisa
berukuran besar sekali dan persisten (disimpan di disk).
Cara pandang ini tidak sepenuhnya salah, karena toh dalam mengambil
record dari tabel biasanya ditampung ke dalam variabel array/hash.
Hanya saja, cara pandang ini kadang-kadang membuat programer PHP
melakukan sesuatu seperti:
$res = mysql_query(“SELECT * FROM t1″);$rows = array();while ($row =
mysql_fetch_row($res)) $rows[] = $row;echo “Jumlah record di tabel t1 =
“, count($rows);
atau membuat tabel seperti:
CREATE TABLE t2 ( f0 INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, f1 INT
UNSIGNED, f2 VARCHAR(5), f3 VARCHAR(200), f4 VARCHAR(200), f5 BLOB);
Apa yang salah dengan kode PHP pertama di atas, yang bertujuan mencari
jumlah record dalam sebuah tabel? Si programer, yang terlalu terobsesi
menganggap tabel MySQL sebagai sebuah array, mencoba membangun dulu
arraynya dengan mengisi satu-persatu elemen dari hasil query agar
nantinya bisa menggunakan fungsi array count(). Masalahnya, bagaimana
kalau jumlah record ada 100 ribu? 1 juta? 10 juta? Bukan itu saja,
selesai di-count() variabel $rows langsung dibuang lagi! Padahal, ada
cara yang jauh lebih efisien:
SELECT COUNT(*) FROM t1
Hasil querynya hanyalah sebuah record saja, tak peduli berapa pun ukuran tabel t1.
Lalu apa yang salah dengan kode SQL kedua? Si programer Perl, dalam hal
ini, terobsesi ingin mengambil tiap record di tabel dengan fungsi DBI
$sth->fetchrow_array(
@row = $sth->fetchrow_array();print $row[0]; # f0print $row[1]; # f1print $row[2]; # f2# …
Enak bukan? Elemen ke-0 berisi nilai field f0, elemen ke-1 field f1,
dst. Masalahnya, kemudahan ini mengorbankan nama field yang menjadi
sangat tidak deskriptif. Belum lagi kalau tabel perlu diubah dengan
menyisipkan field-field lain di antara field yang sudah ada. Atau
field-field lama perlu dihapus. Semuanya akan menjadi mimpi buruk.
Sebagian pembaca mungkin geleng-geleng kepala. Apa benar ada programer
PHP dan Perl yang melakukan kedua hal di atas? Percaya deh, ada. Saya
pernah harus ketiban getah memaintain tabel dengan nama field kriptik
seperti ini.
2. Bahasa SQL dan Fungsi-Fungsi MySQL
MySQL adalah database SQL bukan? Sayangnya, programer PHP pemula kadang
terbatas sekali pengetahuan SQL-nya. Padahal, untuk menggunakan
database MySQL dengan efektif, ia tidak boleh malas mempelajari bahasa
kedua, yaitu SQL. Jika tidak belajar SQL, maka ada kemungkinan Anda
akan melakukan hal-hal seperti:
$res = mysql_query(“SELECT * FROM bigtable”);while ($row =
mysql_fetch_assoc($res)) { if ($row['age'] >= 40) { echo “Ditemukan
kustomer yang berusia lebih dari 40 tahun!\n”; break; }}
Apa salah kode di atas? Si programer PHP mencoba mensimulasikan klausa
WHERE SQL dengan melakukan pengujian kondisi di kode PHP. Padahal, yang
seharusnya dilakukan adala
SELECT * FROM bigtable WHERE age >= 40
Ini amat mengirit trafik client/server karena tidak semua record harus dikirimkan dari MySQL ke program PHP And
Sebagian pembaca mungkin geleng-geleng kepala. Apa benar ada programer PHP yang seperti ini? Percaya deh, ada.
SQL sudah menyediakan cara untuk menyortir data, memformat tampilan,
mengelompokkan dan memfilter record, dsb. MySQL juga terkenal banyak
menyediakan fungsi-fungsi, mulai dari manipulasi tanggal, angka,
string, dsb. Kenali SQL dan fungsi-fungsi MySQL; jangan duplikasikan
ini semua di PHP sebab akan lebih efisien jika dilakukan di level MySQ
Ini contoh lain programer PHP yang tidak memanfaatkan fasilitas dari MySQL:
$res = mysql_query(“SELECT * FROM customers”);while ($row =
mysql_fetch_assoc($res)) { # format semula yyyy-mm-dd…
preg_match(“/(\d\d\d\d)-(\d\d?)-(\d\d?)/”, $row[date], $matches); # …
dan ingin dijadikan dd/mm/yyyy $tanggal =
“$matches[3]/$matches[2]/$matches[1]“; echo “Nama=$row[name], Tanggal
lahir=$tanggal
\n”;}
Padahal MySQL sudah menyediakan fungsi pemformatan dan manipulasi tanggal
$res = mysql_query(“SELECT name, DATE_FORMAT(date,’%d-%m-%Y’) as
tanggal “. “FROM customers”);while ($row = mysql_fetch_assoc($res)) { #
tidak perlu capek-capek manipulasi string lagi… echo
“Nama=$row[name], Tanggal lahir=$row[tanggal]
\n”;}
Poin no. 2 ini kedengarannya klise, tapi, seperti nasihat Inggris bilang: know thy tools.

Tidak ada komentar:

Posting Komentar