Back to IF5101 Manajemen Data

Integrity Constraints dan Referential Integrity

Questions/Cues

  • Apa tujuan integrity constraints, dan apa contoh konkretnya?
  • Apa empat konstrain pada satu relasi (not null, primary key, unique, check)?
  • Apa beda unique dan primary key terkait nilai null?
  • Apa itu referential integrity, dan bagaimana foreign key dideklarasikan?
  • Apa yang terjadi saat konstrain referential dilanggar — dan apa alternatif cascade?

Reference Points

  • IF5101 — Relational Data Model Part 2 (Slides 12-13)
  • IF5101 — Database System Concepts: SQL (Slides 2.9, 2.14-2.21)
  • Silberschatz, Korth, Sudarshan — Database System Concepts 7th Ed., Chapter 4.4 (Integrity Constraints)

Tujuan Integrity Constraints

Integrity constraints menjaga basis data dari kerusakan tak sengaja — memastikan bahwa perubahan terotorisasi tidak menyebabkan hilangnya konsistensi data.

Contoh aturan bisnis yang diwujudkan sebagai konstrain:

  • Rekening giro harus punya saldo lebih dari $10.000,00.
  • Gaji pegawai bank minimal $4,00 per jam.
  • Seorang customer harus punya nomor telepon (non-null).

SQL mencegah setiap update yang melanggar sebuah integrity constraint.

Konstrain pada Satu Relasi

Konstrain yang dapat dideklarasikan di dalam statement create table:

KonstrainMakna
not nullMenyatakan atribut wajib diisi (tidak boleh null). Contoh: name varchar(20) not null.
primary key (A1, ..., An)Atribut-atribut ini membentuk primary key: unik dan otomatis not null.
unique (A1, ..., Am)Atribut-atribut ini membentuk candidate key (alternate key). Berbeda dari primary key: nilai null diperbolehkan.
check (P)Menetapkan predikat P yang harus dipenuhi setiap tuple dalam relasi.

Contoh check: memastikan semester bernilai salah satu dari empat musim:

create table section (
    course_id     varchar(8),
    sec_id        varchar(8),
    semester      varchar(6),
    year          numeric(4,0),
    building      varchar(15),
    room_number   varchar(7),
    time_slot_id  varchar(4),
    primary key (course_id, sec_id, semester, year),
    check (semester in ('Fall', 'Winter', 'Spring', 'Summer')),
    foreign key (course_id) references course,
    foreign key (building, room_number) references classroom (building, room_number)
);

Catatan default: jika tidak dideklarasikan, semua atribut boleh null, kecuali atribut yang menjadi bagian primary key.

Referential Integrity

Referential integrity memastikan bahwa nilai yang muncul pada satu relasi untuk sekumpulan atribut, juga muncul pada sekumpulan atribut di relasi lain.

Contoh: jika "Biology" muncul sebagai dept_name pada suatu tuple instructor, maka harus ada tuple department untuk "Biology".

Definisi formal: misalkan sekumpulan atribut, dan dua relasi yang memuat , dan adalah primary key . disebut foreign key dari jika untuk setiap nilai yang muncul di , nilai itu juga muncul di .

Deklarasi Foreign Key

Foreign key dispesifikasikan sebagai bagian dari create table:

foreign key (dept_name) references department
  • Secara default, foreign key mereferensikan atribut primary key dari tabel yang ditunjuk.
  • SQL mengizinkan daftar atribut relasi yang ditunjuk dispesifikasikan secara eksplisit:
foreign key (dept_name) references department (dept_name)

Contoh lengkap create table dengan konstrain integritas:

create table instructor (
    ID         char(5),
    name       varchar(20) not null,
    dept_name  varchar(20),
    salary     numeric(8,2),
    primary key (ID),
    foreign key (dept_name) references department
);

Cascading Actions

Saat konstrain referential-integrity dilanggar, prosedur normalnya adalah menolak aksi yang menyebabkan pelanggaran.

Alternatif — untuk kasus delete atau update — adalah cascade:

create table course (
    ...
    dept_name varchar(20),
    foreign key (dept_name) references department
        on delete cascade
        on update cascade,
    ...
);

Dengan on delete cascade, menghapus tuple department otomatis menghapus semua tuple course yang merujuknya. Selain cascade, dapat dipakai:

  • set null — nilai foreign key di baris yang merujuk di-set null.
  • set default — nilai foreign key di-set ke nilai default kolom.
flowchart TB
    D["DELETE / UPDATE pada baris di referenced relation<br/>yang masih dirujuk foreign key"]
    D --> Q{"Aksi rujukan pada FK?"}
    Q -->|"(default)"| REJ["Tolak aksi (error)"]
    Q -->|"on delete/update cascade"| CAS["Hapus/ubah juga baris yang merujuk"]
    Q -->|"set null"| SN["Set kolom FK di baris perujuk = null"]
    Q -->|"set default"| SD["Set kolom FK di baris perujuk = nilai default"]

Summary

Integrity constraints mencegah update terotorisasi merusak konsistensi data; SQL menolak setiap update yang melanggarnya. Konstrain satu relasi: not null (wajib isi), primary key (unik + otomatis not null), unique (candidate/alternate key, tetapi boleh null), dan check (P) (predikat yang wajib benar untuk setiap tuple). Default: atribut boleh null kecuali bagian primary key. Referential integrity: nilai foreign key di relasi harus muncul sebagai primary key di relasi ; dideklarasikan foreign key (...) references S, default menunjuk PK , bisa eksplisit references S (kolom). Pelanggaran referential (mis. hapus baris yang masih dirujuk) default ditolak; alternatif on delete/update cascade (ikut terhapus/berubah), set null, atau set default.