画像ツール一覧

整合性

Integrity

データベース

データベース内に保存されているデータに矛盾や欠落がなく、システム全体を通して一貫して正しい状態(ルールや制約を満たした状態)が保たれていること。

🐾 猫で例えると?

こちらを見つめる茶トラの顔とひげのアップ
茶トラの名簿とごはんの記録も、食い違いなくそろえたい

こちらを見つめる茶トラの情報を、猫の名簿に登録すると考えてみましょう。「同じ猫IDが二つない」「ごはんの記録は名簿にいる猫を指す」と約束を決めます。この約束をすべての記録が守り、食い違いがない状態がデータの整合性です。

🐾 PR

💻 データベース開発における「整合性」とは?

整合性を考えるときは、まず業務上のルールを決めます。例えば、在庫の範囲でのみ販売するECサイトなら、注文によって在庫が負になる状態を防ぐ必要があります。振込を一組の更新として扱うなら、出金だけが確定して入金が反映されない状態も避けます。こうしたルールに反する状態がデータ不整合です。

これらの不整合を防ぐため、データベース管理システム(RDBMS)には、データが常に正しい状態を保つための強固なルール(制約)を設ける機能が備わっています。テーブル設計の段階でこれらのルールを正しく定義することが、エンジニアの腕の見せ所となります。

⚠️ 整合性を守る仕組みと注意点

データの整合性は、主にデータベース側の「制約(Constraint)」と、アプリケーション側の「トランザクション制御」の2段構えで守られます。

外部キー制約と参照整合性

社員の部署IDが部署テーブルを参照する例では、外部キーが存在しないIDの登録を防ぎます。ただしNULLを許す列なら未所属を表現できますし、参照先を削除した際の動作も制約の指定によって変わります。

-- PostgreSQLの検証用DBでの例
CREATE TABLE departments (id INT PRIMARY KEY);
CREATE TABLE users (
    id INT PRIMARY KEY,
    email VARCHAR(255) NOT NULL UNIQUE,
    age INT CHECK (age >= 0),
    department_id INT REFERENCES departments(id)
);
-- ageやdepartment_idはNOT NULLがないためNULLを許す

CHECKは業務上の正解をすべて知っているわけではありません。この例で誤った年齢を正の値として登録すれば通ります。制約が防ぐ誤りと、入力・業務処理で検証する内容を分けて設計します。

🛠️ 整合性を賢く維持するためのポイント

高い整合性を保ちながら、システムを安定稼働させるためのベストプラクティスです。

茶トラの顔を見ていつもの様子を確かめるように、データにも「正しい状態」の基準が必要です。在庫を負にしない、存在する会員だけに注文を結び付けるなど、守るルールを具体化しましょう。DBの制約とトランザクションを使い、関連する更新が途中だけ残らないようにします。