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 | baju SD | 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();
Untuk MySql command-nya seperti ini:
CREATE TRIGGER date_creation_at_insert
BEFORE INSERT
ON product
FOR EACH ROW
BEGIN
SET new.created_date = now();
END;
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 | baju SD | 1 | 2022-01-01 00:00:00 |
Untuk melihat tulisan terkait ACID lainnya bisa dibaca pada link berikut: