Constraint (batasan) merupakan aturan yang diberikan pada suatu tabel agar data yang dimasukkan terjamin validitasnya. Batasan integritas akan menjaga basis data dari kerusakan yang terjadi secara tidak sengaja dengan memastikan bahwa perubahan yang diperbolehkan tidak mengakibatkan terjadinya inkonsistensi data.
Constraint dapat diklasifikasikan sesuai dengan elemen dari basis data yang bersangkutan menjadi sebagai berikut.
KLASIFIKASI KONSTRAIN
Constraint tersebut intra-relasional apabila batasan (constraint) terpenuhi dalam satu tabel. Constraint ini sendiri dapat dibedakan menjadi 2 yaitu: tuple constraint dan domain constraint.
Tuple constraint merupakan constraint yang bisa dievaluasi secara independen pada setiap tuple-nya.
Domain constraint atau sering disebut sebagai value constraint merupakan suatu constraint dengan referensi kepada nilai (value) tertentu. Implementasi dari penggunaan domain constraint pada SQL adalah penggunaan klausa check
Suatu constraint dikatakan inter-relasional apabila melibatkan lebih dari satu relasi. Bentuk dari constraint ini adalah referential integrity
Ada beberapa bentuk dari integrity constraint yaitu domain constraint, referential integrity, assertion, trigger.
Domain Constraint
Domain constraint merupakan bentuk integrity constraint yang paling sederhana. Setiap ada pemasukan data baru, maka akan langsung diperiksa oleh sistem. Domain constraint diterapkan pada atribut basis data sehingga sangat dimungkinkan beberapa atribut memiliki domain yang sama.
Untuk menciptakan domain baru dapat digunakan perintah create domain. Sebagai contoh adalah pada perintah:
- create domain Dollar numeric (12,2)
- create domain Pound numeric (12,2)
Pada bahasa SQL juga terdapat klausa check yang bisa digunakan untuk memeriksa suatu kondisi nilai tertentu yang diinginkan. Berikut adalah contoh penggunaan klausa check pada perintah create domain.
Create domain HourlyWage numeric(5,2) constraint wage-value-test check (value>=4.00)
Perintah tersebut akan mengecek nilai dari domain HourlyWage harus ≥ 4.00
REFERENTIAL INTEGRITY
Integritas referensial adalah seperangkat aturan yang mengatur hubungan antara kunci primer dengan kunci tamu milik tabel-tabel yang berada dalam suatu basis data relasional untuk menjaga konsistensi data .
Tujuan integritas referensial sendiri adalah untuk menjamin dan memastikan agar entitas dalam suatu tabel yang menunjuk ke suatu pengenal unik pada suatu baris di tabel lain benar-benar menunjuk pada nilai yang memang ada. Sehingga kejadian seperti pada ilustrasi seperti gambar diobawah tidak terjadi
SI dg DBMS Terpisah
Berdasarkan operasi yang dilakukan, integritas referensial dapat dibedakan sebagai berikut:
Integritas referensial membuat ketiga operasi di atas dapat dilaksanakan pada tabel yang memiliki relasi. Sehingga proses penghapusan ataupun peremajaan suatu kolom juga akan terjadi pada kolom tabel lain yang mempunyai referensi dengannya.
Dalam bahasa Data Definition Language SQL, kunci primer, kunci kandidat, dan kunci tamu, dapat dispesifikasikan sebagai bagian dari pernyataan SQL create table. Kunci kandidat merupakan kunci yang secara unik dapat digunakan untuk mengidentifikasi suatu baris dalam tabel. Berikut adalah salah satu contoh DDL dari pembuatan tabel mata_kuliah.
create table mata_kuliah
(kode_mk char(6) not null,
mata_kuliah varcar(25),
nip char(9),
primary key (kode_mk),
foreign key (nip) references dosen on delete cascade)
ASSERTION
Penggunaan constraint berupa kunci primer dan kunci tamu pada deklarasi awal tabel merupakan salah satu cara untuk memelihara integritas data. Domain constraint dan Referential integrity constraint merupakan salah satu bentuk dari assertion.
Pada beberapa basis data penggunaan kunci primer dan kunci tamu sudah cukup untuk menjaga integritas data. Tetapi pada beberapa kasus basis data diperlukan suatu constraint ataupun aturan yang lebih baik.
Metode lain yang sering digunakan dalam pemeliharaan integritas adalah assertion dan trigger
Assertion digunakan untuk mengekspresikan suatu kondisi basis data sesuai dengan yang kita inginkan. Seperti halnya prosedur, assertion diberikan nama tertentu sehingga bisa dibatalkan apabila ada kondisi tertentu yang menuntut perubahan struktur basis data. Syntax dari definisi assertion adalah sebagai berikut.
create assertion AssertionName check (predicate)
Ketika assertion dibuat, maka sistem akan melakukan pengecekan validitas dari assertion yang dibuat. Jika assertion yang dibuat valid maka perubahan terhadap basis data hanya akan berlaku ketika tidak menyalahi assertion yang telah dibuat.
Pengecekan validitas tersebut akan memakan biaya yang besar terutama apabila assertion yang dibuat cukup rumit, sehingga penggunaan dan pembuatan assertion harus dilakukan dengan hati-hati
Karena itu tidak banyak developer sistem dan DBMS yang menyediakan fasilitas ini.
Create assertion IC13 check
( ( Select min (s.status) from s ) > 4 );
Create assertion IC18 check
(not exists ( select * from P
where not ( P.Weight > 0.0 )));
Create assertion IC99 check
( not exists ( select * from P
where P.color = ‘Red’
and P.city <> ‘London’));
Create assertion IC49 check
( not exists ( select * from P, SP
where P.P# = SP.P#
and ( P.weight * SP.Qty) > 20000));
Create assertion IC95 check
( not exists ( select * from S, SP
where S.status < 20
and S.S# = SP.S#
and SP.Qty > 500 ));
TRIGGER
Trigger merupakan pernyataan yang dieksekusi secara otomatis oleh sistem basis data sebagai akibat dari perubahan basis data. Ada beberapa persyaratan yang harus dipenuhi untuk merancang mekanisme trigger, yaitu:
Menspesifikasikan kapan trigger harus dieksekusi.
Menspesifikasikan perintah yang akan dilaksanakan ketika trigger dijalankan
Trigger sebenarnya tidak lain adalah suatu pemrograman PL/SQL yang mirip dengan procedure. Perbedaan mendasar dengan procedure adalah aktivasinya, dimana procedure dapat dipanggil secara langsung sementara trigger dipanggil melalui pemicu yang berupa bahasa DML (Data Manipulation Language). Bahasa DML yang digunakan sebagai pemicu adalah insert, update dan delete.
CONTOH SQL CONSTRAINT
Constraint dapat diklasifikasikan sesuai dengan elemen dari basis data yang bersangkutan menjadi sebagai berikut.
KLASIFIKASI KONSTRAIN
Constraint tersebut intra-relasional apabila batasan (constraint) terpenuhi dalam satu tabel. Constraint ini sendiri dapat dibedakan menjadi 2 yaitu: tuple constraint dan domain constraint.
Tuple constraint merupakan constraint yang bisa dievaluasi secara independen pada setiap tuple-nya.
Domain constraint atau sering disebut sebagai value constraint merupakan suatu constraint dengan referensi kepada nilai (value) tertentu. Implementasi dari penggunaan domain constraint pada SQL adalah penggunaan klausa check
Suatu constraint dikatakan inter-relasional apabila melibatkan lebih dari satu relasi. Bentuk dari constraint ini adalah referential integrity
Ada beberapa bentuk dari integrity constraint yaitu domain constraint, referential integrity, assertion, trigger.
Domain Constraint
Domain constraint merupakan bentuk integrity constraint yang paling sederhana. Setiap ada pemasukan data baru, maka akan langsung diperiksa oleh sistem. Domain constraint diterapkan pada atribut basis data sehingga sangat dimungkinkan beberapa atribut memiliki domain yang sama.
Untuk menciptakan domain baru dapat digunakan perintah create domain. Sebagai contoh adalah pada perintah:
- create domain Dollar numeric (12,2)
- create domain Pound numeric (12,2)
Pada bahasa SQL juga terdapat klausa check yang bisa digunakan untuk memeriksa suatu kondisi nilai tertentu yang diinginkan. Berikut adalah contoh penggunaan klausa check pada perintah create domain.
Create domain HourlyWage numeric(5,2) constraint wage-value-test check (value>=4.00)
Perintah tersebut akan mengecek nilai dari domain HourlyWage harus ≥ 4.00
REFERENTIAL INTEGRITY
Integritas referensial adalah seperangkat aturan yang mengatur hubungan antara kunci primer dengan kunci tamu milik tabel-tabel yang berada dalam suatu basis data relasional untuk menjaga konsistensi data .
Tujuan integritas referensial sendiri adalah untuk menjamin dan memastikan agar entitas dalam suatu tabel yang menunjuk ke suatu pengenal unik pada suatu baris di tabel lain benar-benar menunjuk pada nilai yang memang ada. Sehingga kejadian seperti pada ilustrasi seperti gambar diobawah tidak terjadi
SI dg DBMS Terpisah
Berdasarkan operasi yang dilakukan, integritas referensial dapat dibedakan sebagai berikut:
- penambahan (insert)
- penghapusan (delete)
- peremajaan (update)
Integritas referensial membuat ketiga operasi di atas dapat dilaksanakan pada tabel yang memiliki relasi. Sehingga proses penghapusan ataupun peremajaan suatu kolom juga akan terjadi pada kolom tabel lain yang mempunyai referensi dengannya.
Dalam bahasa Data Definition Language SQL, kunci primer, kunci kandidat, dan kunci tamu, dapat dispesifikasikan sebagai bagian dari pernyataan SQL create table. Kunci kandidat merupakan kunci yang secara unik dapat digunakan untuk mengidentifikasi suatu baris dalam tabel. Berikut adalah salah satu contoh DDL dari pembuatan tabel mata_kuliah.
create table mata_kuliah
(kode_mk char(6) not null,
mata_kuliah varcar(25),
nip char(9),
primary key (kode_mk),
foreign key (nip) references dosen on delete cascade)
ASSERTION
Penggunaan constraint berupa kunci primer dan kunci tamu pada deklarasi awal tabel merupakan salah satu cara untuk memelihara integritas data. Domain constraint dan Referential integrity constraint merupakan salah satu bentuk dari assertion.
Pada beberapa basis data penggunaan kunci primer dan kunci tamu sudah cukup untuk menjaga integritas data. Tetapi pada beberapa kasus basis data diperlukan suatu constraint ataupun aturan yang lebih baik.
Metode lain yang sering digunakan dalam pemeliharaan integritas adalah assertion dan trigger
Assertion digunakan untuk mengekspresikan suatu kondisi basis data sesuai dengan yang kita inginkan. Seperti halnya prosedur, assertion diberikan nama tertentu sehingga bisa dibatalkan apabila ada kondisi tertentu yang menuntut perubahan struktur basis data. Syntax dari definisi assertion adalah sebagai berikut.
create assertion AssertionName check (predicate)
Ketika assertion dibuat, maka sistem akan melakukan pengecekan validitas dari assertion yang dibuat. Jika assertion yang dibuat valid maka perubahan terhadap basis data hanya akan berlaku ketika tidak menyalahi assertion yang telah dibuat.
Pengecekan validitas tersebut akan memakan biaya yang besar terutama apabila assertion yang dibuat cukup rumit, sehingga penggunaan dan pembuatan assertion harus dilakukan dengan hati-hati
Karena itu tidak banyak developer sistem dan DBMS yang menyediakan fasilitas ini.
Create assertion IC13 check
( ( Select min (s.status) from s ) > 4 );
Create assertion IC18 check
(not exists ( select * from P
where not ( P.Weight > 0.0 )));
Create assertion IC99 check
( not exists ( select * from P
where P.color = ‘Red’
and P.city <> ‘London’));
Create assertion IC49 check
( not exists ( select * from P, SP
where P.P# = SP.P#
and ( P.weight * SP.Qty) > 20000));
Create assertion IC95 check
( not exists ( select * from S, SP
where S.status < 20
and S.S# = SP.S#
and SP.Qty > 500 ));
TRIGGER
Trigger merupakan pernyataan yang dieksekusi secara otomatis oleh sistem basis data sebagai akibat dari perubahan basis data. Ada beberapa persyaratan yang harus dipenuhi untuk merancang mekanisme trigger, yaitu:
Menspesifikasikan kapan trigger harus dieksekusi.
Menspesifikasikan perintah yang akan dilaksanakan ketika trigger dijalankan
Trigger sebenarnya tidak lain adalah suatu pemrograman PL/SQL yang mirip dengan procedure. Perbedaan mendasar dengan procedure adalah aktivasinya, dimana procedure dapat dipanggil secara langsung sementara trigger dipanggil melalui pemicu yang berupa bahasa DML (Data Manipulation Language). Bahasa DML yang digunakan sebagai pemicu adalah insert, update dan delete.
CONTOH SQL CONSTRAINT
Kita dapat menggunakan constraint
untuk membatasi tipe data yang disimpan
ke dalam tabel. Constraint
dapat digunakan pada
saat
pertama kali membuat table dengan statement CREATE TABLE atau setelah
tabel dibuat dengan perintah statement
ALTER TABLE.
Umumnya jenis Constraint mengandung:
· NOT NULL Constraint:
untuk memastikan kolom dalam
tabel tidak berisi nilai NULL.
CREATE TABLE Pelanggan (Kode Integer NOT NULL, Nama Varchar (30) NOT NULL, Alamat Varchar(30));
· DEFAULT
Constraint: menentukan nilai default pada kolom saat
data diinsert pada tabel.
CREATE
TABLE Jurnal_Detail
(Kode char(4) NOT NULL,
Keterangan varchar (30),
Debet Numeric DEFAULT 0,
Kreditt
Numeric DEFAULT
0));
· UNIQUE Constraint:
untuk memastikan tidak
ada data ganda
dalam kolom.
CREATE
TABLE Pelanggan
(Kode Integer UNIQUE, Nama Varchar (30), Alamat Varchar(30));
· CHECK
Constraint: memastikan data
dalam kolom memenuhi kriteria yang ditentukan.
CREATE
TABLE Pelanggan
(Kode integer CHECK (Kode
> 0), Nama varchar
(30),
Alamat
varchar(30));
Pada contoh di sini kriteria field Kode harus lebih
besar dari 0, jika data dientry lebih kecil
dari 0 akan terjadi error dan data
tidak akan dapat disimpan ke table.
· Primary Key
Constraint: digunakan untuk mengidentifikasi secara unik pada baris.
MySQL:
CREATE
TABLE Pelanggan
(Kode integer,
Nama varchar(30),
Alamat
varchar(30),
PRIMARY
KEY (Kode));
Oracle:
CREATE
TABLE Pelanggan (Kode
integer PRIMARY KEY, Nama varchar(30),
Alamat
varchar(30));
SQL Server:
CREATE
TABLE Pelanggan
(Kode integer PRIMARY
KEY, Nama varchar(30),
Alamat
varchar(30));
· Foreign
Key
Constraint: digunakan untuk integritas
referensi dari data.
MySQL:
CREATE TABLE ORDERS
(Kode_Order integer,
Tgl_Order date,
Kode_Pelanggan integer, Jumlah double,
Primary Key (Order_ID),
Foreign
Key
(Kode_Pelanggan) references Pelanggan(Kode));
Oracle:
CREATE
TABLE ORDERS (Kode_Order
integer primary
key,
Tgl_Order date,
Kode_Pelanggan integer
references Pelanggan(Kode), Jumlah double);
SQL Server:
CREATE
TABLE ORDERS
(Kode_Oder integer primary key,
Tgl_Order datetime,
Kode_Pelanggan integer
references Pelanggan(Kode), Jumlah double);
