22 September 2006

Tutorial SQL Bagian 3

Sebelum melanjutkan tutorial ini, sangat dianjurkan untuk menggunakan aplikasi database yang lebih serius. Kami menganjurkan untuk mendownload MySQL 5.0 beserta MySQL GUI Tools dari situs dev.mysql.com. Silakan ikuti petunjuknya, pilih yang sesuai dengan sistem operasi komputer Anda. Untuk seterusnya, perintah yang dicontohkan disini akan compatible dengan perintah MySQL.

Pada tutorial SQL bagian ketiga ini kita akan melanjutkan pembuatan tabel untuk proyek surveillance of disease yang mengambil contoh kasus flu burung. Formulir dibawah ini adalah contoh Case Report Form yang diambil dari www.hpa.org.uk, namun telah sangat disederhanakan supaya lebih memudahkan.
1. Sosio Demografi Pasien

a. Jenis Kelamin:

[] Laki [] Perempuan [] Tidak diketahui

b. Umur: c. Tanggal Lahir:

__ tahun __ bulan __ - __ - ____ ( dd - mm - yyyy )

d. Alamat:

___________________________________________________

____________________ kota/kabupaten: ______________




2. Gejala/Tanda:

a. Tanggal muncul gejala/tanda:

__ - __ - ____ ( dd - mm - yyyy )

b. Suhu tinggi, lebih dari 38 derajat celcius:

[] Ya [] Tidak [] Tidak diketahui

c. Batuk:

[] Ya [] Tidak [] Tidak diketahui

d. Radang tenggorokan:

[] Ya [] Tidak [] Tidak diketahui

e. Nafas tersengal:

[] Ya [] Tidak [] Tidak diketahui




3. Sejarah terpapar hewan/unggas:

Dalam 7 hari sebelum muncul gejala:

a. Apakah pasien pernah terpapar langsung dengan
hewan/unggas:

[] Ya [] Tidak [] Tidak diketahui

b. Pernahkah memasuki wilayah dimana hewan/unggas
dipiara atau pernah dipiara:

[] Ya [] Tidak [] Tidak diketahui




4. Status Keluar

[] Sembuh [] Meninggal [] Tanpa tindak lanjut

Kita akan mencoba mendesain tabel untuk item nomor 2,3 dan 4, yaitu dengan cara memodifikasi tabel pasien, menggunakan perintah ALTER TABLE. Untuk tipe data tanggal, kita menggunakan DATETIME. Sedangkan tipe data pilihan cukup menggunakan CHAR(1) saja, yang isinya satu huruf (a, b atau c) akan kita sepakati dengan a = Ya, b = Tidak dan c = tidak diketahui. Begitu pula untuk status keluar, kita sepakati dengan a = Sembuh, b = Meninggal dan c = Tanpa tindak lanjut. Maka kita modifikasi tabel dengan perintah berikut:
ALTER TABLE pasien ADD COLUMN gejala_dttm DATETIME;
ALTER TABLE pasien ADD COLUMN suhu_tinggi CHAR(1);
ALTER TABLE pasien ADD COLUMN batuk CHAR(1);
ALTER TABLE pasien ADD COLUMN radang_tenggorok CHAR(1);
ALTER TABLE pasien ADD COLUMN nafas_tersengal CHAR(1);
ALTER TABLE pasien ADD COLUMN paparan_langsung CHAR(1);
ALTER TABLE pasien ADD COLUMN paparan_wilayah CHAR(1);
ALTER TABLE pasien ADD COLUMN status_keluar CHAR(1);
Catatan: Tipe CHAR(1) sama dengan Tipe CHARACTER, panjang maksimum 1 karakter. Namun sebenarnya ada tipe data yang lebih cocok yaitu ENUM, tetapi untuk sementara ini kita menggunakan CHAR saja dulu.

Perintah ALTER TABLE tersebut akan menambah kolom pada tabel pasien. Akan kita cek dengan perintah DESCRIBE:
DESCRIBE pasien;

hasilnya:
+------------------+-------------+
| Field | Type |
+------------------+-------------+
| nama | text |
| alamat | text |
| kode_wilayah | text |
| kelamin | char(1) |
| umur | smallint(6) |
| gejala_dttm | datetime |
| suhu_tinggi | char(1) |
| batuk | char(1) |
| radang_tenggorok | char(1) |
| nafas_tersengal | char(1) |
| paparan_langsung | char(1) |
| paparan_wilayah | char(1) |
| status_keluar | char(1) |
+------------------+-------------+
Jika kita perhatikan pada kolom Type, ada perbedaan tipe untuk kelamin yaitu char(1) sedangkan pada tutorial pertama tertulis CHARACTER. Perbedaan ini tidak menjadi masalah, dikarenakan perbedaan dialek SQL antar aplikasi database.

Sebagai tambahan, perintah ALTER TABLE juga dapat digunakan untuk menghapus kolom/field. Akan kita coba, sebelumnya kita tambahkan satu kolom dummy yang nanti bakal dihapus:
ALTER TABLE pasien ADD COLUMN test_hapus CHAR(1);

hasilnya (dengan perintah DESCRIBE):
+------------------+-------------+
| Field | Type |
+------------------+-------------+
| nama | text |
| alamat | text |
| kode_wilayah | text |
| kelamin | char(1) |
| umur | smallint(6) |
| gejala_dttm | datetime |
| suhu_tinggi | char(1) |
| batuk | char(1) |
| radang_tenggorok | char(1) |
| nafas_tersengal | char(1) |
| paparan_langsung | char(1) |
| paparan_wilayah | char(1) |
| status_keluar | char(1) |
| test_hapus | char(1) | <--- ini akan kita hapus
+------------------+-------------+

Caranya menghapus kolom:
ALTER TABLE pasien DROP COLUMN test_hapus;

hasilnya:
+------------------+-------------+
| Field | Type |
+------------------+-------------+
| nama | text |
| alamat | text |
| kode_wilayah | text |
| kelamin | char(1) |
| umur | smallint(6) |
| gejala_dttm | datetime |
| suhu_tinggi | char(1) |
| batuk | char(1) |
| radang_tenggorok | char(1) |
| nafas_tersengal | char(1) |
| paparan_langsung | char(1) |
| paparan_wilayah | char(1) |
| status_keluar | char(1) |
+------------------+-------------+
Foila!!, sudah hilang lagi.


Berikutnya, kita akan menggunakan statement baru yaitu UPDATE. Dengan perintah UPDATE kita akan mengubah data pada record. Sebelumnya, akan kita cek dulu isi field yang telah kita tambahkan dengan perintah:
SELECT nama,umur,gejala_dttm,suhu_tinggi
FROM pasien;

hasilnya:
+--------+------+-------------+-------------+
| nama | umur | gejala_dttm | suhu_tinggi |
+--------+------+-------------+-------------+
| John | 35 | NULL | NULL |
| Jane | 30 | NULL | NULL |
| George | 30 | NULL | NULL |
| Silvy | 20 | NULL | NULL |
| Tommy | 25 | NULL | NULL |
+--------+------+-------------+-------------+

Kemudian akan kita coba perintah UPDATE berikut:
UPDATE pasien SET gejala_dttm = '2006-09-19 08:00:00', suhu_tinggi = 'a';

akan mengubah gejala_dttm = '2006-09-19 08:00:00' (jam 8 pagi, tanggal 19 September 2006) dan suhu_tinggi = 'a' (alias Ya, atau muncul suhu tinggi), dan perubahannya akan terjadi pada semua record pada tabel pasien (karena tidak ada WHERE criteria).

Untuk memasukkan tanggal digunakan format seperti contoh, yaitu: tahun-bulan-tanggal<spasi>jam:menit:detik. Format ini bagi kita kurang biasa, namun bagi komputer akan sangat memudahkan untuk dibandingkan dan diurutkan dengan kecepatan sangat tinggi.

Akan kita coba melihat hasilnya dengan perintah:
SELECT nama,umur,gejala_dttm,suhu_tinggi
FROM pasien;

hasilnya:
+--------+------+---------------------+-------------+
| nama | umur | gejala_dttm | suhu_tinggi |
+--------+------+---------------------+-------------+
| John | 35 | 2006-09-19 08:00:00 | a |
| Jane | 30 | 2006-09-19 08:00:00 | a |
| George | 30 | 2006-09-19 08:00:00 | a |
| Silvy | 20 | 2006-09-19 08:00:00 | a |
| Tommy | 25 | 2006-09-19 08:00:00 | a |
+--------+------+---------------------+-------------+

Selanjutnya kita akan mencoba beberapa statement UPDATE dibawah ini. Silakan untuk mencobanya dan melihat hasilnya setiap selesai satu UPDATE.
UPDATE pasien SET
batuk = 'a',
radang_tenggorok = 'a',
nafas_tersengal = 'b',
paparan_langsung = 'a',
paparan_wilayah = 'b',
status_keluar = 'a';

UPDATE pasien SET paparan_wilayah = 'c' WHERE nama = 'John';

UPDATE pasien SET nafas_tersengal = 'a',
status_keluar = 'b'
WHERE nama = 'George';

UPDATE pasien SET paparan_langsung = paparan_wilayah WHERE kelamin != 'L';

Cobalah untuk menarik garis logika dari perintah-perintah tersebut. SQL sebenarnya cukup mudah dipahami dikarenakan dialeknya mirip dengan bahasa Inggris biasa.

Jika kita perhatikan statement UPDATE yang terakhir agak sedikit baru. Statement tersebut jika dibahasakan sama dengan perintah: Pada tabel pasien, ubahlah kolom paparan_langsung menjadi sama isinya dengan paparan_wilayah, untuk record-record yang memiliki data kolom kelamin tidak sama dengan 'L' (atau laki-laki). Mudah bukan?


Bersambung.

No comments: