Tugas Kelompok itu Menyenangkan .. Lho

Setiap orang yang pernah kuliah pasti pernah merasakan yang namanya tugas kelompok. Tugas yang sangat tidak obyektif. Bagaimana tidak, usaha kerja keras yang dilakukan terkadang tidak berbanding lurus dengan hasil, alias “usaha dibohongi hasil” .. hehe. Salah satu sebab utamanya adalah tidak akur dengan rekan satu tim, apalagi banyak yang nebeng nama dan tidak ikut kerja. Bahkan tiap akhir semester ketika ada dosen yang meminta umpan balik, banyak yang menginginkan tidak ada tugas kelompok dan lebih baik tugas proyek perorangan saja.

My Team

Seperti kata spongebob, “tidak semua makhluk dikaruniai perilaku normal”, begitu juga rekan tim ketika saya kuliah dulu. Waktu itu tugas proyek big data sangat sulit dan tidak mungkin dikerjakan seorang diri tanpa bantuan teman kelompok. Ketika pemilihan anggota kelompok, saya tertarik dan memilih rekan dari pecahan Rusia (Uzbekistan), namanya Saba Bakiev. Tertarik karena dia mengulang mata kuliah tersebut, alias dulu tidak lulus. Manfaatnya adalah saya bisa mengetahui peta pertarungan.

“Jangan pakai software yang diusulkan dosen”, katanya. “Tahun lalu, dari empat tim, hanya satu yang bisa jalan”. Waduh, untung dikasih tahu. Akhirnya kami mencari software lain yang kami kuasai, jatuhlah pada C# dan Matlab. Alhasil, nilai A di tangan. Entah, tak tahu si rekan Rusia itu lulus atau tidak, yang jelas waktu ujian dia hanya mengerjakan beberapa menit lalu keluar duluan. Ternyata ketika saya pulang ujian, dia terlihat tanding sepakbola di lapangan kampus … pantas saja dia keluar duluan.

Tentu saja banyak biang kerok-biang kerok lain yang menjengkelkan. Tetapi jika kita bisa memahami rekan tim, banyak manfaat yang diperoleh. Di kelompok mata kuliah lainnya saya pernah menjadi jembatan penghubung antara rekan saya dari Nepal dan Pakistan, repot sekali.  Nyaris gagal proyeknya karena bagian coding SQL ngambek akibat ribut dengan seorang rekan di bagian perancangan sistem (yang katanya sombong kayak bos).

Itulah manfaat S3 dengan format perkuliahan di awal (tidak langsung riset), jadi ada cerita. Beberapa semester setelah wajib kuliah selesai (diakhiri proses kandidasi), dan masuk fase riset, saya jarang bertemu lagi dengan teman-teman karena asyik sendiri dengan tugas risetnya. Bertemu pun hanya ketika jadwal sidang kemajuan yang biasanya akhir-akhir semester (dengan berwajah kusut, atau sengaja dikusut-kusutin biar dosen kasihan).

Jaadi untuk yang sedang mendapat tugas kelompok, nikmati saja karena banyak kenangan indah yang didapat.

Normalisasi File

[basis.data|akuntansi|lab.software|pert.12]

Basis data secara fisik dibuat dalam bentuk tabel-tabel. Tabel tersebut berasal dari analisis baik lewat Entity Relationship Diagram (ERD) maupun Diagram Alir Data (DAD). Beberapa kampus menerapkan ERD yang merupakan perancangan basis data secara konseptual dilanjutkan dengan mengkonversi ERD menjadi struktur penyimpanan logika (logical structured record). Caranya dengan menggunakan prosedur sebagai berikut:

  • Konversi multivalued menjadi satu tabel tambahan (tabel detail) dari relasi Many-to-Many
  • Konversi entity komposit menjadi tabel lookup baru
  • Konversi entitas lemah (weak entity) menjadi satu tabel baru

Sementara itu yang menggunakan DFD harus menjabarkan tabel yang ada setelah itu dilakukan proses normalisasi untuk menghindari anomali-anomali yang terjadi (insert, update, dan delete). Tetapi ERD pun tetap sebaiknya melakukan proses normalisasi file untuk memperkokoh hasil rancangan.

Format Normalisasi

Ada beragam format penulisan normalisasi file. Salah satu format yang cukup baik adalah format yang ditawarkan oleh Elmasri dkk dengan menggunakan bagan yang berisi judul tabel dan atribut-atributnya. Untuk atribut kunci ditandai dengan menggunakan garis bawah. Simbol panah menunjukan Functional Dependency (FD).

Beberapa kampus menggunakan format tabel seperti class diagram tanpa operation/method dengan nama tabel serta atributnya menyusun ke bawah. Foreign key akan mengarah panahnya ke relasi tabel yang dimaksud. Jika primary key ditandai dengan satu *, foreign key ditandai dengan **.

Kedua cara di atas memiliki kesulitan dalam penggambarannya (dengan visio ataupun insert shape pada MS Word). Namun ada cara lain yang tanpa bagan yaitu dengan menggunakan teks langsung. Formatnya adalah:

  • <nama_tabel> = @<primary_key> + <field_1> + <field_2> + … atau:
  • <nama_tabel>(<primary_key>,<field_1>,<field_2>, …)

Dari sisi pengetikan sepertinya lebih mudah walaupun butuh penjelasan dengan kata-kata untuk foreign key-nya. Berikut adalah contohnya.

Contoh Normalisasi

Dikenal biasanya ada tiga bentuk normalisasi unnormalized, 1st Normal Form, 2nd Normal Form, dan 3rd Normal Form. Ada BCNF dan Normal kelima tetapi sangat jarang dijumpai di lapangan. Misalkan ada bentuk di bawah ini, yaitu suatu struk transaksi penjualan. Bagaimana normalisasinya?

Unnormalized Form

Unnormalized Form (UNF) paling mudah membuatnya karena hanya mendata field-field yang ada saja. Untuk yang berulang/multi-valued dengan mengisi tanda kurung kurawal saja (bagian detil). Jadi UNF transaksi di atas kira-kira sebagai berikut:

  • Penjualan = KdPenjualan + KdPelanggan + namaPelanggan + Alamat + Kontak + Total + {KdBarang + nama +harga + Jumlah}

    Atau:

  • Penjualan (KdPenjualan, KdPelanggan, namaPelanggan, Alamat, Kontak, Total, {KdBarang, nama, harga, Jumlah})

Tentu saja untuk implementasi, UNF tidak bisa dibuat tabel, kecuali DBMS khusus berbasis object (atau XML).

First Normal Form

Bentuk 1st Normal Form (1NF) memiliki ciri tidak adanya redundansi dan multi-value. Dalam 1NF tidak ada field yang merupakan hasil kalkulasi (Calculated Field) yang tidak disimpan di basis data. Selain itu Candidate Key diperkenalkan di sini. Kunci kandidat diperoleh dengan meliha ketergantungan fungsional antara satu field dengan field lainnya, misalnya namaPelanggan, Alamat, dan Kontak dengan KdPelanggan dipilih KdPelanggan sebagai kunci kandidat.

Karena fokus 1st NF adalah menghilangkan multi-valued field (juga nested relation) maka kunci komposit dibentuk gabungan KdPenjualan dan KdBarang sehingga tidak ada multi-value pada barang yang dijual. Tabel penjualan di bawah ini sudah cukup menghindari multi-value pada suatu field.

  • Penjualan (KdPenjualan, KdBarang, nama, harga, Total, KdPelanggan, namaPelanggan, Alamat, Kontak)

Di sini Jumlah dihilangkan karena merupakan hasil kalkulasi dan tidak diinput ke basis data, sementara Total walaupun hasil kalkulasi tetapi tersimpan di basis data.

Relation should have no multivalued attributes or nested relations.”

Second Normal Form

Bentuk normal kedua (2NF) mengharuskan dalam satu tabel memiliki ketergantungan fungsional secara penuh (Fully Functional Dependency). Dengan kata lain pada bentuk 2NF tidak diperbolehkan satu field secara fungsional bergantung pada salah satu kunci komposit. Dalam contoh ini: nama dan harga barang bergantung ke KdBarang dan tidak ke KdPenjualan, Total ke KdPenjualan tapi tidak ke KdBarang. Oleh karena itu perlu dibentuk tabel baru untuk mengakomodir hal tersebut.

  • Penjualan = @KdPenjualan + KdPelanggan + namaPelanggan + Alamat + Kontak + Total
  • DetilPenjualan = @KdPenjualan + @KdBarang
  • Barang = @KdBarang + nama + harga

Perhatikan di sini tidak ada atribut (di tabel Penjualan) yang bergantung ke salah satu kunci komposit (terhadap KdPenjualan saja atau KdBarang saja).

For relations where primary key contains multiple attributes, no nonkey attribute should be functionally dependent on a part of the primary key.”

Third Normal Form

Biasanya transaksi sampai di normal ketiga yang mensyaratkan tidak boleh ada transitive dependency dimana satu field non-key bergantung dengan yang lain. Contohnya adalah namaPelanggan (juga alamat dan kontak) yang ternyata bergantung dengan KdPelanggan. Untuk mengingatnya, istilah “transitive” berasal dari kata transfer, yakni mentransfer dari primary key (KdPenjualan) ke namaPelanggan, Alamat, dan Kontak lewat KdPelanggan.

  • Pelanggan (KdPelanggan, namaPelanggan, Alamat, Kontak)
  • Penjualan (KdPenjualan, KdPelanggan, Total)
  • DetilPenjualan (KdPenjualan, KdBarang)
  • Barang (KdBarang, nama, harga)

Tampak seluruh field/atribut bergantung ke kunci masing-masing tabel. Aturan untuk 3NF adalah:

Relation should not have a nonkey attribute functionally determined by another nonkey attribute (or by a set of nonkey attributes). That is, there should be no transitive dependency of a non-key attribute on the primary key.”

Sekian, semoga bermanfaat.

Reference:

Elmasri, R & Navathe. “Fundamentals of Database”. USA: Pearson. 2004

Menggunakan VLOOKUP Pada Microsoft Excel

[komputer.1|manajemen|lab.software|pert.10]

VLOOKUP merupakan satu fungsi yang mirip dengan sistem basis data. Satu buah kunci (key) akan mengarahkan ke field (atribut) yang lain. Misalnya gambar di bawah jika suatu cell diisi dengan kode ADM maka kolom bagian akan mengisi dengan “administrasi”. Begitu juga dengan MAN dan PRS. Begitu pula untuk golongan A, B, dan C yang akan mengisi gaji pokok berdasarkan golongan tersebut.

Cara paling mudah adalah dengan menekan tombol “fx” di bagian fungsi MS Excel. Pertama-tama letakan di Cell yang akan diisi melalui proses vlookup.

Ketik di kolom “search” dengan kata kunci vlookup tekan enter (atau klik Go) maka akan ditemukan fungsi vlookup. Tekan Ok untuk lanjut mengisi parameter vlookup.

Ada tiga isian yang harus diisi range-nya: Lookup_value, Table_array, dan Col_index_num. Sebagiknya tidak diisi manual, melainkan dengan mengklik lewat mouse. Tekan simbol tabel di bagian kanan.

Untuk Lookup_value diisi dengan kolom dimana suatu kode/key akan dilihat referensinya, misalnya ADM, maka arahkan ke sebelah kiri Cell yang akan diisi lalu tekan klik kiri pada mouse.

Untuk Table_array diisi dengan matriks referensi (biasanya lebih dari satu kolom). Jangan lupa tekan F4 untuk memberikan simbol $ di baris maupun kolomnya.

Terakhir dan tidak kalah pentingnya, Col_index_num berisi kolom ke berapa. Dalam hal ini kolom 2 menunjukan referensi ADM yaitu Administrasi. Tekan OK dan pastikan berubah sesuai dengan referensi pada cel yang menjadi Lookup_value. Berikutnya tinggal mengkopi cel tersebut ke seluruh cell yang akan dicari nilai vlookupnya.