Penerapan Normalisasi dan Implementasi ke Database SQL Server

Kali ini saya akan menerangkan tahap-tahap penerapan normalisasi hingga menjadi sebuah ERD pada SQL server. Sering kali mahasiswa bertanya "bagaimana awal mulanya pembuatan sistem informasi" salah satu cara terbaik awal pembuatan sistem informasi adalah menanyakan kebutuhan user / pengguna terhadap sebuah sistem yang akan dibangun, biasanya kebutuhan ini awalnya dari sebuah "MASALAH" yang harus dicarikan solusi.

Bermodalkan interview kepada pengguna kebutuhan apa yang harus dibuat, biasanya kita mencari informasi proses bisnis dari perusahaan tersebut, sehingga akhirnya kita mengetahui format manual sistem yang berjalan   contohnya disini BON PEMBELIAN.


1. Bentuk Normal Pertama (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. Bentuk Normal Kedua (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. Bentuk Normal Ketiga (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).

Implementasi ERD (entity relationship diagram) pada contoh diatas, bisa dituangkan kedalam database MS SQL Server 2005, seperti terlihat pada gambar beikut ini :

Record Fisik database :


berikutnya saya akan menjelaskan pemakaian script sql server dalam membuat tabel-tabel diatas dan relasi yang terbentuk.

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
Terima kasih semoga bermanfaat

Komentar

  1. Balasan
    1. boleh saya minta relasi antar tabel yang sistem informasi koperasi? saya sudah download modulnya,terima kasih.

      Hapus
  2. Ilmu yang sangat berguna mas makasih atas share nya :)
    Niche blog :)

    BalasHapus
  3. Ijin lihat2 tutornya & saya ingin belajar..
    Sangat bermanfaat sekali pak :D
    Terima kasih

    BalasHapus
  4. Selamat malam Pak, Saya Lagi Belajar Integritas Data

    1. Bagaimana cara menjaga integritas data untuk atribut yg sering berubah seperti "Harga" pada tabel parts yang juga ada pada tabel transaksi_parts? Apakah dibuat seperi tabel Log untuk perubahan tabel2 master?

    2. Cara menentukan atribut2 yg perlu dimasukkan pada tabel relasi selain primary key nya?

    terimakasih

    BalasHapus
  5. boleh saya minta password persediaan_barang pak saya sudah download aplikasinya trima kasih...

    BalasHapus
  6. terima kasih gan atas ilmu nya .. thanks you

    BalasHapus
  7. Kita satu alumni.S2 STMIK.ERESHA.JUGA...keren.ini....

    BalasHapus
  8. makasih mas Dedy Rusdiansyah... sangat bermanfaat

    BalasHapus
  9. sangat membantu gan..

    BalasHapus
  10. If some one desires to be updated with latest
    technologies then he must be visit this web page and be up to date daily.

    BalasHapus
  11. Appreciate the recommendation. Let mee try it
    out.

    BalasHapus
  12. Ηell it's me, I am also visiting this web page regularly,
    this web site is truly fastidious and the people are actually sharing pleasant thoughts.

    BalasHapus
  13. What's Taking place i am new to this, I stumbled upon this I've found It absolutely helpful and it has
    helped me ouut loads. I am hoping to give a contribution & assist
    different customers likke its aided me. Good job.

    BalasHapus
  14. Hi, I desire to subscribe for this website to obtain most up-to-date updates, thus where can i do it please help out.

    BalasHapus
  15. I really like it whenever people come together and share ideas.
    Great blog, keep it up!

    BalasHapus

Posting Komentar