Normalisasi database merupakan suatu pendekatan sistematis untuk meminimalkan redundansi data pada suatu database agar database tersebut dapat bekerja dengan optimal. Jika anda seorang database administrator ketika terjadi sesuatu pada database seperti penurunan kinerja, mungkin anda akan ditanya apakah database tersebut telah di normalisasi?
Tujuan Normalisasi Database
Tujuan normalisasi database adalah untuk menghilangkan dan mengurangi redudansi data dan tujuan yang kedua adalah memastikan dependensi data (Data berada pada tabel yang tepat).
Jika data dalam database tersebut belum di normalisasi maka akan terjadi 3 kemungkinan yang akan merugikan sistem secara keseluruhan.
- INSERT Anomali : Situasi dimana tidak memungkinkan memasukkan beberapa jenis data secara langsung di database.
- DELETE Anomali: Penghapusan data yang tidak sesuai dengan yang diharapkan, artinya data yang harusnya tidak terhapus mungkin ikut terhapus.
- UPDATE Anomali: Situasi dimana nilai yang diubah menyebabkan inkonsistensi database, dalam artian data yang diubah tidak sesuai dengan yang diperintahkan atau yang diinginkan.https://rudiawan16.wordpress.com/normalisasi-database-beserta-pengertian-dan-contohnya/
Normalisasi Database
Normalisasi database terdiri dari banyak bentuk, dalam ilmu basis data ada setidaknya 9 bentuk normalisasi yang ada yaitu 1NF, 2NF, 3NF, EKNF, BCNF, 4NF, 5NF, DKNF, dan 6NF. Namun dalam prakteknya dalam dunia industri bentuk normalisasi ini yang paling sering digunakan ada sekitar 5 bentuk.
Normal Form
Data yang direkam dan dimasukkan secara mentah dalam suatu tabel pada bentuk ini sangat mungkin terjadi inkonsistensi dan anomali data
Contoh Normal Form
1. Normal Form (1NF)
Bentuk normal yang pertama atau 1NF mensyaratkan beberapa kondisi dalam sebuah database, berikut adalah fungsi dari bentuk normal pertama ini.
- Menghilangkan duplikasi kolom dari tabel yang sama.
- Buat tabel terpisah untuk masing-masing kelompok data terkait dan mengidentifikasi setiap baris dengan kolom yang unik (primary key).
Contoh Normalisasi Database 1NF
dari manual bon pembelian diatas kita dapat menjadi bentuk normal pertama dengan memisah-misahkan data pada atribut-atribut yang tepat dan bernilai atomik, juga seluruh record / baris harus lengkap adanya.
2. Normal form (2NF)
Syarat untuk menerapkan normalisasi bentuk kedua ini adalah data telah dibentuk dalam 1NF, berikut adalah beberapa fungsi normalisasi 2NF.
- Menghapus beberapa subset data yang ada pada tabel dan menempatkan mereka pada tabel terpisah.
- Menciptakan hubungan antara tabel baru dan tabel lama dengan menciptakan foreign key.
- Tidak ada atribut dalam tabel yang secara fungsional bergantung pada candidate key tabel tersebut.
Contoh normalisasi database bentuk 2NF
Bentuk normal kedua dengan melakukan dekomposisi tabel diatas menjadi beberapa tabel dan mencari kunci primer dari tiap-tiap tabel tersebut dan atribut kunci haruslah unik.
3. Normal Form (3NF)
Normalisasi database dalam bentuk 3NF bertujuan untuk menghilangkan seluruh atribut atau field yang tidak berhubungan dengan primary key. Dengan demikian tidak ada ketergantungan transitif pada setiap kandidat key. Syarat dari bentuk normal ketiga atau 3NF adalah :
- Memenuhi semua persyaratan dari bentuk normal kedua.
- Menghapus kolom yang tidak tergantung pada primary key.
Contoh Normalisasi Database Bentuk 3NF
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).
BCNF Boyce–Codd normal form
Merupakan sebuah teknik normalisasi database yang sering disebut 3.5NF, memiliki hubungan yang sangat erat dengan bentuk 3NF. Pada dasarnya adalah untuk menghandle anomali dan overlooping yang tidak dapat di handle dalam bentuk 3NF. Normalisasi database bentuk ini tergantung dari kasus yang disediakan, tidak semua tabel wajib di normalisasi dalam bentuk BCNF.
Membuat database Pembelian
create database pembelian use pembelian
Membuat table
create table kendaraan ( no_polisi char(10), warna char(20), merek char(30), tahun char(5), primary key (no_polisi) ) sp_help kendaraan create table mekanik ( mekanik_id char(5), nama_mekanik varchar(50), primary key (mekanik_id) ) sp_help mekanik create table parts ( kode_parts char(20), nama_parts varchar(50), harga int, primary key (kode_parts) ) sp_help parts create table bon_pembelian ( no_faktur char(10), tanggal datetime, no_polisi char(10), mekanik_id char(5), potongan int, primary key (no_faktur), constraint FK_nopolisi foreign key (no_polisi) references kendaraan(no_polisi), constraint FK_mekanik foreign key (mekanik_id) references mekanik(mekanik_id) ) sp_help bon_pembelian create table transaksi_parts ( no_faktur char(10), kode_parts char(20), qty int, harga int, discount int, primary key (no_faktur,kode_parts), constraint FK_nofaktur foreign key (no_faktur) references bon_pembelian(no_faktur), constraint FK_kodeparts foreign key (kode_parts) references parts(kode_parts) ) sp_help transaksi_parts
Mengisi data pada table
/*jawaban no.3 */ /** Isi data table kendaraan **/ INSERT INTO kendaraan VALUES('B3117LB','Biru','Supra X','2005') INSERT INTO kendaraan VALUES('B2121AA','Merah','Supra X','2005') /** isi data table mekanik **/ INSERT INTO mekanik VALUES('DDE','Djoko Dewanto') /** isi data table parts **/ INSERT INTO parts VALUES('20W501000CC','Oli Top 1 000cc',27000) INSERT INTO parts VALUES('SERV001','Engine Tune Up',25000) /** isi data table bon_pembelian **/ INSERT INTO bon_pembelian VALUES('05103214',GETDATE(),'B3117LB','DDE',2000) INSERT INTO bon_pembelian VALUES('05103215',GETDATE(),'B2121AA','DDE',0) /** isi data table transkasi_parts **/ INSERT INTO transaksi_parts (no_faktur,kode_parts,qty,harga,discount) select '05103214','20W501000CC',2,harga,1000 FROM parts where kode_parts='20W501000CC' INSERT INTO transaksi_parts (no_faktur,kode_parts,qty,harga,discount) select '05103214','SERV001',1,harga,2000 FROM parts where kode_parts='SERV001' INSERT INTO transaksi_parts (no_faktur,kode_parts,qty,harga,discount) select '05103215','SERV001',1,harga,2000 FROM parts where kode_parts='SERV001'
Menampilkan data dari table yang telah kita isi
/*jawaban no.3 */ select * from kendaraan select * from mekanik select * from parts select * from bon_pembelian select * from transaksi_parts /** Relasi antar table hingga terbentuk 1NF **/ select a.no_faktur, a.tanggal,a.no_polisi,e.warna,e.merek,e.tahun,a.mekanik_id,d.nama_mekanik, b.kode_parts,c.nama_parts,b.qty,b.harga,b.discount,(b.qty*b.harga)-(b.qty*b.discount) as jumlah,a.potongan, (select sum((qty*harga)-(qty*discount))-a.potongan from transaksi_parts where no_faktur=a.no_faktur) as total from bon_pembelian as a join transaksi_parts as b ON a.no_faktur=b.no_faktur join parts as c ON b.kode_parts=c.kode_parts join mekanik as d ON a.mekanik_id=d.mekanik_id join kendaraan as e ON a.no_polisi=e.no_polisi
Tidak ada komentar:
Posting Komentar