Anda di halaman 1dari 18

MAKALAH

DESAIN BASIS DATA


“Normalisasi dan Trigger”

DOSEN PENGAJAR
Yuvi Darmayunata, S.T, M.Kom

DISUSUN OLEH:
1. FELDIANSYAH PUTRA (1757201021)

PROGRAM STUDI SISTEM INFORMASI


FAKULTAS ILMU KOMPUTER
UNIVERSITAS LANCANG KUNING PEKANBARU
T.A 2018/2019
NORMALISASI

Pengertian Normalisasi
 Normalisasi merupakan sebuah teknik dalam logical desain sebuah basis data yang
mengelompokkan atribut dari suatu relasi sehingga membentuk struktur relasi yang baik
(tanpa redudansi).

 Normalisasi adalah proses pembentukan struktur basis data sehingga sebagian


besar ambiguity bisa dihilangkan.

Tujuan Normalisasi
 Untuk menghilang kerangkapan data

 Untuk mengurangi kompleksitas

 Untuk mempermudah pemodifikasian data

Proses Normalisasi
 Data diuraikan dalam bentuk tabel, selanjutnya dianalisis berdasarkan persyaratan
tertentu ke beberapa tingkat.

 Apabila tabel yang diuji belum memenuhi persyaratan tertentu, maka tabel tersebut perlu
dipecah menjadi beberapa tabel yang lebih sederhana sampai memenuhi bentuk yang
optimal.

Pentingnya Normalisasi

Suatu rancangan database disebut buruk jika :

 Data yang sama tersimpan di beberapa tempat (file atau record)

 Ketidakmampuan untuk menghasilkan infromasi tertentu

 Terjadi kehilangan informasi

 Terjadi adanya redudansi (pengulangan) atau duplikasi data sehingga memboroskan


ruang penyimpanan dan menyulitkan saat proses updating data

 Timbul adanya NULL VALUE.


 Kehilangan informasi bisa terjadi bila pada waktu merancang database
(melakukan proses dekomposisi yang keliru).

 Bentuk normalisasi yang sering digunakan adalah 1st NF, 2nd NF, 3rd NF,
dan BCNF.

1. Bentuk Tidak Normal (Unnormalized Form)

Bentuk ini merupakan kumpulan data yang akan direkam, tidak ada keharusan mengikukti
format tertentu, dapat saja data tidak lengkap atau terduplikasi. Data dikumpulkan apa adanya
sesuai dengan saat menginput.

Untuk mentransformasikan tabel yang belum ternomalisasi di atas menjadi tabel yang
memenuhi kriteria 1NF adalah kita harus merubah seluruh atribut yang multivalue menjadi
atribut single value, dengan cara menghilangkan repeating group pada tabel di atas.

Repeating Group (elemen data berulang) adalah (No_Property,


Alamat_Property,Tgl_Pinjam, Tgl_Selesai, Biaya, No_Pemilik, Nama_Pemilik)

2. Bentuk Normal Ke Satu (First Normal Form / 1 Nf)

Pada tahap ini dilakukan penghilangan beberapa group elemen yang berulang agar menjadi
satu harga tunggal yang berinteraksi di antara setiap baris pada suatu tabel, dan setiap atribut
harus mempunyai nilai data yang atomic (bersifat atomic value). Atom adalah zat terkecil yang
masih memiliki sifat induknya, bila terpecah lagi maka ia tidak memiliki sifat induknya.

Syarat normal ke satu (1-NF) antara lain:

1. setiap data dibentuk dalam flat file, data dibentuk dalam satu record demi satu record nilai dari
field berupa “atomic value”.

2. tidak ada set atribute yang berulang atau bernilai ganda.


3. telah ditentukannya primary key untuk tabel / relasi tersebut.

4. tiapatribut hanya memiliki satu pengertian.

Langkah pertama yang dilakukan pada Tabel Pelanggan Biaya (pada Tabel 9.3) tersebut
adalah menghilangkan elemen data yang berulang dengan data-data Pelanggan yang sesuai pada
setiap baris. Hasil dari tabel yang telah memenuhi bentuk normal pertama dapat dilihat pada
Tabel 9.4. kita dapat mengidentifikasi primary key untuk relasi Pelanggan_Biaya yang masih
memiliki composite key (No_Pelanggan, No_Property). Pada kasus ini kita akan memperoleh
primary key yang bersifat composite key. Relasi Pelanggan_Biaya dapat didefinisikan sebagai
berikut. Pelanggan_Biaya =(No_Pelanggan, No_Property, Nama, Alamat_Property, Tgl_Pinjam,
Tgl_Selesai, Biaya,No_Pemilik, Nama_Pemilik)

3. Bentuk Normal Ke Dua (Second Normal Form / 2 Nf)

Bentuk normal kedua didasari atas konsep full functional dependency (ketergantungan
fungsional sepenuhnya) yang dapat didefinisikan sebagai berikut. Jika A adalah atribut-atribut
dari suatu relasi, B dikatakan full functional dependency (memiliki ketergantungan fungsional
terhadap A, tetapi tidak secara tepat memiliki ketergantungan fungsional dari subset (himpunan
bagian) dari A.

Syarat normal kedua (2-NF) sebagai berikut.

1. Bentuk data telah memenuhi kriteria bentuk normal kesatu.

2. Atribute bukan kunci (non-key) haruslah memiliki ketergantungan fungsional sepenuhnya


(fully functional dependency) pada kunci utama / primary key.

Tabel Tabel Pelanggan Biaya dalam bentuk normal kedua (2-NF)


4. Bentuk Normal Ke Tiga (Third Normal Form / 3 Nf)

Walaupun relasi 2-NF memiliki redudansi yang lebih sedikit dari pada relasi 1-NF, namun
relasi tersebut masih mungkin mengalami kendala bila terjadi anomaly peremajaan (update)
terhadap relasi tersebut.

Misalkan kita akan melakukan update terhadap nama dari seorang Pemilik (pemilik), seperti
Durki (No_Pemilik: CO93), kita harus melakukan update terhadap dua baris dalam relasi
Property_Pemilik (lihat Tabel 9.5, (c) relasi Property_Pemilik). Jika kita hanya mengupdate satu
baris saja, sementara baris yang lainnya tidak, maka data didalam database tersebut akan
inkonsisten / tidak teratur. Anomaly update ini disebabkan oleh suatu ketergantungan transitif
(transitive dependency). Kita harus menghilangkan ketergantungan tersebut dengan melakukan
normalisasi ketiga (3-NF).

Syarat normal ketiga (Third Normal Form / 3 NF) sebagai berikut.

1. Bentuk data telah memenuhi kriteria bentuk normal kedua.

2. Atribute bukan kunci (non-key) harus tidak memiliki ketergantungan transitif, dengan kata
lain suatu atribut bukan kunci (non_key) tidak boleh memiliki ketergantungan fungsional
(functional dependency) terhadap atribut bukan kunci lainnya, seluruh atribut bukan kunci pada
suatu relasi hanya memiliki ketergantungan fungsional terhadap priamry key di relasi itu
saja. Seluruh atribut non-primary key pada relasi Pelanggan dan Biaya di atas terlihat memiliki
ketergantungan fungsional (functional dependency) terhadap primary key dari masing-masing
tabel / relasi. Relasi / tabel Pelanggan dan Biaya di atas tidak memiliki ketergantungan transitif
(transitive dependency), sehingga tabel tersebut telah memenuhi kriteria normal ketiga (3-NF).

Seluruh atribut non-primary key pada relasi Property_Pemilik di atas terlihat memiliki
ketergantungan fungsional (functional dependency) terhadap primary key, kecuali
Nama_Pemilik yang masih memiliki ketergantungan fungsional (functional dependency)
terhadap No_Pemilik. Inilah contoh ketergantungan dari transitif (transitive dependency), yang
terjadi ketika atribut non-primary key (Nama_Pemilik) bergantung secara fungsi terhadap satu
atau lebih atribut non-primary key lainnya (No_Pemilik). Kita harus menghilangkan
ketergantungan transitif (transitive dependency) tersebut dengan menjadikan relasi
Property_Pemilik menjadi 2 relasi / tabel dengan format / bentuk sebagai berikut.

· Relasi / Tabel Property_Untuk_Pemilik yang terdiri dari atribut-atribut:

Alamat_Property, Biaya, No_PemilikNo_property

{No_property sebagai primary key}

Dan relasi Pemilik yang terdiri dari atribut-atribut:

Nama_PemilikNo_Pemilik

{No_Pemilik sebagai primary key}

Hasil akhir normalisasi tabel Pelanggan_Biaya sampai ke bentuk normal ketiga adalah
sebagai berikut:

Seluruh atribut bukan kunci pada suatu relasi hanya memiliki ketergantungan fungsional
terhadap primary key di relasi itu saja.
TRIGGER

Pengertian Trigger

Dalam DBMS (Database Management System), trigger merupakan kumpulan script yang
berhubungan dengan table, view ataupun skema yang dijalankan secara otomatis ketika terdapat
event yang dijalankan. Event tersebut meliputi operasi yang biasa dilakukan dalam mengolah
database, seperti :

 DML (Data Manipulation Language) yang meliputi DELETE, INSERT atau UPDATE
 DDL (Data Definition Language) yang meliputi CREATE, ALTER atau DROP
 Operasi Database lainnya, seperti SERVERERROR, LOGON, LOGOFF, STARTUP
atau SHUTDOWN)

Secara sederhana, perintah untuk membuat trigger adalah sebagai berikut :

CREATE TRIGGER nama_trigger [BEFORE|AFTER]


[INSERT/UPDATE/DELETE]
ON nama_table
FOR EACH ROW
BEGIN
// trigger body
END;

Keterangan dari bentuk perintah umum dalam membuat trigger, yaitu :

 nama_trigger : nama trigger yang dibuat sesuai dengan karakteristik penamaan dalam
MySQL
 [BEFORE|AFTER] : menunjukkan waktu untuk mengeksekusi trigger secara otomatis,
apakah sebelum atau sesudah perubahan pada row data table. Jadi pilihannya adalah
AFTER atau BEFORE.
 [INSERT | UPDATE | DELETE] : digunakan untuk menentukan event yang
menyebabkan terjadinya trigger, pilIhan event tersebut terdiri dari INSER, UPDATE dan
DELETE.
 nama_table : menunjukkan table yang akan dilakukan trigger didalamnya
 trigger_body : menunjukkan statement perintah dalam MySQL yang akan otomatis
dijalankan jika event sedang aktif.
Pada umumnya, statement yang digunakan dalam trigger hanya berupa satu perintah saja.
Namun, jika Anda ingin membuat beberapa perintah di dalamnya, maka gunakan perintah
tersebut ke dalam blok BEGIN … END. Penggunaan trigger terjadi ketika adanya perubahan
yang terjadi pada record table. Dengan begitu, terdapat Anda perlu menambah referensi ke
record tersebut, yaitu OLD dan NEW. OLD menandakan referensi record sebelum terjadinya
perubahan, sedangkang OLD menandakan referensi setelah terjadinya perubahan.

Fungsi Trigger

Biasanya dalam relasional database, trigger dapat ditemui ketika melakukan perintah
eksekusi table. Hal itu menjadi lebih bermanfaat trigger menjaikan penulisan pemrograman yang
sederhana dan dapat menjaga informasi agar tetap konsisten dalam database. Selain itu, terdapat
beberapa fungsi trigger yang akan dijelaskan dibawah ini.

1. Integritas Data

Dengan adanya trigger, Anda dapat mempertahankan integritas table yang terdapat dalam
database. Sebab, Anda dapat melakukan operasi-operasi yang berkaitan dengan pengolahan
database, seperti INSERT, UPDATE dan DELETE

2. Mencegah Error

Trigger dalam MySQL dapat mencegah terjadinya error dalam pengoperasian data. Jika
terjadi error dalam pendefinisian trigger, error tersebut tidak mengganggu trigger yang sedang
berjalan.

3. Membuat Tugas Kerja menjadi Terjadwal


Ketika trigger telah dijalankan, maka Anda dapat menggunakan berbagai bahasa
pemrograman tanpa harus bingung bagaimana cara mengaksesnya.

4. Mencegah Proses Transaksi yang Tidak Sah

Dalam praktiknya, biasa trigger digunakan untuk melakukan proses transaksi. Anda dapat
menyimpan record transaksi tersebut ke table lain (history) tanpa harus takut jika data tersebut
di-update atau delete. Semua perubahan yang terjadi juga dapat diacak berdasarkan waktu
pembuatannya.

Contoh Trigger

Setelah Anda memahami pengertian dari trigger beserta fungsinya, Penulis akan memberikan
beberapa contoh penerapan dari penggunaan trigger dalam database. Pada umumnya¸ trigger
dapat diaktivasi menggunakan event INSERT, UPDATE dan DELETE. Untuk lebih jelasnya,
dibawah ini akan dijelaskan mengenai beberapa contoh penerapan dari event tersebut. Namun,
Anda harus membuat beberapa tabel dalam database terlebih dahulu.

1. Table Penjualan

CREATE TABLE Penjualan(


id_jual INT(8) NOT NULL AUTO_INCREMENT,
kode_pelanggan VARCHAR(10) NOT NULL,
kode_brg VARCHAR(5),
nama_barang VARCHAR(35),
jumlah INT(6),
harga INT(12),
PRIMARY KEY (id_jual);

2. Table Pembelian

CREATE TABLE Pembelian (


id_beli INT(8) NOT NULL AUTO_INCREMENT,
kode_brg VARCHAR(5),
nama_barang VARCHAR(35),
jumlah INT(6),
harga INT(12),
PRIMARY KEY (id_beli);
3. Table Barang

CREATE TABLE Barang(


id_brg INT(8) NOT NULL AUTO_INCREMENT,
nama_barang VARCHAR(35),
jumlah INT(6),
PRIMARY KEY (id_brg);

Berikut penggunaan trigger yang perlu anda ketahui:

a. Trigger BEFORE INSERT

Trigger ini memiliki fungsi untuk menjalankan tugas trigger sebelum proses penambahan
(insert) data dalam suatu table dilakukan. Berikut sintaks trigger dalam MySQL :

CREATE TRIGGER nama_trigger


BEFORE INSERT
ON nama_table FOR EACH ROW
BEGIN
// deklarasi variable
END;

Sebagai contoh, misalkan Anda ingin memeriksa operasi penambahan data barang yang baru
dalam table Barang. Jika barang tersebut telah dimasukkan sebelumnya maka akan mucul
peringatan “ID Barang sudah ada”. Maka perintah sederhananya adalah :

CREATE TRIGGER stok_barang


BEFORE INSERT
ON Barang FOR EACH ROW
BEGIN
IF NOT EXIST (SELECT id_brg FROM Barang WHERE id_brg = NEW.id_brg)
THEN
SET NEW.nama_barang = NEW.nama_barang, NEW.jumlah = NEW.jumlah;
ELSE
SET @status = CONCAT(‘ID ‘, NEW.id_brg, ‘ sudah ada’);
END IF;

b. Trigger AFTER INSERT

Trigger ini memiliki fungsi untuk menjalankan tugas trigger setelah proses penambahan
(insert) data dalam suatu table dilakukan. Berikut sintaks trigger dalam MySQL :
CREATE TRIGGER nama_trigger
AFTER INSERT
ON nama_table FOR EACH ROW
BEGIN
// deklarasi variable
END;

Sebagai contoh, ketika ingin menambahkan data barang yang sudah terjual, maka otomatis
jumlah pada table Barang akan berkurang. Maka perintah untuk trigger dalam MySQL adalah

CREATE TRIGGER jual_barang


AFTER INSERT
ON Penjualan FOR EACH ROW
BEGIN
UPDATE barang
SET jumlah = NEW.jumlah
WHERE id_brg = NEW.id_brg,
END;

c. Trigger BEFORE UPDATE

Trigger ini memiliki fungsi untuk menjalankan tugas trigger sebelum proses pengubahan
(update) data dalam suatu table dilakukan. Berikut sintaks trigger dalam MySQL :

CREATE TRIGGER nama_trigger


BEFORE UPDATE
ON nama_table FOR EACH ROW
BEGIN
// deklarasi variable
END;

Misalkan dalam tabel Barang dengan Id_brg = ‘BRG001’ dengan nama_barang = “Piring”.
Dengan menggunakan perintah BEFORE UPDATE ini nama barang akan diubah menjadi
“Gelas”. Maka perintah yang sesuai untuk kasus diatas adalah :

CREATE TRIGGER barang_baru


BEFORE UPDATE ON BARANG FOR EACH ROW
BEGIN
UPDATE Barang
SET nama_barang = ‘Gelas’
WHERE id_brg =’BRG001′;SET @status = CONCAT(‘Data Barang dengan Id ‘,
NEW.id_brg, ‘ sudah diperbarui’);

END;

d. Trigger AFTER DELETE

Trigger ini memiliki fungsi untuk menjalankan tugas trigger sebelum proses penghapusan
(delete) data dalam suatu table dilakukan. Berikut sintaks trigger dalam MySQL :

CREATE TRIGGER nama_trigger


AFTER DELETE
ON nama_table FOR EACH ROW
BEGIN
// deklarasi variable
END;

Misalnya, Anda ingin menghapus record Barang dengan id_brg = ‘BRG001’, nama_barang =
‘ Gelas’. Maka otomatis, stok barang akan bertambah sesuai dengan data barang yang telah
dihapus. Berikut mengenai sintaks untuk AFTER DELETE tersebut :

CREATE TRIGGER barang_baru


BEFORE UPDATE ON BARANG FOR EACH ROW
BEGIN
UPDATE Barang
SET jumlah = jumlah + OLD.jumlah
WHERE id_brg = OLD.jumlah;
END;

https://rifalfahrudin.wordpress.com/2015/09/27/normalisasi-database-1nf-2nf-3nf/

https://huntershare.wordpress.com/category/pengertian-normalisasi-data-base-dan-
contohnya/

https://www.nesabamedia.com/pengertian-trigger/
TRIGGER DATABASE AKADEMIK
Saya terlebih dahulu menambah field status di tabel Mahasiswa dan membuat tabel Status
Mahasiswa. Di Tabel Status Mahasiswa saya membuat Trigger. Trigger yang saya buat yaitu
Insert,Update, dan Delete pada field Status di tabel Mahasiswa yang insert,Update dan Delete
berasal dari tabel Status Mahasiswa. Misalnya ketika saya menginput Status “Aktif” ditabel
Status Mahasiswa maka otomatis Status di tabel Mahasiswa berubah “Aktif”.

a. Insert

 File/Tabel mahasiswa awal

 Menambah field status

 File/Tabel mahasiswa setelah menambah field status


 Membuat table Status Mahasiswa

 Membuat Trigger Insert pada tabel Status Mahasiswa

 Menginput nilai pada tabel Status Mahasiswa

 Tampilan tabel Status Mahasiswa

 Tampilan tabel Mahasiswa yg Statusnya otomatis berubah


 Menambah Waktu edit (Jika Diinginkan)

b. Update

 Tampilan tabel Mahasiswa Statusnya masih “aktif”

 Membuat Trigger Update di Tabel Status Mahasiswa

 Update Status di tabel Status Mahasiswa yg awalnya ”aktif” menjadi “tidak aktif”
 Tampilan tabel Status Mahasiswa satelah di Update

 Tampilan tabel Mahasiswa setelah di Update

c. Delete

 Insert 1 nilai lagi di tabel Status Mahasiswa dan Tampilan Status Mahasiswa
 Tampilan tabel Mahasiswa

 Membuat Trigger Delete di tabel Status Mahasiswa

 Delete 1 nilai di tabel Status Mahasiswa

 Tampilan tabel Status Mahasiswa setelah 1 nilai dihapus


 Tampilan tabel Mahasiswa setelah di Delete, Status kembali “kosong” atau Null”

Anda mungkin juga menyukai