Tuesday, 19 February 2013

Normalisasi Basis Data

NORMALISASI
Dalam perancangan sebuah basis data perlu dilakukan secara cermat agar dihasilkan basis data yang kompak dan efisien dalam penggunaan ruang penyimpanan, cepat dalam pengaksesan dan mudah dalam manipulasi data. Salah satu cara yang dapat dilakukan dalam merancang basis data seperti ini adalah dengan melakukan normalisasi.
Normalisasi adalah proses penyusunan tabel-tabel yantg tidak redundan (dobel), yang dapat
menyebabkan anomali pada saat terjadi operasi manipulasi data seperti tambah, ubah dan hapus. Anomali yaitu proses basis data yang memberikan efek samping yang tidak diharapkan (misalnya menyebabkan ketidakkonsistenan data atau membuat sesuatu data menjadi hilang ketika data lain dihapus). Sebuah tabel dapat dikategorikan efisien atau normal jika telajh memenuhi tiga kriteria, yaitu :
  1. Jika ada dekomposisi tabel dimana dekomposisinya dijamin aman (Lossless Join Decompotition).  Dekomposisi adalah proses pemisahan satu tabel menjadi dua atau lebih tabel baru.
  2. Trepeliharanya ketergantungan fungsional pada saat perubahan data (Dependency Preservation).
  3. Tidak melanggar Boyce-Codd Normal Form (BCNF).
Tahap-tahap normalisasi :
1. Membawa suatu relasi tak ternormalisasi ke bentuk normal kesatu (1NF) dengan cara menghapus semua pegulangan group dan mungkin diperlukan pemecahan relasi menjadi 2 atau lebih. Pada langkah ini diperlukan pula penentuan kunci primer (primary key). Suatu relasi dikatakan berada dalam bentuk normal kesatu (1NF) bila tidak terjadi pengulangan group atau semua data bersifat atomic
2. Menghilangkan ketergantungan parsial atribut yaitu merubah/memecah relasi sehingga semua atribut bergantung fungsi kepada kunci primer. Ini disebut bentuk normal kedua (2NF).
Dari tabel1 dapat dilihat bahwa terdapat lebih dari satu ketergantungan fungsional terhadap kunci primernya, yaitu atribut indeks_nilai yang bergantung penuh kepada atribut kode-kul dan nim sebagai kunci primernya, sedangkan atribut nama-mhs juga bergantung penuh terhadap atribut nim (padahal atribut nim hanya bagian dari kunci primer), jadi tabel1 dikatakan tidak memenuhi syarat 2NF. Pada tabel 2, tabel1 dipecah menjadi 2 tabel sehingga bentuknya menjadi 2NF.
3. Mengeliminasi ketergantungan transitif yaitu merubah/memecah sebagai relasi sehingga semua atribut yang bukan kunci tergantung fungsi secara penuh kepada kunci primer/tidak ada ketergantungan parsial yaitu ketergantungan atribut kepada atribut yang bukan kunci. Ini disebut bentuk normal ketiga (3NF).
Pada tabel1 alamat mahasiswa di pecah menjadi beberapa atribut yaitu alamat_jalan, nama_kota dan kode_pos dan pada tabel ini yang bertindak sebagai kunci primernya adalah nim, tetapi pada tabel1 ini ada atribut lain yang bukan kunci primer yang saling tergantung yaitu atribut nama_kota bergantung pada atribut kode pos, sehingga tabel1 dikatakan tidak normal karena tidak memenuhi bentuk 3NF. Agar tabel1 dapat dikatakan bentuk normal maka tabel1 dipecah menjadi 2 tabel yang terlihat pada tabel2, atribut nama dan atribut alamat_jalan bergantung dengan kunci primernya yaitu atribut nim, sedangkan pada tabel selanjutnya atribut nama_kota bergantung kepada kunci primernya yaitu atribut kode_pos.

ERD

Entity Relationship Diagram

ERD merupakan suatu model untuk menjelaskan hubungan antar data dalam basis data berdasarkan objek-objek dasar data yang mempunyai hubungan antar relasi.
ERD untuk memodelkan struktur data dan hubungan antar data, untuk menggambarkannya digunakan beberapa notasi dan simbol. 



Pada dasarnya ada tiga simbol yang digunakan, yaitu :
  1. Entiti
Entiti merupakan objek yang mewakili sesuatu yang nyata dan dapat dibedakan dari sesuatu yang lain (Fathansyah, 1999: 30). Simbol dari entiti ini biasanya digambarkan dengan persegi panjang.
  1. Atribut
Setiap entitas pasti mempunyai elemen yang disebut atribut yang berfungsi untuk mendeskripsikan karakteristik dari entitas tersebut. Isi dari atribut mempunyai sesuatu yang dapat mengidentifikasikan isi elemen satu dengan yang lain. Gambar atribut diwakili oleh simbol elips.
  1. Hubungan / Relasi
Hubungan antara sejumlah entitas yang berasal dari himpunan entitas yang berbeda. Relasi dapat digambarkan sebagai berikut :
Relasi yang terjadi diantara dua himpunan entitas (misalnya A dan B) dalam satu basis data yaitu (Abdul Kadir, 2002: 48) :
1). Satu ke satu (One to one)
Hubungan relasi satu ke satu yaitu setiap entitas pada himpunan entitas A berhubungan paling banyak dengan satu entitas pada himpunan entitas B.
2). Satu ke banyak (One to many)
Setiap entitas pada himpunan entitas A dapat berhubungan dengan banyak entitas pada himpunan entitas B, tetapi setiap entitas pada entitas B dapat berhubungan dengan satu entitas pada himpunan entitas A.
3). Banyak ke banyak (Many to many)
Setiap entitas pada himpunan entitas A dapat berhubungan dengan banyak entitas pada himpunan entitas B.
Enterprise dalam Basis Data

Enterprise adalah penggambaran struktur basis data pada sebuah objek. Contohnya pada enterprise toko kaset di bawah ini, kita membutuhkan data-data yang digambarkan dalam bentuk tabel, seperti tabel pembeli, tabel kaset, dan tabel transaksi. Dari tabel-tabel tersebut kita dapat membuat relasi atau hubungan antar tabel-tabel tersebut. Dari relasi yang kita buat, kita akan dapat mengolah data dari tabel-tabel tersebut untuk akhirnya mendapatkan informasi yang kita butuhkan. Dalam hal ini, data yang telah direlasikan dari file tabel diolah oleh database manager dengan menggunakan aplikasi program SQL.

Stack (Tumpukan) pada Algoritma dan Struktur Data

Stack  atau  tumpukan  adalah  suatu  stuktur  data  yang  penting  dalam pemrograman, bersifat LIFO (Last In First Out) dimana benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack. Contohnya, karena kita menumpuk Compo di posisi terakhir, maka Compo akan menjadi elemen teratas dalam tumpukan. Sebaliknya, karena kita menumpuk Televisi pada saat pertama kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika kita mengambil elemen dari tumpukan,  maka  secara  otomatis  akan  terambil  elemen  teratas,  yaitu Compo juga.
Operasi-operasi/fungsi Stack
  • Push (pengisian data) : digunakan untuk menambah item pada stack pada                                                    tumpukan paling atas
  • Pop (pengeluaran data) : digunakan untuk mengambil item pada stack pada                                                      tumpukan paling atas
  • Clear   :  digunakan untuk mengosongkan stack
  • IsEmpty  :  fungsi yang digunakan untuk mengecek apakah stack sudah                                      kosong
  • IsFull  :  fungsi  yang  digunakan  untuk  mengecek  apakah  stack  sudah penuh.                  Jangkauan top=0 s/d n-1
Stack dengan struktur array
  1. Mendefinisikan Stack dengan menggunakan struct
  2. Mendefinisikan MAX_STACK untuk maksimum isi stack
  3. Membuatlah variabel array data sebagai implementasi stack secara nyata
  4. Mendeklarasikan operasi-operasi/function di atas dan buat implemetasinya
Deklarasi STACK dengan struct dan array data
typedef struct STACK{
int top;             // Jangkauan top=0 s/d n-1
char data[10][10];
//misalkan  : data adalah array of string
//berjumlah  10 data, masing-masing string
//menampung maksimal  10 karakter

Deklarasi/buat variabel dari struct adalah STACK tumpuk;
Deklarasi MAX_STACK adalah  #define MAX_STACK  10, yang perhitungannya dimulai dari 0 sampai dengan 9.

Inisialisasi Stack

Pada mulanya isi top dengan  -1, karena array dalam C dimulai dari  0, yang berarti stack adalah kosong. Top  adalah suatu  variabel  penanda  dalam  STACK  yang  menunjukkan elemen  teratas  Stack  sekarang.    Top  Of  Stack  akan  selalu  bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack penuh. Ilustrasi stack pada saat inisialisasi ditunjukkan pada gambar di bawah ini:
 

Fungsi isFull
Untuk memeriksa apakah stack sudah penuh, maka dapat dilakukan dengan cara   memeriksa   top   of   stack,   jika   sudah   sama   dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum full. Seperti ditunjukkan gambar di bawah ini:
 

Fungsi Push
Untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack. Tambah satu (increment)   nilai top of stack terlebih dahulu setiap kali ada penambahan elemen stack, asalkan stack masih belum penuh, kemudian isikan  nilai  baru  ke  stack  berdasarkan  indeks  top  of  stack  setelah ditambah satu 

Fungsi Pop
Untuk mengambil elemen teratas dari stack.Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan diambil terlebih dahulu, baru didecrement nilai top of stack sehingga jumlah elemen stack berkurang.

Sintaks program fungsi POP adalah:
 

Fungsi Print
Untuk menampilkan semua elemen-elemen stack. Dengan cara looping semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil!

Sintaks program fungsi Print:
void TampilStack(){
for(int i=tumpuk.top;i>=0;i–)  {
printf(“Data : %s\n”,tumpuk.data[i]);
}
}


Sort
Sorting (Pengurutan) adalah proses mengatur sekumpulan obyek menurut urutan atau susunan tertentu. Urutan obyek tersebut dapat menaik atau menurun.
Keuntungan Sorting adalah :
1. Mempercepat pencarian
2. Mudah menentukan data maksimum dan minimum
Sorting terdiri dari beberapa contoh :
1. Bubble Sort
2. Exchange Sort
3. Selection Sort
4. Insertion Sort
5. Merge Sort
6. Quick Sort  
  • Bubble Sort : 
›Bubble sort adalah mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya.
Contoh Bubble Sort :  (Angka : 22 10 15 3 8 2)
›22 10 15 3 8 2
›10 22 15 3 8 2
›10 15 22 3 8 2
›10 15 3 22 8 2
›10 15 3 8 22 2
›10 15 3 8 2 22
Jadi  angka 22 harus ditukar dengan angka yang ada dibelakangnya sampai pengulangan 6 kali sesuai dengan jumlah angka yg ada. Angka 22 ditukar terus hingga terurut sesuai keinginan, apakah Sorting menurut Ascending (2 3 8 10 15 22) atau Descending (22 15 10 8 3 2).
  
  •  Exchange Sort :
Melakukan pembandingan antar data, dan melakukan pertukaran apabila urutan yang didapat belum sesuai. Bisa dikatakan Bubble sort sama dengan Exchange Sort karena kedua metode ini melakukan pertukaran berulang-ulang terhadap elemen data yang belum diurutkan.  
Contoh Exchange Sort : (Angka : 22 10 15 3 8 2)
›22  10 15 3 8 2
›10  22 15 3 8 2
›10  22 15 3 8 2
›  3  22 15 10 8 2
›  2  22 15 10 8 3
Jadi angka yang ada diawal untuk ditukar akan menjadi pivot (urutan angka yg di blok).  Pivot akan terus berurutan hingga urutan angka tersusun sesuai Ascending (2 3 8 10 15 22) atau Descending (22 15 10 8 3 2).
  •  Selection Sort :
›     Selection sort adalah mencari elemen yang tepat untuk diletakkan di posisi yang telah diketahui, dan meletakkannya di posisi tersebut setelah data tersebut ditemukan, Selection Sort Membandingkan elemen yang sekarang dengan elemen yang berikutnya sampai dengan elemen yang terakhir. Jika ditemukan elemen lain yang lebih kecil dari elemen sekarang
maka dicatat posisinya dan kemudian ditukar.
Contoh Selection Sort : (Angka : 11 3 7 22 30 44)
›11 3 7 22 30 44
›3 11 7 22 30 44
›3 7 11 22 30 44
›3 7 11 22 30 44
›3 7 11 22 30 44
› 3 7 11 22 30 44 
 ›
Pengurutan jenis ini begitu simple karena ia langsung mengurutkan data dari angka pertama yaitu 11 dengan cara menukarkannya dengan angka yang seharusnya berada paling depan . Ascending yaitu angka 3 atau Descending yaitu 22 sampai pengurutan itu selesai.
  •  Insertion Sort :
Pengurutan yang dilakukan dengan cara membandingkan dengan data ke-2 sampai data terakhir. Jika ditemukan data yang lebih kecil atau lebih besar maka data tersebut disisipkan kedepan sesuai posisi yang seharusnya.
Contoh Insertion Sort :
21 32 4 6 2 7 1
21 32 4 6 2 7 1
21 32 4 6 2 7 1
4 21 32 6 2 7 1
4 6 21 32 2 7 1
2 4 6 21 32 7 1
2 4 6 7 21 32 1
1 2 4 6 7 21 32
  

 
  •  Merge Sort :
Merupakan proses pengurutan data yang menggunakan merging dua buah vector. Pada proses merge sort, data dibuat sepasang-sepasang, yang terdiri dari dua elemen. Jika N ganjil, maka ada satu vector yang terdiri dari 1 elemen. Lalu kemudian data tersebut di merging sampai terurut.
Contoh Merge Sort : 






  
  • Quick Sort : 



Merupakan proses penyusunan elemen yang membandingkan suatu elemen (pivot) denan elemen yang lain, dan menyusunnya sedemikian rupa sehingga elemen –elemen lain yang lebih kecil dari pivot terletak disebelah kiri pivot. Dan elemen yang lebih besar dari pivot terletak disebelah kanan pivot. Dengan demikian akan terbentuk dua sublist, yang terletak disebelah kanan dan kiri pivot. Lalu pada sublist kiri dan kanan itu kita anggap sebuah list baru, dan kita kerjakan proses yang sama seperti yang sebelumnya. Demikian seterusnya sampai tidak terdapat sublist lagi.

Contoh Quick Sort :