Wednesday, 11 July 2012

8 Hal Yang Harus Diketahui Programer Pemula Tentang MySQL

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]; # f0
print $row[1]; # f1
print $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 adalah:
SELECT * FROM bigtable WHERE age >= 40
Ini amat mengirit trafik client/server karena tidak semua record harus dikirimkan dari MySQL ke program PHP Anda.
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 MySQL.
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<br>\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]<br>\n";
}
Poin no. 2 ini kedengarannya klise, tapi, seperti nasihat Inggris bilang: know thy tools.

3. LIMIT, LIMIT, LIMIT

Salah satu alasan mengapa MySQL sangat cocok untuk aplikasi Web adalah mendukung klausa LIMIT. Dengan klausa ini, mudah sekali membatasi jumlah record hasil yang diinginkan dalam satu perintah SQL. Tidak perlu bermain kursor atau bersusah payah lewat cara lainnya. Belakangan database lain seperti PostgreSQL dan Firebird pun ikut mendukung fungsionalitas LIMIT (dengan sintaks yang tidak persis sama tentunya).
Sayangnya, programer PHP sendiri yang belum mengenal MySQL dengan baik tidak menggunakannya dengan semestinya.
$res = mysql_query("SELECT name FROM users ORDER BY date");
$rows = array();
for ($i=1; $i<=10; $i++) $rows[] = mysql_fetch_row($res);
Si programer hanya berniat mengambil 10 record, tapi menyuruh MySQL mengambil semua record yang ada dulu. Bagaimana kalau ada 100 ribu record? 1 juta record? 10 juta? Seharusnya, setiap kali Anda menginginkan hanya satu, sepuluh, lima belas record, Anda perlu memberitahu MySQL lewat klausa LIMIT.
SELECT name FROM users ORDER BY date LIMIT 10
Sehingga kita bisa mengirit trafik komunikasi client/server dan mengizinkan MySQL melakukan optimisasi terhadap query tersebut.

4. Tipe Data

Berbeda dengan PHP dan bahasa-bahasa skripting yang mengizinkan kita menaruh apa saja dalam sebuah $variable tanpa deklarasi tipe terlebih dahulu, di MySQL kita perlu mendeklarasikan tipe-tipe data semua field yang ada pada saat membuat sebuah tabel. Seorang programer PHP yang tidak kenal MySQL kadang-kadang cenderung memilih jenis data yang salah (umumnya: memilih VARCHAR() padahal ada tipe data yang lebih tepat) dikarenakan tidak mengenal jenis-jenis data yang tersedia.
Berikut beberapa contoh kurang tepatnya pemilihan tipe data: 1) memilih CHAR(8) atau VARCHAR(10) dan bukannya DATE untuk menyimpan tanggal; kerugiannya, lebih boros tempat dan tidak bisa memanfaatkan fungsi-fungsi khusus tanggal; 2) memilih CHAR(3) atau CHAR(6) ketimbang TINYINT UNSIGNED untuk menyimpan data boolean (“YES” dan “NO”; atau “TRUE” dan “FALSE”; padahal jauh lebih irit dinyatakan dengan 1 dan 0 yang hanya menempati 1 byte); 3) memilih FLOAT atau DOUBLE dan bukannya DECIMAL untuk menyimpan jumlah uang; kerugiannya, FLOAT dan DOUBLE adalah berbasis biner dan seringkali tidak eksak dalam menyimpan pecahan desimal.
Nomor 3 sering terjadi karena programer biasanya hanya mengenal single/double floating point number yang tersedia di bahasa pemrograman. Padahal database umumnya menyediakan angka pecahan berbasis desimal yang bisa eksak menyimpan pecahan desimal.
Manual MySQL amat membantu di sini; di subbab tentang Column Types dijelaskan dengan rinci jenis-jenis data yang ada, termasuk rentang nilai yang dapat ditampung, berapa byte yang ditempati tipe data tersebut, dsb.

5. Normalisasi dan Pemodelan

Normalisasi, skema, entiti-atribut, primary key (PK) dan foreign key (FK), tabel entiti, tabel relasi, OLTP & OLAP… semuanya adalah istilah-istilah yang umum dijumpai dalam pemodelan fisik database. Sayangnya, banyak programer pemula tidak memiliki kemampuan modeling. Sehingga jika disuruh mendesain skema database (sekumpulan tabel-tabel beserta nama field dan tipenya) hasilnya tidak optimal bahkan berantakan. Skema yang buruk berakibat terjadinya duplikasi data, tidak scalable, performance yang buruk, tidak memenuhi requirements, dsb.
Modeling tentunya tidak bisa diajarkan dalam 1–2 hari, apalagi dalam artikel yang singkat ini. Anda perlu membaca buku-buku mengenai pemodelan database dan belajar dari pengalaman maupun dari model-model yang sudah ada. Tapi beberapa nasihat yang mungkin bisa saya berikan di sini adalah sbb.
Satu, langkah pertama dalam pemodelan adalah menemukan entiti-entiti. Entiti bisa dibilang “objek” yang akan kita gelluti. Misalnya, customer, produk, dan transaksi. Setiap entiti umumnya ditaruh dalam satu tabel, tabel ini disebut tabel entiti. Langkah kedua adalah mencari atribut-atribut entiti tersebut. Misalnya tabel customers memiliki atribut sapaan, nama, alamat (jalan + kota + kodepos + propinsi + negara), tanggal record ini ditambahkan, dsb. Langkah ketiga adalah mencari relasi di antara entiti-entiti. Umumnya relasi adalah satu dari: 1-1, 1-many, many-many. Misalnya, relasi antara transaksi dan produk adalah many-many, artinya sebuah transaksi pembelian dapat berisi banyak produk dan sebuah produk tentu saja dapat dibeli dalam lebih dari satu transaksi. Setiap relasi juga akan ditempatkan pada tabel, yaitu tabel relasi.
Dua, dalam pemodelan tidak ada istilah model yang benar atau salah. Yang ada adalah model yang tepat dan tidak tepat untuk keperluan tertentu. Misalnya, untuk aplikasi sederhana modelnya sederhana. Semakin kompleks aplikasi, model pun semakin rumit (jumlah entiti, relasi, dan atribut akan bertambah). Pada umumnya, seiring kompleksitas bertambah, yang tadinya atribut akan berubah menjadi entiti dikarenakan adanya kenyataan hubungan 1-many/many-many antara atribut. Contohnya, tabel customers memiliki atribut alamat. Jika kita ingin mendukung banyak alamat untuk satu customers, maka alamat akan menjadi entiti dan menempati tabel sendiri. Lalu kita membuat tabel relasi customers-alamat.

6. Indeks

Indeks adalah sesuatu yang berkaitan erat dengan implementasi, bukan modeling. Kita seringkali perlu menambahkan indeks pada sebuah field atau banyak field dikarenakan jika tidak ditambahkan maka performance database tidak menjadi praktis. Serba-serbi indexing juga mungkin terlalu panjang untuk bisa dijelaskan dalam artikel pendek ini, tapi intinya setiap kolom yang: 1) memiliki rentang nilai cukup banyak; 2) terletak pada tabel yang berisi banyak record; 3) seringkali disebutkan di klausa WHERE dan/atau ORDER BY dan/atau GROUP BY; perlu diberi indeks. Ini dikarenakan indeks membantu mencari secara cepat sebuah nilai dari banyak nilai yang ada. Beberapa contoh:
* Setiap primary key umumnya otomatis diberi indeks oleh database server, meskipun tabelnya masih berisi sedikit record atau bahkan kosong. Ini dikarenakan database perlu selalu mengecek keberadaan sebuah nilai field ini manakala ada sebuah record yang ditambahkan (ingat, PK artinya tak boleh ada dua record yang mengandung nilai field ini yang sama). Tanpa indexing, pengecekan akan linear dan memakan waktu lama.
* Field tanggal lahir dalam tabel customers kemungkinan besar harus diindeks. Bahkan dayofyear() field ini juga mungkin perlu diindeks. Mengapa? Karena: 1) rentang nilai cukup besar (365 hari dalam setahun x +- 60 jumlah tahun); 2) tabel customers potensial ukurannya besar; 3) sering disebutkan di klausa WHERE (misalnya mencari customer yang ultah hari ini).
* Field memo/notes kemungkinan besar tidak perlu diindeks (secara biasa). Mengapa? Karena meskipun 1) rentang nilai cukup besar; dan 2) tabel customers bisa besar; tapi 3) field ini tidak pernah disebutkan di klausa WHERE secara langsung (mis: Anda tidak pernah menyebutkan: … WHERE notes='nilai catatan tertentu' atau WHERE notes > 'nilai tertentu'). [Catatan: ada indeks lain yang “tidak biasa” di MySQL, yaitu FULLTEXT. Tapi ini di luar cakupan artikel kita kali ini.]
* Field jenis kelamin mungkin tidak perlu diindeks, kecuali jika perbandingan pria:wanita amat drastis bedanya. Mengapa? Sebab: 1) rentang nilai yang ada hanyalah dua: L (lelaki) dan P (perempuan). Meskipun Anda beri indeks, tidak akan memperbaiki kinerja.

7. Konkurensi, Locking, dan Transaksi

Programer web pemula kadang-kadang tidak menyadari bahwa program/skrip yang dibuatnya tidaklah seperti program desktop yang dijalankan oleh satu user. Melainkan, dalam satu waktu bisa saja ada 10 atau 100 user yang “menembak” skrip Anda di Web. Karena itu, isu locking dan konkurensi penting sekali. Contohnya adalah seperti ini:
$res = mysql_query("SELECT value FROM counters WHERE name='counter1'");
list ($value) = mysql_fetch_row($res);
$value++;
// do something else first...
$res = mysql_query("UPDATE counter SET value=$value WHERE name='counter1'");
Di antara baris pertama (saat kita mengambil nilai record) dan baris keempat (saat kita menaruh kembali nilai dalam record) mungkin saja telah terjadi beberapa kali perubahan terhadap si record. Misalnya, pada baris pertama klien1 memperoleh nilai $value = 100. Di baris 3 $value di-increment menjadi 101. Tapi apa yang terjadi jika selama selang waktu itu nilai record counter1 telah menjadi 103 (karena misalnya klien2, klien3, dan klien4 telah meng-incrementnya)? Oleh si klien1, counter1 direset kembali menjadi 101 dan akibatnya increment oleh klien2, klien3, dan klien4 hilang. Seharusnya nilai counter1 menjadi 104.
Untuk kasus di atas, pemecahannya cukup gampang. Lakukan increment secara atomik:
// tidak perlu ambil nilai counter dulu...
// do something else first...
$res = mysql_query("UPDATE counter SET value=value+1 WHERE name='counter1'");
Tapi dalam kasus lain, kadang-kadang kita harus melakukan locking terhadap tabel atau record untuk menjamin bahwa selama kita // do something else… klien2, klien3, dan klien4 tidak bisa seenaknya menaikkan nilai counter:
mysql_query("LOCK TABLES cuonters");
$res = mysql_query("SELECT value FROM counters WHERE name='counter1'");
list ($value) = mysql_fetch_row($res);
// do something else first... increase value or something...
$res = mysql_query("UPDATE counter SET value=$value WHERE name='counter1'");
mysql_query("UNLOCK TABLES");
atau (lebih baik karena kita tidak perlu melock keseluruhan tabel):
mysql_query("SELECT GET_LOCK('lock1')");
$res = mysql_query("SELECT value FROM counters WHERE name='counter1'");
list ($value) = mysql_fetch_row($res);
// do something else first... increase value or something...
$res = mysql_query("UPDATE counter SET value=$value WHERE name='counter1'");
mysql_query("SELECT RELEASE_LOCK('lock1')");
Ingat, locking dapat berakibat samping yaitu deadlock.
Transaksi. Transaksi pun sesuatu yang dipergunakan secara meluas di dunia database, tapi hampir tidak pernah kita jumpai di bahasa pemrograman (ini karena data di bahasa pemrograman ditaruh dalam variabel di memori semua; tidak ada isu disk yang crash/lambat/rusak/harus disinkronkan dengan data di memori). Karena itu Anda perlu memahami konsep ini dari buku-buku tentang database.

8. Jenis Tabel

Di MySQL dikenal istilah table handler dan jenis tabel. Saat ini ada 3 jenis tabel utama yang bisa dipakai di MySQL: MyISAM (default), BerkeleyDB, dan InnoDB. Yang perlu diketahui ada tiga hal: 1) tidak semua tabel mendukung transaksi (MyISAM tidak mendukung transaksi, jadi COMMIT dan ROLLBACK tidak melakukan sesuatu yang semestinya jika Anda menerapkan pada tabel MyISAM); 2) tidak semua tabel punya karakteristik performance yang sama (BerkeleyDB misalnya, lambat jika ukuran tabel besar) dan disimpan dengan cara yang sama (tabel MyISAM misalnya disimpan dalam 3 file: .MYI, .MYD, .frm sementara tabel-tabel dan database-database InnoDB disimpan bersama dalam daerah disk yang disebut tablespace; 3) distribusi MySQL yang bukan -Max tidak dikompile dengan dukungan terhadap BerkeleyDB dan InnoDB.
Nomor 3 penting Anda ketahui karena jika kita menginstruksikan MySQL untuk membuat database dengan jenis tertentu:
CREATE TABLE (...) TYPE=BDB;
Dan MySQL tidak dikompile untuk mendukung BerkeleyDB, maka MySQL tidak akan protes dengan error, melainkan membuatkan tabel tersebut untuk kita tapi dengan tipe default yaitu MyISAM. Jadi Anda perlu mengecek dulu menggunakan SHOW TABLE STATUS:
mysql> create table t4 (i int) type=innodb;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show table status from mydb like 't4';
+------+--------+-...
| Name | Type   | ...
+------+--------+-...
| t4   | MyISAM | ...
+------+--------+-...
Ternyata MyISAM!

Penutup

Sebetulnya untuk memakai MySQL dengan baik dan benar diperlukan skill-skill dasar lain seperti membackup, merestore, mengeset parameter-parameter server, memonitor server, dsb. Tapi itu semua lebih merupakan tugas seorang administrator (DBA).

Makna dan Simbol Kuno

Peradaban manusia telah melahirkan bermacam-macam simbol. Simbol-simbol tersebut memiliki makna tersendiri.


~Ankh~ Ankh merupakan simbol mesir kuno yang melambangkan kehidupan abadi, kelahiran kembali, kesuburan dan penyatuan lelaki dan perempuan. Kadang-kadang disebut pula sebagai kunci sungai Nil dan kunci kehidupan. Para akademisi Mesir menyebutkan bahwa kepala oval Ankh melambangkan delta sungai Nil, garis vertikalnya melambangkan jalur sungai serta lengan timur dan barat melambangkan dua sisi negara dan penyatuannya. David P. Silverman mencatat bahwa Ankh dipertahankan oleh kaum Koptik sebagai salib Kristen, salib Koptik. Kini Ankh melambangkan planet Venus dan logam tembaga.


~Bulan Trilipat (Triple Moon)~ Simbol yang dinamakan pula Dewi Trilipat ini banyak ditemukan di tradisi Neo Pagan dan Wicca. Bulan Trilipat melambangkan tiga fase bulan yaitu timbul, penuh, dan surut dan tiga fase kehidupan kaum perempuan yaitu gadis, ibu dan nenek. Bulan sabit pertama menggambarkan fase bulan timbul yang dikaitkan dengan fase kehidupan kaum perempuan berarti gadis. Gadis melambangkan awal baru, kehidupan baru, kelahiran, peremajaan dan antusiasme muda. Lingkaran tengah menggambarkan fase bulan penuh atau purnama yang dikaitkan dengan fase kehidupan kaum perempuan berarti ibu. Ibu melambangkan kematangan, kesuburan, pemenuhan, stabilitas kekuatan dan kehidupan. Bulan sabit terakhir menggambarkan fase bulan surut yang dikaitkan dengan fase kehidupan kaum perempuan berarti nenek. Nenek melambangkan kebijaksanaan, ketenangan, kematian dan akhir.


~Hamsa/Khamsa/Hand of Fatima~ Dalam bahasa Arab disebut tangan hamsa dan dalam bahasa Ibrani disebut tangan hamesh. Juga dinamakan Tangan Fatimah oleh kaum Muslim untuk menghormati Fatima Zahra, anak Nabi Muhammad. Hamsa/Khamsa digunakan sebagai jimat pelindung dari “mata jahat” di Timur Tengah dan Afrika Utara. Terdapat bukti kuat bahwa sebelum dipergunakan oleh kaum Yahudi dan Islam, simbol tersebut telah dipergunakan untuk melambangkan tangan penangkal Mata Jahat dewi kuno Timur Tengah dan pancaran cinta karena mengisyaratkan tangan terbuka anti kekerasan yang mengarah ke bawah. Biasanya di tengah tangan terlukis gambar mata, spiral dan hati. Energi pelindung Hamsa/Khamsa menarik keberuntungan, kebahagiaan, kekayaan dan kesehatan. Kini orang-orang menaruh Hamsa/Khamsa di atas pintu rumahnya, memakainya sebagai kalung atau menggambarnya di barang-barang miliknya sebagai jimat. Simbol ini mengandung Falsafah suci mengenai pesan cinta dan perlindungan yang disebarkan untuk semua makhluk hidup.

~Heksagram~ Heksagram merupakan bintang bersudut enam dan hasil penggabungan dua segitiga sama sisi. Simbol ini digunakan dalam konteks agama, sejarah dan budaya oleh Yahudi, Hindu, Okultisme dan Islam. Bagi kaum Yahudi, Heksagram dikenal sebagai Magen David atau dikenal dalam bahasa sehari-hari sebagai Bintang Yahudi atau “Bintang Daud”. Magen David menjadi simbol Yudaisme dan identitas Yahudi yang diakui secara umum. Heksagram juga ditemukan dalam diagram kosmologis di agama Hindu, Budha dan Jaina. Bagi umat Kristiani, Heksagram disebut sebagai bintang penciptaan dan sering ditemukan di berbagai gereja. Sedangkan, umat Muslim mengenal Heksagram dalam kisah nabi Sulaiman. Bahkan, Heksagram banyak ditemukan di mesjid dan artefak-artefak Islam dan arab.


~Ichthus~ Ichthus digunakan oleh kaum Kristiani di awal berdirinya gereja sebagai simbol Kristen pertama dan sekarang dikenal sebagai “Tanda Ikan” atau “Ikan Yesus”. Sebelum Kristen lahir, Ichthus digunakan untuk melambang dewi Aphrodite, Atargatis, Dagon, Ephesus, Isis, Delphine and Pelagia. Kata “Ichthus” dalam Bahasa Yunani digunakan sebagai singkatan untuk kata Iesous CHristos, Theou Uios, Soter yang berarti Yesus Kristus, Putra Allah, Sang Penyelamat.


~Labirin~ Sejarah mencatat Labirin digunakan untuk merangkap roh jahat atau sebagai jalur yang digunakan dalam ritual dan tarian. Labirin juga melambangkan jalur panjang dan sulit yang harus ditempuh dalam berkomunikasi dengan Tuhan. Di dunia modern, orang-orang menggunakan Labirin untuk meditasi. Mereka berjalan mengelilingi lingkaran untuk mencapai keadaan kontemplatif sebagai jalur menuju pencerahan. Labirin juga melambangkan keutuhan yang dicapai melalui perjalanan berputar-putar dan berkelok-kelok. Beberapa orang memandangnya sebagai perjalanan batin yang harus ditempuh untuk menemukan pusat diri dan pengetahuan mendalam yang ada dalam dirinya. Lingkaran labirin juga menunjukkan pola geometri yang memungkinkan dunia fisik berhubungan dengan tatanan kosmis dan alam yang lebih tinggi.


~Ledakan Petir (Lightning Bolt)~ Petir berperan di berbagai mitologis, seringkali digunakan sebagai senjata dewa langit dan dewa badai. Di dunia kuno, petir menjadi simbol kekuatan karena digunakan oleh para dewa untuk menghukum mereka yang melakukan kesalahan. Di sisi lain, simbol tersebut digunakan pula untuk melambangkan ketersediaan air dan pemberian pupuk kepada bumi dan seluruh makhluknya.


Lingga
Yoni
~Lingga – Yoni~ Lingga melambangkan kesuburan karena berbentuk tegak, tinggi dan dikaitkan dengan penis dewa Siwa. Arca ini menjadi objek pemujaan atau sembahyang umat Hindu. Lingga juga melambangkan daya cipta dan kekuatan kaum laki-laki. Di hampir semua kuil, dewa Siwa ditampilkan dalam bentuk Lingga. Teori lain menyatakan Lingga melambangkan sifat tak terbatas dewa Siwa. Berlawanan dengan Lingga, Yoni melambangkan alat kelamin perempuan. Yoni melambangkan kursi kekuasaan seksual kaum perempuan. Dalam filsafat Hindu, Yoni adalah asal-usul kehidupan. Yoni juga dianggap sebagai lambang abstrak dewa Shakti dan Devi, daya cipta yang bergerak melalui seluruh alam semesta. Arca Lingga biasanya ditempatkan secara berdampingan dengan Yoni. Penyatuan Lingga dan Yoni melambangkan bentuk abstrak penciptaan. Yoni merupakan sumber segala yang ada, yang tanpa Lingga milik kaum laki-laki akan impoten dan tiada.


~Lingkaran~ Lingkaran merupakan simbol universal yang banyak ditemukan di dinding gua pra sejarah dan permukaan bebatuan. Pada awalnya kemungkinan melambangkan cakram cahaya matahari dan bahkan kini, di bidang astronomi dan seni, lingkaran dengan titik di tengah melambangkan matahari. Sedangkan di bidang astrologi lingkaran melambangkan roh manusia atau batin individu. Pada umumnya lingkaran melambangkan penyatuan, ketakterhinggaan, keutuhan, para dewi dan kekuatan perempuan. Lingkaran juga melambangkan pergantian musim yang terus menerus, roda tahun dan sifat kehidupan itu sendiri yang abadi dan memiliki siklus. Bagi kaum pagan, lingkaran dimanfaatkan untuk memulai kembali hubungan dengan para dewa-dewi dan semua yang ada.


~Mandorla~ Mandorla dijadikan bingkai dalam lukisan Yesus dan Perawan Maria dalam Seni Kristen tradisional. Umat Kristiani menggunakan lambang ini untuk menggambarkan bersatunya surga dan bumi, tuhan dan manusia atau roh dan materi pada awal kemunculan Kristen. Mandorla melambangkan interaksi dan ketergantungan dunia dan kekuatan yang saling berlawanan. Pada Kristen abad pertengahan, Mandorla melambangkan Ichthus, luka Yesus, jalur lahir Maria di mana merupakan jalan Yesus memasuki dunia fisik.


~Mangkuk Higieia~ Hygieia adalah dewi kesehatan Yunani. Patung atau monumen dewi Yunani Higieia sedang memegang patera (mangkuk obat) dengan tubuh dibelit ular yang hendak memakan obat dari mangkuk tersebut melambangkan kehidupan harmonis dengan bumi. Ular melambangkan pasien yang harus memilih memakan obat tersebut atau tidak untuk membantu dirinya. Hal tersebut menunjukkan seseorang mengendalikan kesehatannya dengan mengambil keputusan yang tepat. Ular yang digambarkan memakan dari mangkuk juga dikaitkan dengan kepercayaan kuno bahwa ular memiliki kemampuan dan penyembuhan. Pada masa kini, mangkuk Higieia dijadikan sebagai simbol farmasi dan apotek.


~Mata Horus~ Horus adalah dewa langit Mesir kuno yang digambarkan sebagai seekor elang. Mata kananya dikaitkan dengan dewa matahari Ra sedangkan mata kirinya dikaitkan dengan bulan dan dewa Djehuti (Thoth). Mata Horus melambangkan perlindungan, kekuasaan raja dan kesehatan. Mata Horus yang ditemukan terkubur bersama mumi raja Shoshenq II dimaksudkan untuk melindungi sang raja di akhirat dan menangkal kejahatan. Para pelaut mesir kuno dan Timur Dekat melukis simbol di haluan kapal agar perjalanan lautnya aman. Dalam bahasa Mesir, istilah untuk simbol ini adalah "Wedjat".


~Merkaba~ Merkaba terdiri dari tiga kata terpisah yaitu Mer yang berarti cahaya, Ka yang berarti jiwa dan Ba yang berarti raga. Jika digabungkan, tiga kata tersebut berarti penyatuan jiwa dan raga yang dikelilingi oleh cahaya. Simbol berbentuk bintang ini diyakini merupakan kendaraan ilahi yang keseluruhannya terbuat dari cahaya dan menjadi transportasi jiwa dan raga untuk menuju alam yang lebih tinggi. Merkaba digunakan dalam meditasi sebagai sumber kekuatan, pencerahan dan penyembuhan karena membantu orang menyadari potensi penuhnya dan menghubungkannya dengan kebaikan dalam dirinya dan yang lebih tinggi. Banyak orang menjadikan Merkaba sebagai liontin kalung agar setiap orang dapat merasakan cinta tanpa syarat sehingga menyembuhkan diri sendiri dan orang lain. Merkaba menciptakan keharmonisan nyata sesuai dengan yang diinginkan.


~Om~ Om merupakan simbol mistis dalam agama Hindu, Buddha dan Jaina dan menjadi Ibu Segala Mantera. Dalam agama Hindu, Om melambangkan sifat mutlak dewa Brahma yaitu mahakuasa, mahaada dan sumber seluruh keberadaan yang nyata. Seperti agama-agama yang lain, dewa Brahma tidak dapat dipahami dan dirasakan sepenuhnya. Lambang Om bisa membantu umat Hindu memahami aspek berwujud dan tidak berwujud tuhan. Dengan menggunakan simbol Om, konsep tentang cinta dan penciptaan yang tak terhingga pun disampaikan di luar batas kata dan ide.


~Ouroboros atau Uroborus~ Ouroboros merupakan simbol kuno yang menggambarkan seekor ular atau naga yang memakan ekornya sendiri. Simbol ini melambangkan refleksi diri atau siklus, terutama sesuatu yang bermakna penciptaan diri kembali secara konstan, kembalinya keabadian, dan hal-hal lain yang dianggap sebagai siklus yang memulai kembali segera setelah berakhir. Juga melambangkan ide kesatuan primordial yang terkait dengan sesuatu yang ada atau bertahan sebelum permulaan. Ouroboros telah menjadi simbol agama dan mitologis yang penting di dunia. Dalam Gnostisisme, Ouroboros melambangkan keabadian dan jiwa dunia.


~Pentagram atau Pentacle~ Pentagram bersinonim dengan Pentacle. Pentacle merupakan Pentagram dalam lingkaran. Pentagram biasanya berbentuk bintang bersudut lima dan digambar dengan menarik garis lurus berpotongan dan tanpa putus. Pentagram melambangkan empat unsur fisik dasar, yaitu bumi, udara api dan air ditambah Akasha/roh. Setiap sudut yang besarnya sama melambangkan sifat manusia karena dua sudut di bawah melambangkan tungkai, sudut atas melambangkan kepala dan dua sudut lainnya melambangkan lengan. Sedangkan Pentacle, Pentagram dalam lingkaran, melambangkan keterkaitan segala sesuatu. Lingkaran melambangkan roda kehidupan dan siklus musim yang berputar tanpa awal dan tanpa akhir. Menurut Christian Symbols, Ancient and Modern karya Heather Child, pentagram melambangkan lima indera. Selain itu, jika huruf-huruf S, A, L, V, dan S dituliskan di sudut-sudutnya, pentagram melambangkan kesehatan (bahasa Latin salūs). Pentagram juga melambangkan lima luka Yesus bagi umat Kristiani. Para pemuja setan menggunakan Pentagram yang satu sudutnya mengarah ke bawah untuk ritual terutama jika kepala Baphomet (dewa pagan berkepala kambing) ditumpangkan dalam Pentagram tersebut.


~Persegi~ Persegi merupakan lambang dua dimensi berupa permukaan yang pada dasarnya bemakna tanah, bidang, daratan atau unsur bumi. Berbeda dengan makna simbol lingkaran, bujur sangkar melambang dunia fisik. Bagi kaum pagan, bujur sangkar melambangkan empat penjuru mata angin yaitu utara, timur, selatan dan barat.

~Phoenix~ Phoenix merupakan burung keramat yang ada dalam mitologis Persia, Yunani, Romawi, Mesir dan China. Menurut legenda, Phoenix dapat hidup selama 500-1000 tahun. Di akhir kehidupan dia membuat sarang dari ranting dan kemudian membakar diri beserta sarangnya hingga menjadi abu. Dari abu tersebut, lahirlah Phoenix muda. Phoenix melambangkan kelahiran kembali, keabadian dan pembaharuan. Phoenix menjadi simbol suci pemujaan terhadap Dewa matahari di Heliopolis, Mesir. Bagi umat Kristen Katholik, Phoenix melambangkan kebangkitan-Nya, keabadian-Nya dan kehidupan-Nya setelah kematian.


Roda Dharma
~Roda~ Roda merupakan simbol universal yang bermakna penyatuan kosmik, astrologi, siklus kehidupan dan evolusi. Roda yang ditambah sejumlah jari-jari di dalamnya seperti Roda Pengobatan (Medicine Wheel) bagi penduduk asli Amerika dan Mandala bagi umat Hindu melambangkan penyatuan, pergerakan, matahari, Zodiak, reinkarnasi dan siklus pembaharuan bumi. Umat Buddha mengenal Roda Dharma yang melambangkan Buddha itu sendiri. Roda Dharma menjadi simbol Buddhisme universal. Ia memiliki delapan jari-jari yang melambangkan Jalan Utama Berunsur Delapan.


~Scarab~ Dinamakan pula kumbang kotoran karena kebiasaannya menggulung kotoran hingga berbentuk bola di tanah dan menumpuknya dalam liang. Sang betina mengerami telurnya di dalam kotoran yang berbentuk bola tersebut. Ketika menetas, larva memakan kotoran tersebut. Kegiatannya menggulung kotoran menjadi perhatian orang Mesir kuno dan menyamakannya dengan bola matahari yang bergulir di langit. Menurut mitos Mesir kuno, dewa matahari Ra melintasi langit setiap hari serta mengubah jiwa dan raga. Cara mengerami telur yang dicontohkan oleh Scarab menjadi simbol matahari terbit dan siklus surgawi. Scarab juga digunakan sebagai jimat pelindung dari kejahatan.


~Segitiga~ Simbol segitiga memiliki dua bentuk dengan makna yang berbeda. Segitiga dengan sudut mengarah ke atas melambangkan api, kekuasaaan kaum lelaki, matahari, aktif, ayah dan bagi umat Kristiani melambangkan Trinitas Kudus. Sedangkan segitiga dengan sudut mengarah ke bawah melambangkan air, seksualitas perempuan, bulan, pasif, ibu, agama pemuja dewi dan homoseksualitas.


~Shri Yantra~ Yantra berasal dari bahasa Sanskerta yang artinya “alat” atau “mesin”. Yantra bisa berupa simbol, proses, atau mesin yang memiliki struktur dan organisasi, tergantung konteksnya, namun penggunaan paling umum berupa simbol atau gambar geometris. Secara Tradisional Yantra dipergunakan untuk menyeimbangkan atau memusatkan pikiran dalam konsep spiritual. Shri Yantra merupakan Yantra yang dibentuk oleh sembilan segitiga berpautan yang saling mengelilingi dan keluar dari titik pusat. Dari sembilan, empat segitiga tegak melambangkan sisi maskulin atau dewa Siwa, sedangkan lima segitiga terbalik melambangkan feminin atau Shakti. Secara keseluruhan, Sri Yantra melambangkan ikatan dan penyatuan sifat ilahiah maskulin dan feminin. Juga melambangkan penyatuan dan ikatan segala sesuatu dalam kosmos.


~Spiral~ Spiral merupakan simbol yang sering digunakan dalam latihan spiritual di hampir seluruh peradaban kuno. Spiral melambangkan dewi, rahim, kesuburan, energi kekuatan hidup, perubahan berkesinambungan dan evolusi alam semesta. Simbol Spiral yang ada di seluruh tubuh manusia, hewan, tanaman, mineral, pola energi, dan alam semesta mengingatkan manusia akan perjalanan hidup yang terus berkembang. Secara lebih luas, simbol ini digunakan untuk mengingatkan manusia akan evolusi lahir dan batin semua makhluk hidup serta menjaga keseimbangan dan pemusatan pikiran.


~Swastika~ Berdasarkan bukti arkeologis yang ditemukan di lembah tigris-Eufrat dan beberapa wilayah di lembah Indus, lambang Swastika telah ada sejak 3000 tahun lalu. Meskipun telah menjadi simbol rasisme dan “supremasi kulit putih” neo-nazi, Swastika merupakan salah satu simbol paling suci dalam tradisi Hindu. Hinduisme kuno menggunakan Swastika untuk melambangkan kejujuran, kebenaran, kemurnian dan stabilitas. Empat sudut atau titiknya melambangkan empat arah atau empat pembagian kitab Weda. Selain itu, dilihat dari etimologinya, Swastika juga merupakan bentuk simbol atau gambar dari terapan kata Swastyastu (semoga dalam keadaan baik).


~Tongkat Asklepios~ Simbol ini dikaitkan dengan astrologi serta obat-obatan dan penyembuhan. Namanya berasal dari dewa pengobatan dan penyembuhan dalam mitologi Yunani yaitu Asklepios. Dia memiliki perlengkapan berupa tongkat dan ular. Makna simbol Tongkat Asklepios telah banyak ditafsirkan namun pada umumnya melambangkan seni penyembuhan dengan menggabungkan ular yang sedang berganti kulit sebagai simbol kelahiran kembali dan kesuburan dengan tongkat sebagai simbol kekuasaan dewa pengobatan.


~Triquetra~ Triquetra berasal dari bahasa Latin yang berarti tiga sudut dan merupakan simpul Celtic yang melambangkan semua trinitas, siklus kehidupan abadi, kematian dan kelahiran kembali, serta alam udara, bumi dan laut yang menurut kaum Koptik Kuno melambangkan seluruh semesta. Bagi umat Kristiani, triquetra melambangkan trinitas (Bapa, Putra dan Roh Kudus). Triquetra juga digunakan sebagai jimat pelindung oleh penganut Wicca.


~Triskele/Triade/Spiral Trilipat~ Orang-orang meyakini Triskele merupakan simbol kuno kepercayaan bangsa Celtic yang dikaitkan dengan Dewi Ibu. Kaum Kristen Celtic kadang-kadang menggunakan Triskele uuntuk melambangkan Trinitas. Simbol tersebut memahami konsep universal tentang ranah keberadaan materi bumi, air, langit, jiwa, raga dan pikiran serta siklus waktu spiral yang abadi. Dalam latihan spiritual, Triskele memperkuat irama dan hubungan antara dimensi atau alam kesadaran realitas batin yang terdiri dari realitas normal, realitas bawah dan realitas atas. Seluruh dimensi atau kesadaran realitas batin membaur menjadi satu untuk melengkapi kesadaran lahir. Secara umum, Triskele memancarkan pengetahuan dan kebijaksanaan yang sempurna untuk semua.


~Trisula (Trident)~ Meskipun sering dikaitkan dengan setan oleh mitologi Kristen karena penggunaannya dalam budaya pagan, Trisula merupakan senjata dewa Siwa dan digunakan sebagai lambang Hindu-Budha. Dalam agama Hindu ketiga ujung trisula memiliki makna yang berbeda-beda namun pada umumnya melambangkan berbagai trinitas seperti penciptaan, pemeliharan dan kehancuran atau masa lampau, masa kini dan masa depan. Sebagai senjata dewa Siwa, Trisula digunakan untuk menghancurkan tiga dunia yaitu dunia fisik, dunia nenek moyang yang diwakili dengan kebudayaan yang diperoleh dari masa lalu dan dunia pikiran diwakili dengan proses penginderaan dan tindakan. Dalam tradisi spiritual Hindu trisula juga adalah simbol mata ketiga.


~Unicorn~ Unicorn merupakan kuda legenda yang memiliki tanduk berbentuk spiral. Legendanya terdapat dalam kisah-kisah kaum Nasrani, Islam, Cina, dan Indian. Darah Unicorn merupakan obat yang mujarab dan mampu membuat hidup abadi. Bagi kaum gerakan zaman baru (New Agers), Unicorn melambangkan kekuatan, permurnian, penyembuhan, kebijaksaan, pengetahuan batin, pembaharuan dan kehidupan kekal.


~Yin Yang~ Simbol Yin Yang berasal dari Taoisme yang menggambarkan keharmonisan dan penyatuan segala sesuatu yang berlawanan. Yin Yang melambangkan kekuatan kosmis yang paling sederhana. Yin mewakili sifat gelap, pasif, feminin, dingin dan disimbolkan dengan air sedangkan Yang mewakili sifat terang, aktif, maskulin, panas dan disimbolkan dengan api. Dalam latihan spiritual, Yin Yang membantu menjaga keseimbangan antara kekuatan yang saling berlawanan dan menciptakan penyatuan pribadi dan global. Simbol ini telah menjadi simbol keseimbangan kesadaran universal selama ribuan tahun dan melahirkan kebahagiaan batin bagi yang melihatnya.