author-pic

Ferry S

An ISTJ, Type 5, Engineer, Gamer, and Thriller-Movies-Lover
ACID pada Database: Consistency
Tuesday Jan 24th, 2023 07:19 pm2 mins read
Tips & Tutorial, Programming Principle
ACID pada Database: Consistency
Source: 123 RF - Consistency Is Key

Consistency adalah akronim kedua dari ACID. Consistency adalah bahasan paling general dibanding keyword ACID lainnya. Consistency maksudnya adalah database harus memastikan data yang disimpan sesuai dengan rules yang dibuat, meliputi constraints, trigger, cascades, atau kombinasi sejenisnya. Contoh sederhananya misalkan kita memiliki data dengan rules seperti berikut:

  • Table Product dengan kolom id, product_code, name, category, created_date;
  • Kolom product_code tiap baris harus unik;
  • Kolom category memiliki pilihan: Baju, Celana, dan Sepatu;
  • Tiap menambahkan data product baru, akan menyimpan tanggal pembuatan pada kolom created_date;

Consistency Failure

Contoh pelanggaran Consistency berdasarkan rules di atas adalah seperti berikut:

Table Product

id product_code name category created_date
1 PRD-001 jeans biru celana 2022-01-01 00:00:00
2 PRD-001 polo merah kemeja null

Pada tabel di atas, kolom product_code tidak unik. Pada kolom category terdapat value yang tidak sesuai rules yang ditentukan. Value created_date juga tidak terbuat secara otomatis.

Consistency Solution

Untuk itu kita perlu membuat constraint dan trigger untuk memastikan semua business rules yang kita buat bisa diterapkan pada tabel di atas.

Kita perlu menambahkan constraints Unique Key pada kolom product_code.

alter table "product"
	add constraint product_product_code_pk
		unique (product_code);

Kita juga perlu menambahkan trigger yang akan menyimpan tanggal pembuatan setiap ada data baru dibuat. Berikut adalah contohnya ketika menggunakan PostgreSql.

CREATE OR REPLACE FUNCTION update_created_date_column()
    RETURNS TRIGGER AS
$$
BEGIN
    new.created_date = now();
    RETURN new;
END;
$$ LANGUAGE 'plpgsql';

CREATE TRIGGER date_creation_at_insert
    BEFORE INSERT
    ON "product"
    FOR EACH ROW EXECUTE PROCEDURE update_created_date_column();

Terakhir kita akan membuat table product_category yang nantinya akan direferensikan dengan kolom category_id pada table product agar value di kolom category tidak bisa diisi sembarangan.

Table Product Category

id name
1 Baju
2 Celana
3 Sepatu

Sekarang semuanya sudah sesuai dengan rules yang dibuat. Database akan menghandle rules tersebut setiap kita melakukan transaksi. Jika ada yang ga sesuai rules maka akan divalidasi oleh database.

Table Product

id product_code name category_id created_date
1 PRD-001 jeans biru 2 2022-01-01 00:00:00
2 PRD-002 polo merah 1 2022-01-01 00:00:00

Untuk melihat tulisan terkait ACID lainnya bisa dibaca pada link berikut: