NORMALISASI
Dekomposisi Dekomposisi : memecah relasi/tabel menjadi relasi/tabel yang lebih kecil untuk mendapatkan skema yang tidak mengandung anomali dan redundansi. Anomali Anomali adalah proses pada basis data yang memberikan efek samping yang tidak diharapkan ( misalnya menyebabkan ketidakonsistenan data atau membuat suatu data menjadi hilang ketika data lain dihapus)
Relasi (review) Kumpulan atribut yang nilainya : Setiap atribut harus berharga tunggal. Semua harga pada suatu atribut harus mempunyai tipe yang sama Setiap atribut harus mempunyai nama yang unik Urutan atribut tidak penting Tidak ada dua baris (tuple) dalam relasi yang isinya identik Urutan baris (tuple) tidak penting tiosetyo@yahoo.com , setyoinator@gmail.com www.cerdas-pintar.blogspot.com
Proses Rancangan Database (review) Mengumpulkan kebutuhan user/business Mengembangkan E-R Model berdasarkan kebutuhan user/business Konversikan E-R Model ke himpunan relasi (tabel) Normalisasikan relasi untuk menghilangkan anomali Implementasikan ke database dengan membuat tabel untuk setiap relasi yang sudah ternormalisasi
Normalisasi database (1) Normalisasi adalah proses pembentukan struktur database sehingga sebagian besar ambiguity bisa dihilangkan. Tahap Normalisasi dimulai dari tahap paling ringan (1NF) hingga paling ketat (5NF) Biasanya hanya sampai pada tingkat 3NF atau BCNF karena sudah cukup memadai untuk menghasilkan tabel-tabel yang berkualitas baik. am.bi.gu [a] bermakna lebih dr satu (sehingga kadang-kadang menimbulkan keraguan, kekaburan, ketidakjelasan, dsb); bermakna ganda; taksa Referensi: http://kamusbahasaindonesia.org/ambigu KamusBahasaIndonesia.org Ambiguity adalah, sesuatu yang memiliki makna lebih dari satu, barangkali karena memiliki suatu cerita/latar belakang historis, kategoris, kontraris, sosial, linguistik, moralistik, religius, litigius, prestisius, saintifik, heuristik, naturalistik, supernatural, ultranatural, eksistensial, biologis, deontologis, geologis, methodologis, nominalistik, deterministik, psikologis, diabolis, metaphoristik, patriotis, dialektik, ekletik, abnormal, paranormal, semi-formal atau tidak; atau barangkali campuran dari faktor2 diatas. SELECT..INNER JOIN..ON dengan nama kolom ini, MySQL akan mengeluarkan error: mysql> SELECT nama_matkul,jumlah_SKS,nama_dosen FROM mata_kuliah INNER JOIN daftar_dosen ON mata_kuliah.NIP_dosen=daftar_dosen.NIP_dosen; INNER JOIN daftar_dosen ON NIP_dosen=NIP_dosen; ERROR 1052 (23000): Column 'NIP_dosen' in on clause is ambiguous Dari pesan error yang terjadi, sebenarnya MySQL ‘bingung’ dalam memilih kolom. Query ON NIP_dosen=NIP_dosen menjadi ambigu karena kedua tabel kita memiliki nama kolom yang sama. Untuk mengatasi ambiguitas ini, MySQL mengharuskan kita secara eksplisit menyebutkan nama tabelnya. Cara penulisan ini menggunakan tanda titik sebagai pemisah: Nama_Tabel.Nama_Kolom Misalkan untuk merujuk pada kolom NIP_dosen pada tabel mata_kuliah, maka penulisannya menjadi: Mata_kuliah.NIP_dosen Sehingga query SELECT..INNER JOIN..ON yang benar menjadi: -------------------+------------+---------------+ | nama_matkul | jumlah_SKS | nama_dosen | +-------------------+------------+---------------+ | Database | 4 | Susi Indriani | | Fisika Dasar | 2 | Tia Santrini | | Jaringan Komputer | 3 | Rubin Hadi | | Matematika Dasar | 4 | Sabrina Sari | | Mikro Prosesor | 2 | Tia Santrini | | Sistem Operasi | 2 | Sabrina Sari | | Teknik Kompilasi | 2 | Tia Santrini | 7 rows in set (0.00 sec)
Normalisasi database (2) Mengapa dilakukan normalisasi ? Optimalisasi struktur tabel Meningkatkan kecepatan Menghilangkan pemasukan data yang sama Mengurangi redundansi Lebih efisien dalam penggunaan media penyimpanan Menghindari anomali (insertion anomalies, deletion anomalies, update anomalies). Integritas data yang ditingkatkan
Normalisasi database (3) Sebuah tabel dikatakan baik (efisien) atau normal jika memenuhi 3 kriteria sbb: Jika ada dekomposisi (penguraian) tabel, maka dekomposisinya harus dijamin aman (Lossless-Join Decomposition). Artinya, setelah tabel tersebut diuraikan / didekomposisi menjadi tabel-tabel baru, tabel baru bisa menghasilkan tabel semula dengan sama persis. Terpeliharanya ketergantungan fungsional pada saat perubahan data (Dependency Preservation). Tidak melanggar Boyce-Code Normal Form (BCNF) Jika kriteria ketiga tidak dapat terpenuhi, maka paling tidak tabel tersebut tidak melanggar Bentuk Normal tahap ketiga (3rd Normal Form / 3NF).
Dependency / Ketergantungan Dependency merupakan konsep yang mendasari normalisasi. Dependensi menjelaskan hubungan antar atribut, atau secara lebih khusus menjelaskan nilai suatu atribut yang menentukan nilai atribut lainnya. Ada beberapa jenis Dependency / Ketergantungan: Ketergantungan Fungsional / Functionally Dependency (FD) Ketergantungan Fungsional Penuh / Full Functionally Dependency (FFD) Ketergantungan Transitif / Transitive Dependency (TDF) Ketergantungan Total /Total Dependency (TD)
1. Ketergantungan Fungsional Ketergantungan Fungsional menggambarkan hubungan atribut dalam sebuah relasi. Suatu atribut dikatakan Ketergantungan Fungsional pada yang lain, jika menggunakan harga atribut tersebut untuk menentukan harga atribut yang lain. Simbol yang digunakan adalah (dibaca secara fungsional menentukan )
Lanjut.. Notasi: X Y X dan Y adalah atribut dari sebuah tabel. Berarti X secara fungsional menentukan Y atau Y tergantung pada X, jika dan hanya jika ada dua baris data dengan nilai X yang sama, maka nilai Y juga sama Notasi: X Y Adalah kebalikan dari notasi sebelumnya.
Contoh 1 Relasi Pembeli No_Pembeli Nama_Pembeli P01 Imam_x P02 Yazix P03 Hana Ketergantungan fungsional dari relasi Pembeli adalah : No_Pem → Nama_Pembeli Bagian sebelah kiri panah disebut penentu (determinan) dan sebelah kanan panah disebut yang tergantung (dependen). Tanda { } biasa digunakan kalau ada lebih dari satu atribut, baik pada penentu maupun yang tergantung.
Contoh 2 Functional Dependency: NRP Nama {Mata_Kuliah, NRP} Nilai Non Functional Dependency: Mata_Kuliah NRP NRP Nilai
Contoh 3 Pesan_Jual Kode_Jual Kota Kode_Brg Jumlah P1 Yogya B1 10 B2 5 P2 Solo 7 6 B3 P3 Klaten B4 Pada contoh ini, Kode_Jual secara fungsional menentukan Kota, sebab terlihat bahwa untuk Kode_Jual yang sama, Kota-nya juga sama. Dengan demikian: Kode_Jual Kota contoh lain: {Kode_Jual,Kode_Brg} Jumlah {Kode_Jual,Kode_Brg} Kota {Kode_Jual,Kode_Brg} {Jumlah, Kota}
2. Ketergantungan Fungsional Penuh Suatu atribut Y mempunyai ketergantungan fungsional penuh terhadap atribut X, jika Y mempunyai ketergantungan funsional terhadap X Y tidak memiliki ketergantungan terhadap bagian dari X Notasi : X Y
Contoh contoh , terdapat relasi pelanggan: Pelanggan ( KODE_PELANGGAN, NAMA, KOTA, NOMOR_FAX ) Pada relasi ini: {KODE_PELANGGAN, KOTA} NOMOR_FAX KODE_PELANGGAN NOMOR_FAX KET: Pada (1) Nomor_Fax bergantung pada {KODE_PELANGGAN, KOTA} dan bergantung pada KODE_PELANGGAN (pada 2) yang tidak lain adalah bagian dari {KODE_PELANGGAN, KOTA}, maka Nomor_Fax hanya mempunyai dependensi fungsional sepenuhnya terhadap KODE_PELANGGAN
Contoh : Pembeli → Kota {Pembeli, Barang} → Kota Kota mempunyai depedensi fungsional terhadap Pembeli atau {Pembeli, Barang} tapi kota mempunyai depedensi fungsional sepenuhnya terhadap pembeli bukan barang.
contoh Kebergantungan fungsional berikut: (1) IDPegawai -> tglLahir maka benar juga menyatakan: (2) IDPegawai, namaPegawai -> tglLahir Pada (2) sebenarnya namaPegawai tidak diperlukan untuk memperoleh tglLahir. IDPegawai sudah mencukupi untuk memperoleh nilai tglLahir. Jadi: merupakan kebergantungan fungsional penuh bukan kebergantungan fungsional penuh
3. Ketergantungan Transitif Atribut Z mempunyai dependensi transitif terhadap X bila apabila Y tergantung pada X dan Z tergantung pada Y X → Y → Z
Contoh Definisi : Atribut Z pada relasi R dikatakan tergantung transitif pada atribut X, jika atribut Y tergantung pada atribut X pada relasi R dan atribut Z tergantung pada atribut Y pada relasi R. ( X Y, Y Z, maka X Z ) Contoh : Ketergantungan transitif : No-pem Kode-kota Kode-kota Kota , maka No-pem Kota
Lanjut.. NIP Nama Gol_gaji Gaji_pokok 0001 Ian III A 600000 0002 Saputra III B 650000 0003 Rohim 0004 Fani Gol_gaji fungsional dependency pada NIP dan Gaji_pokok Fungsional Dependency pada Gol_gaji. NIP sebagai X, Gol_gaji sebagai Y, dan Gaji_pokok sebagai Z Jadi nilai-nilai rinci data pada atribut Gaji_pokok (Z) bergantung transitif terhadap NIP X Y Z NIP Gol_gaji Gaji_pokok
4. Ketergantungan Total Suatu atribut Y mempunyai ketergantungan total pada atribut X jika: Y memiliki ketergantungan fungsi terhadap X X memiliki ketergantungan fungsi terhadap Y Notasi : X Y
Lanjut.. Contoh : PEGAWAI (NO-INDUK,NAMA,TMP-LAHIR,TG-LAHIR, ALAMAT) Dengan demikian notasi dapat ditulis: NO-INDUK NAMA
BENTUK NORMAL PERTAMA (First Normal Form - 1NF) Bentuk normal 1NF terpenuhi jika sebuah tabel tidak memiliki atribut bernilai banyak (multivalued attribute), atribut composite atau kombinasinya dalam domain data yang sama. Data dibentuk dalam satu record demi record dan nilai field adalah atomic value. Tidak ada set atribut yang berulang / bernilai ganda)
Atribut bernilai ganda Lanjut.. Suatu relasi berada dalam bentuk normal pertama jika relasi tidak mengandung atribut yang bernilai ganda Contoh : Atribut bernilai ganda
Sekarang atribut berniali tunggal Lanjut.. Pemecahannya Buang atribut berganda Caranya: Atur setiap kolom berisi satu nilai. - Bila isi suatu kolom untuk suatu baris berisi n nilai, maka pecahlah baris menjadi n baris Sekarang atribut berniali tunggal
Lanjut..
Lanjut..
Lanjut..
BENTUK NORMAL KEDUA (Second Normal Form - 2NF) Bentuk normal 2NF terpenuhi dalam sebuah tabel jika telah memenuhi bentuk 1NF. Normalisasi 2NF: setiap atribut bukan kunci bergantung penuh pada kunci primer (primary key). Sehingga tidak ada atribut bukan kunci yang bergantung pada sebagian (parsial) kunci primer (primary key) Jika terdapat atribut yang tidak memiliki ketergantungan terhadap primary key, maka atribut tersebut harus dipindah atau dihilangkan.
SYARAT 2NF Memenuhi kriteria tabel 1NF Di dalam tabel tersebut tidak ada redudansi / pengulangan data dan Null Value Field-field yang bukan PK (primary key) adalah Fully Functional Dependency (bergantung penuh) pada PK.
Contoh Perhatikan tabel di bawah ini. Atribut mana yang bisa menjadi primary key, dan bagaimana ketergantungan fungsional semua atribut?
lanjut Jika No dan Kursus dijadikan composite primary key, maka nama tidak tergantung fungsional penuh terhadap PK, perlu dipisahkan dari tabel.
contoh
PEMASOK-2 PEMASOK-1
Contoh INF
BENTUK NORMAL KETIGA (Third Normal Form - 3NF) Bentuk normal 3NF terpenuhi jika telah memenuhi bentuk 2NF. Jika tidak ada atribut non primary key yang memiliki ketergantungan terhadap atribut non primary key yang lainnya (ketergantungan transitif).
Contoh (1) Tabel mahasis berikut ini memenuhi syarat 2NF, tetapi tidak memenuhi 3NF Karena masih terdapat atribut non primary key (yakni Kota dan Provinsi) yang memiliki ketergantungan terhadap atribut non primary key yang lain (yakni KodePos) : KodePos {Kota, Provinsi}
Contoh (2) Sehingga tabel tersebut perlu didekomposisi menjadi : Mahasiswa (NIM, NamaMhs, Jalan, KodePos) KodePos (KodePos, Provinsi, Kota)
Mahasiswa NIM NAMAMHS JALAN KODEPOS KodePos KODEPOS PROVINSI KOTA
Boyce-Codd Normal Form (BCNF) Bentuk BCNF terpenuhi dalam sebuah tabel, jika untuk setiap functional dependency terhadap setiap atribut atau gabungan atribut dalam bentuk: X Y maka X adalah super key. Tabel tersebut harus di-dekomposisi berdasarkan functional dependency yang ada, sehingga X menjadi super key dari tabel-tabel hasil dekomposisi. Setiap tabel dalam BCNF merupakan 3NF. Akan tetapi setiap 3NF belum tentu termasuk BCNF . Perbedaannya, untuk functional dependency X A, BCNF tidak membolehkan A sebagai bagian dari primary key.
BentukNormal TahapKeempat(4th Normal Form /4NF) Bentuk normal 4NF terpenuhi dalam sebuah tabel jika telah memenuhi bentuk BCNF, dan tabel tersebut tidak boleh memiliki lebih dari sebuah multivalued atribute. Untuk setiap multivalued dependencies (MVD) juga harus merupakan functional dependencies.
BentukNormal TahapKeempat(5th Normal Form /5NF) Bentuk normal 5NF terpenuhi jika tidak dapat memiliki sebuah loss less decomposition menjadi tabel-tabel yg lebih kecil. Jika 4 bentuk normal sebelumnya dibentuk berdasarkan functional dependency, 5NF dibentuk berdasarkan konsep join dependence. Yakni apabila sebuah tabel telah di-dekomposisi menjadi tabel-tabel lebih kecil, harus bisa digabungkan lagi (join) untuk membentuk tabel semula
Unnormalisasi Langkah pertama dalam melakukan normalisasi data adalah dengan membentuk contoh data tersebut diatas dengan membentuk unnormalisasi data.
Normal Pertama (1 NF) Bentuklah menjadi bentuk normal pertama dengan memisah-misahkan data pada atribut atribut yang tepat dan bernilai atomik, juga seluruh record / baris harus lengkap adanya. Bentuk relasi adalah flat file. Dengan normal pertama kita dapat membuat satu tabel yang terdiri dari 11 Atribut yaitu (No_Faktur, Kode_Supp, Nama_Supp, Kode_Brg, Nama_Brg, Tanggal, Jatuh_Tempo, Qty, Harga, Jumlah, Total ).
Normal Pertama (1 NF) Pada normal pertama tersebut masih terjadi banyak kelemahan, terutama pada proses ANOMALI insert, update dan delete berikut ini: a). Inserting / Penyisipan Kita tidak dapat memasukkan kode dan nama supplier saja tanpa adanya transaksi pembelian, sehingga supplier baru bisa dimasukkan kalau ada transaksi pembelian. b). Deleting / Penghapusan Bila satu record / baris di atas dihapus, misal nomor faktur 779, maka berakibat pada penghapusan data supplier S02 (Waras Sejati) padahal data tersebut masih diperlukan. c). Updating / Pengubahan Kode dan nama supplier terlihat ditulis berkali-kali, bila nama supplier berubah, maka di setiap baris yang ada harus dirubah, bila tidak menjadi tidak konsisten. Atribut jumlah seharusnya tidak perlu, karena setiap harga dikali kuantitas akan menghasilkan jumlah, sehingga hasilnya akan menjadi lebih konsisten. A02
Normal Kedua (2 NF) Bentuk normal kedua dengan melakukan dekomposisi relasi diatas menjadi beberapa relasi dan mencari kunci primer dari tiap-tiap relasi tersebut dan atribut kunci haruslah unik. Melihat permasalahan faktur di atas, maka dapat diambil beberapa kunci kandidat : ( No_Faktur, Kode_Supp, dan Kode_Brg ). Kunci kandidat tersebut nantinya bisa menjadi kunci primer pada relasi hasil dekomposisi.
Normal Kedua (2 NF) Relasi Supplier Relasi Barang Relasi Faktur Kode_Supp Nama_Supp S02 Waras Sejati G01 Medika jaya Medika Jaya Kode_Brg Nama_Brg Harga R01 Mixagripi 5000 A01 Sanaflux A02 Bodrexno 6000 Relasi Faktur No_Faktur Kode_Brg Kode_Supp Tanggal Jatuh Tempo Qty 779 R01 S02 02/02/2001 09/03/2001 10 998 A01 G01 07/02/2001 A02
Normal Kedua (2 NF) Pada bentuk normal kedua tersebut masih terjadi permasalahan yaitu pada relasi Faktur, yaitu : Atribut Qty pada relasi Faktur, tidak tergantung pada kunci utama, atribut tersebut bergantung fungsi pada Kode Brg dan no_faktur, hal ini dinamakan ketergatungan transitif dan haruslah dipilah menjadi dua relasi. Masih terdapat pengulangan, yaitu setiap kali satu faktur yang terdiri dari 3 macam barang maka 3 kali juga dituliskan no_faktur, tanggal, dan jatuh_tempo. Hal ini harus dipisahkan bila terjadi penggandaan tulisan berulang-ulang.
4. Bentuk Normal Ketiga (3 NF) Bentuk normal ketiga mempunyai syarat, setiap relasi tidak mempunyai atribut yang bergantung transitif, harus bergantung penuh pada kunci utama dan harus memenuhi bentuk normal kedua (2 NF). Untuk memenuhi bentuk normal ketiga (3 NF), maka pada relasi faktur harus didekomposisi (dipecah) lagi menjadi dua relasi yaitu relasi faktur dan relasi transaksi barang, sehingga hasilnya adalah sebagai berikut ini:
Relasi Faktur Relasi Transaksi Relasi Supplier Relasi Barang Kode_Supp Nama_Supp S02 Waras Sejati G01 Medika jaya Kode_Brg Nama_Brg Harga R01 Mixagripi 5000 A01 Sanaflux A02 Bodrexno 6000 Relasi Faktur No_Faktur Tanggal Jatuh Tempo Kode_Supp 779 02/02/2001 09/03/2001 S02 998 07/02/2001 G01 Relasi Transaksi No_Faktur Kode_Brg Qty 779 R01 10 998 A01 A02
unnormal
1 NF Tabel 1
Tips And Trik Gambarkan ketergantungan Fungsionalnya
2 NF Sudah memenuhi 1 NF tetapi belum memenuhi 2 NF karena atribut Bukan kunci belum sepenuhnya tergantung pada primary key {No-pem,Kode-Kota } kota No-pem Kota No-Pem, No-bar Jumlah
2 NF Tabel1 didekomposisi menjadi dua tabel yaitu tabel2 dan tabel3,sehingga atribut non primary key bergantung penuh pada primary key dan terpenuhi 2NF Tabel 1 Tabel 2 No-pem Kode-Kota No-pem Kota Kode-Kota Kota No-pem, No-bar Jumlah
Ketergantungan transitif 3 NF Ada ketergantungan transitif di tabel3, maka perlu di pisah menjadi tabel lebih kecil Tabel 3 Ketergantungan transitif No-pem Kode-Kota Kode-Kota Kota
3 NF Tabel4 No-pem Kode-kota Kode-ota Kota
Atribut Bernilai Ganda / Berulang Contoh 1. Bentuk Tidak Normal ( Unnormalized Form) Merupakan kumpulan data yang akan direkam, tidak ada keharusan mengikuti suatu format tertentu, dapat saja data tidak lengkap atau terduplikasi. Data dikumpulkan apa adanya tanpa format tertentu. Data dapat tidak lengkap atau terduplikasi Tabel Perpustakaan ini masih bersifat universal Perpustakaan No Nama Alamat No Buku1 Judul Buku1 Pengarang1 No Buku2 Judul Buku2 Pengarang2 No Buku3 Judul Buku3 Pengarang3 Jml Pjm Tgl Pinjam A001 Rahayu Kemuning 117 B001 Msword Ahmad 1 26/1/2000 A002 Iwan Kamboja 29 B002 Foxpro Pramono B005 Acces Anton 3 1/2/2000 A003 Tuti Nangka 20 7/2/2000 A004 Riyanto Kenanga 21 2 11/2/2000 A005 Kiki Merdeka 10 B006 Ws Atribut Bernilai Ganda / Berulang
Bentuk Normal Kesatu ( 1 NF / First Normal Form ) Setiap data dibentuk dalam flat file( file datar / rata ) Data dibentuk dalam satu record demi record dan nilai field adalah atomic value Tidak ada set atribut yang berulang2 / bernilai ganda ) Perpustakaan No Nama Alamat No Buku Judul Buku Pengarang Jml Pinjam Tgl Pinjam A001 Rahayu Kemuning 117 B001 Msword Ahmad 1 26/1/2000 A002 Iwan Kamboja 29 3 1/2/2000 B002 Foxpro Pramono B005 Acces Anton A003 Tuti Nangka 20 7/2/2000 A004 Riyanto Kenanga 21 2 11/2/2000 A005 Kiki Merdeka 10 B006 WS Perpustakaan No anggota Nama Alamat NoBuku JudulBuku Pengarang JumlahPinjam TglPinjam Data Duplikat belum ada field kunci yang unik
Bentuk Kedua ( 2 NF / Second Normal Form ) Telah Menenuhi kriteria Bentuk Normal 1 NF Atribut Bukan Kunci Haruslah Bergantung Secara Fungsi Pada Primary Key Primary Key Harus Sudah Ditentukan Dan Bersifat Unik, Serta Dapat Mewakili Atribut Lain Yang Menjadi Anggotanya Anggota Noanggota Nama Alamat A001 Rahayu Kemuning 117 A002 Iwan Kamboja 29 A003 Tuti Nangka 20 A004 Riyanto Kenanga 21 A005 Kiki Merdeka 10 Pinjam Buku No anggota Nobuku Jumlahpinjam tglpinjam A001 B001 1 26/1/2000 A002 3 1/2/2000 B002 A003 7/2/2000 A004 2 11/2/2000 B005 A005 B006 Nobuku Judulbuku Pengarang B001 Msword Ahmad B002 Foxpro Pramono B005 Acces Anton B006 Ws pramono Data Duplikat belum ada field kunci yang unik
Bentuk Normal Kedua ( 3 NF / Third Normal Form ) Telah Memenuhi kriteria Bentuk 2 NF Semau Atribut Bukan Primer Tidak Mempunyai Hubungan / Ketergantungan Transitif Atribut bukan kunci harus bergantung hanya pada primary key Anggota Noanggota Nama Alamat A001 Rahayu Kemuning 117 A002 Iwan Kamboja 29 A003 Tuti Nangka 20 A004 Riyanto Kenanga 21 A005 Kiki Merdeka 10 Pinjam Buku Noanggota Nobuku A001 B001 A002 B002 B005 A003 A004 A005 B006 Nobuku Judulbuku Pengarang B001 Msword Ahmad B002 Foxpro Pramono B005 Acces Anton B006 Ws Peminjaman Noanggota Jumlahpinjam Tglpinjam A001 1 26/1/2000 A002 3 1/2/2000 A003 7/2/2000 A004 2 11/2/2000 A005