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 bagai 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

Iklan

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.

Membuat Report dengan MS Access

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

Sambil membahas masalah normalisasi file, praktek basis data kali ini adalah membuat report pembelian dan penjualan. Sebagai informasi, pada pertemuan sebelumnya sudah dibahas pembuatan form pembelian yang melibatkan suplier, barang, dan detil pembelian. Atau lebih jelasnya dapat dilihat relasi antar tabel di bawah ini.

Mempersiapkan Report

Untuk membuat report baru tekan menu CREATE Report Wizard. Di sini menggunakan wizard agar lebih cepat dan mudah. Nanti jika akan dirubah, tinggal menekan Dezign View saja. Berikutnya masukan field-field yang akan muncul di report. Sebenarnya pilih saja sebanyak mungkin yang kira-kira dibutuhkan. Toh jika tidak dibutuhkan bisa dihapus dari report nantinya.

Di sini akan coba ditambahkan field-field pada tabel pembelian. Pastikan format sesuai dengan yang diinginkan sebagai berikut.

Lanjutkan dengan menekan Next> hingga report terbentuk. Berikutnya adalah menambahkan Total Pengeluaran terhadap seluruh pembelian yang telah dilakukan.

Membuat Total Pengeluaran

Sebelumnya masuk ke menu Report Design dengan mengklik kanan Report Penjualan dan memilih Design View.

Tambahkan satu Text Box untuk menampilkan total pengeluaran. Ganti teks dengan “Total Pengeluaran” setelah melebarkan bagian footer dengan mouse. Tekan bagian paling kanan Control Source pada property Data.

Masukan fungsi yang diperlukan, di sini menggunakan Sum yang artinya menjumlahkan suatu field (dalam hal ini Field Total). Tekan Ok untuk menguji report yang baru saja dibuat. Tampak total pengeluaran yang merupakan penjumlahan dari seluruh transaksi yang ada. Semoga bermanfaat, selamat mencoba.

NOTE: Di sini harga hanya contoh, tentu saja harga jual harus dibedakan dengan harga beli agar diperoleh keuntungan.

Membuat Histogram

[komputer.1|manajemen|lab.sainstech|pert.9]

Histogram adalah grafik yang menunjukan hubungan data dengan frekuensi dalam inteval tertentu. Grafik ini penting untuk menunjukan sebaran nilai suatu data. Sehingga informasi dapat digali dari data tersebut. Misalkan kita memiliki data nilai sebagai berikut:

Berikutnya kita ingin melihat sebaran nilai tersebut dalam suatu interval:

Excel memiliki fasilitas “Data Analysis” yang dapat diakses di Menu Data (biasanya di sebelah kanan atas).

Excel akan mengeluarkan jendela Data Analysis. Pilih Histogram dilanjutkan dengan memilih range data.

Pilih range data nilai di atas serta bagian bin range data yang berisi data interval di atas.

Setelah ditek OK maka akan tampak Sheet baru yang menunjukan data tersebut.

Membuat Sebuah Interpreter dengan Lex and Yacc

[t.kompilasi|t.informatika|s.103|pert.10]

Jika pada pertemuan yang lalu dibahas bagaimana cara membuat kompiler yang berisi persamaan matematis dengan satu variabel keluaran, misal variabel x maka pada pertemuan kali ini akan diilustrasikan bagaimana membuat interpreter (yang berisi eksekusi baris-perbaris). Saat ini interpreter paling banyak digunakan mengingat aplikasi berbasis web yang paling banyak digunakan, misalnya php yang menerapkan prinsip interpreter.

Tutorial Lex and Yacc

Software Lex and Yacc memanfaatkan fasilitas yang dimiliki bahasa pemrograman c++. Hasilnya adalah sebuah kompiler baru yang sesuai dengan keinginan programmer. Untuk tutorial dapat dilihat di situs resminya yang disertai juga dengan contoh kode program yang akan digunakan pada postingan kali ini.

File-File yang Dibutuhkan

Seperti biasa file berekstensi *.l dan *.y diperlukan. Masing-masing berfungsi sebagai lexical generator (lex) dan semantic (yacc). Untuk sampel (silahkan unduh di sini), dua file utama adalah calc3.l dan calc3.y diperlukan selain satu buah file header, calc3.h. Ada satu buah file tambahan untuk interpreter (calc3a.c) yang menjalankan satu listing kalang/loop “while” sementara dua lainnya (calc3b.c dan calc3g.c). Lakukan proses kompilasi dan build pada calc3.l dan calc3.y.

Bagaimana cara menggunakan calc3a.c yang berfungsi sebagai interpreter? Tidak ada penjelasan detil pada situs resminya, sementara saya mengkopi isi dari calc3a.c di bawah instruksi “Include …” dan diletakan di bagian bawah calc3.y sebelum mengkompilasi file tersebut (akan menghasilkan y.tab.c dan y.tab.h). Jalankan file exe hasil build lex+yacc hingga menghasilkan interpreter di bawah. Untuk yang compiler dan graph sepertinya butuh penjelasan yang lebih rinci lagi di postingan yang akan datang.

 

Membuat Form Input Data Barang

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

Untuk membuat contoh FORM input Barang dengan aplikasi berbasis web, dalam hal ini PHP dan basis data MySQL dibutuhkan komponen-komponen sebagai berikut:

  • Basis data dengan tabel
  • Kode PHP untuk koneksi data (lihat post sebelumnya)
  • Kode PHP untuk tampilan awal
  • Kode PHP untuk input data

Di sini kode yang digunakan dibuat semudah mungkin dengan bentuk yang paling dasar agar mudah dipraktekan.

Membuat Basis Data dengan Tabel

Sebagai contoh kita buat satu database dengan satu contoh tabel, misalnya penjualan dengan tabel barang-nya. Pertama-tama buka http://localhost/phpmyadmin/ untuk mengakses basis data MySQL. Tentu saja dengan terlebih dahulu menghidupkan Apache Server. Buka SQL query dengan menekan tombol Edit di bagian atas.

Maka Anda akan masuk ke menu SQL yang siap diisi script di bawah ini:

  • create database penjualan;
  • use penjualan;
  • create table barang(
  • KdBarang varchar(10),
  • NamaBarang varchar(25),
  • Harga decimal,
  • Primary key (KdBarang)
  • );

Pastikan SQL berjalan dengan baik dengan indikasi “Your SQL query has been executed successfully” seperti gambar berikut:

Refresh phpmyadmin untuk memastikan apakah satu buah basis data dengan nama penjualan sudah muncul dengan tabel barang yang juga terbentuk.

Membuat Kode PHP Untuk Koneksi Data

Diperlukan satu buah fungsi new mysqli dengan parameter berupa server, user, password, dan basis data.

  • <?php
  • $conn=new mysqli(‘localhost’,’root’,”,’penjualan’) or die (“Tidak Berhasil”);
  • echo ‘Ok’;
  • ?>

Simpan dengan nama, misalnya koneksi.php yang akan dipanggil (dengan fungsi include) setiap akan mengakses basis data. Cek dengan menjalankan http://localhost/latihan/koneksi.php yang mana di laptop saya koneksi.php berada di folder latihan pada folder utama htdocs. Pastikan hanya muncul tulisan Ok yang berasal dari line 4 kode di atas tanpa ada warning (biasanya salah password atau kurang tutup kurung dan kesalahan syntax lainnya. Lagi-lagi, kode di atas dibuat seminim mungkin.

Membuat Kode PHP Untuk Tampilan Awal

Banyak teknik-teknik untuk membuat tampilan awal yang baik. Silahkan menggunakan aplikasi-aplikasi bantuan seperti Macromedia Dreamweaver, Microsoft Frontpage, dan lain-lain. Di sini kita gunakan yang paling dasar. Tapi tentu saja dengan tabel agar lebih rapi. Gunakan kode berikut yang disimpan dengan nama form.php.

Bentuk formnya kira-kira sebagai berikut dengan mengakses http://localhost/latihan/form.php.

Terakhir adalah membuat kode PHP agar data yang dimasukan pada form di atas masuk ke tabel barang di basis data penjualan.

Membuat Kode PHP Untuk Input Data

Isi dari kode input adalah menyiapkan variabel yang ditangkap dari form.php sebelumnya agar bisa dikirim ke tabel barang field-field yang harus diisi. Berikut kodenya:

Masukan data baru, misalnya kode, nama, dan harga berturut-turut B001, Oli, 150000. Tekan simpan dan pastikan indikator “Ok” muncul.

Buka http://localhost/phpmyadmin/ dan pastikan ada satu data baru di tabel barang. Sekian, selamat mencoba.

Munafik yang Baik

Judul yang aneh, mungkin pembaca tidak setuju. Mana ada munafik yang baik. Terlepas dari istilah munafik yang artinya “bermuka dua”, mungkin di sini istilah yang tepat adalah menutup bagian yang memang tidak seharusnya diumbar untuk dilihat, seperti layaknya pakaian yang kita kenakan.

Goal Oriented

Ketika saya bekerja di bank, di satu cabang ada dua divisi yaitu operasional dan marketing. Jika operasional cenderung ketat absen masuknya, alias pagi pulang sore, bagian marketing cenderung santai. Hal ini karena divisi tersebut memang berorientasi pada target, berbeda dengan divisi operasional yang memang melayani transaksi. Tidak ada konflik di antara mereka.

Bagaimana dengan dosen? Tentu saja salah satu bagiannya adalah operasional juga, khususnya pada sisi pengajaran. Harus tepat waktu, karena akan ditiru oleh mahasiswa jika kita malas. Tetapi bagaimana jika memang tidak ada jam mengajarnya? Sementara ada beban meneliti dan mengabdi yang memang berorientasi tujuan (goal oriented). Jadi jika tidak ada mengajar, tidak perlu datang kah?

Tidak Ada Salahnya Menghargai

Tadinya saya memiliki prinsip goal oriented, mungkin terbawa pekerjaan saya di IT waktu di bank dulu yang terkadang kerjanya tidak mengikuti aturan jam masuk-pulang. Bahkan sempat menginap di salah satu cabang di kranji ketika instalasi sever baru. Tapi ketika saya studi lanjut di Thailand, saya melihat dosen pembimbing saya yang memiliki karakter yang menarik untuk dipraktekan, yaitu menghargai.

Dosen pembimbing saya merupakan dosen super sibuk. Tetapi uniknya dia tidak pernah menunjukan sibuknya di hadapan siapapun. Ini mungkin sifat menutup-nutupi darinya yang saya lihat pertama. Walau sulit dihubungi untuk konsultasi, tetapi ketika konsultasi dia akan fokus berhadapan dengan kita, mematikan semua alat komunikasi/koneksi dengan pihak lain. Padahal feeling saya banyak di fikirannya yang harus dikerjakan. Tetapi sikapnya yang berpura-pura hanya fokus ke saya memang dapat diacungi jempol. Di sini dia menghargai mahasiswa.

Lain lagi cerita masalah administrasi. Ketika saya mengirim email perihal prosedur, maka dia akan menjawab 100% prosedural. Mungkin karena via email yang memang bisa dijadikan bukti. Tetapi ketika berbicara via lisan/ketemu, dia bisa fleksibel banget. Kali ini dia menghargai sistem yang ada, dalam artian institusi akan melihat jika dia sangat menghargai aturan di kampus. Walau perkiraan saya dia tidak setuju, tetapi karena menghargai akhirnya dia ikuti.

Memang saya setuju dengan dosen yang fokus ke tujuan (goal oriented), tetapi dengan hanya fokus ke hal tersebut jika datang dan pergi semaunya sepertinya terlihat tidak menghargai bagian operasional (TU, SDM, dll). Apa salahnya mengenakan “baju” terlihat datang rajin ke kampus, intinya sebenarnya adalah menghormati dan menghargai orang lain, lembaga, dan pemilik/yayasan. Bahkan untuk hal tertentu, seperti menggunakan fasilitas kantor, sebaiknya ijin terlebih dahulu ke divisi yang memiliki fasilitas itu, walaupun milik kampus, toh sekali lagi tidak ada salahnya menghargai orang … malah harus lah.