okpy

Pythonエンジニア兼テックリーダーが、多くのプロジェクトとチーム運営から得た実践的な知識を共有するブログです。

データ無欠性とは?

データ無欠性(Data Integrity)とは?

データ無欠性(Data Integrity)とは、データが正確で一貫性があり、信頼できる状態に保たれていることを指す概念である。データベースを運用・管理するうえで、無欠性は最も基本的かつ重要な要件であり、システムの品質と信頼性を左右する。

かつて、大手通信会社が顧客管理システムを刷新した際、当初は「使いやすさ」を優先してデータ検証や制約の設定を後回しにしていた。ところがシステム稼働後、登録されたメールアドレスに記号の誤りが混在し、DM(ダイレクトメール)が大量に送信エラーで戻る事態が発生。さらに、注文データと顧客情報が紐づかないレコードも多数発見され、営業活動に深刻な支障をきたした。最終的にPKやFK、CHECK制約を段階的に導入し、バックデータをすべてクリーニング。プロジェクトリーダーは「ルールを疎かにした代償は、あとから何倍にもなって返ってくる」と振り返った。


1. なぜデータ無欠性が重要なのか?

ある病院の電子カルテシステムでは、患者IDが重複したり、診療記録に日付の欠損があったりするなどの「データの破損」が起き、診療ミスや重複請求が発生した事例があった。データの信頼性が欠けていたことで、医療現場に深刻な混乱を招いた。こうした事態を防ぐためには、システム的に「正しくなければ登録できない」「関係が整っていなければ削除できない」といったルール設計=無欠性の担保が不可欠である。


2. データ無欠性の種類

  1. エンティティ無欠性(Entity Integrity)

    • 主キー(PK)はNULL不可、重複不可。各レコードの一意性を保証する。
    • 例:社員ID、顧客IDなど
  2. 参照無欠性(Referential Integrity)

    • 外部キー(FK)は、参照先の主キーと対応する必要がある。
    • 例:注文テーブルのuser_idは、ユーザーテーブルのuser_idと一致していなければならない
  3. ドメイン無欠性(Domain Integrity)

    • カラムに対して許容される値の範囲や形式を定義する。
    • 例:年齢は0〜120、メールアドレスは正規表現に一致など
  4. ビジネスルール無欠性(Business Rule Integrity)

    • 業務ロジックに基づく一貫性の確保。
    • 例:「在庫が0の商品は注文不可」「支払い完了済みの注文はキャンセル不可」など

3. 無欠性を実現する手段

  • 制約(Constraint)の設定

    • NOT NULL、UNIQUE、CHECK、DEFAULT、FOREIGN KEY
  • トランザクション管理

    • 一連の処理を原子性・一貫性・隔離性・永続性(ACID)で制御
  • アプリケーションレベルのバリデーション

    • フロントエンドやAPI側でもルールチェックを実装
  • ログと監査証跡

    • 誰が・いつ・どのような操作を行ったかを記録し、改ざんを防止

ある自治体の住民情報システムでは、変更履歴をログに残すルールを設けたことで、なりすましや誤登録の抑止に成功。システム利用者からの信頼度も上昇した。


4. よくある無欠性の欠落とその影響

  • 顧客IDがNULLで登録され、マーケティング施策の対象から漏れる
  • 不正な日付(例:2024-02-30)が登録され、月次レポートの集計が破綻
  • 外部キーが未設定のために、削除された社員に関連する注文情報がデータベースに残り続ける

あるプロジェクトでは、チェック制約を適切に設けていなかったために、合計金額がマイナスの取引データが登録されてしまい、決算処理が停止した。


まとめ

データ無欠性は、単なるルールではなく、ビジネスの信頼性そのものを支える「データの安全装置」である。設計・開発・運用のあらゆるフェーズで無欠性を意識し、技術と業務の両面から保全を図ることが、持続可能で正確な情報システムの実現につながる。

そして何より、無欠性を守るということは「信頼されるデータをつくる」という営みであり、企業とユーザーとの信頼関係そのものを支える設計思想でもある。