見出し画像

3分間データベース講座 第5回: データベースのデータ品質を保つ!~キーの多様性と整合性制約~



登場人物:

  • チャット先生(通称:先生): オブジェクト指向マスター。最近はデータベースの世界にも詳しい。

  • ボット助手(通称:ボット君): プログラミングを始めたばかりの若手。データベースはまだ未知の世界。


ボット君: 先生!前回教わった正規化とER図、すごく勉強になりました!テーブルを適切に分けることで、データの重複がなくなって、管理しやすくなるんですね!

先生: その通り!素晴らしいね、ボット君。テーブルを適切に分割することは、データの整合性を保つための第一歩だ。でも、それだけじゃまだ不十分だ。今日のテーマは、データを守るための盾と矛、**「キーの多様性」「整合性制約」**についてだ。これらを理解することで、データベースのデータ品質をさらに高めることができる。

1. データを一意に特定する鍵~キーの多様性~

先生: 前回、テーブルの行を一意に特定するための「主キー(Primary Key)」について少し触れたね。データベースには、主キーの他にもいくつかの種類のキーが存在する。

  • 主キー(Primary Key): テーブルの各行を一意に識別する唯一無二のキーだ。主キーは必ず値が存在し(NOT NULL)、重複してはいけない(UNIQUE)。

    • 例:usersテーブルのuser_id

  • 候補キー(Candidate Key): 主キーの候補となるキーだ。複数の候補キーが存在する場合もある。

    • 例:usersテーブルで、user_idの他に、email_addressも重複しないのであれば、これも候補キーになる。

  • 代替キー(Alternate Key): 候補キーのうち、主キーとして選ばれなかったキーのことだ。

    • ※「代理キー(Surrogate Key)」とは異なる概念です。

  • 複合キー(Composite Key): 複数の列を組み合わせて、行を一意に識別するキーだ。

    • 例:order_detailsテーブルで、order_idとproduct_idの組み合わせで、1つの注文における特定の商品を一意に特定する場合など。

  • 外部キー(Foreign Key): 別のテーブルの主キーを参照するキーだ。テーブル同士の関係性を結びつける役割を果たす。

    • 例:ordersテーブルのuser_idは、usersテーブルのuser_idを参照する外部キーだ。

ボット君: キーってたくさん種類があるんですね!外部キーがテーブルとテーブルを結びつける役割って、すごく大事な気がします!

先生: その通り!その外部キーが、次に話す「整合性制約」と深く関わってくるんだ。

2. データのルールを強制する~整合性制約~

先生: **整合性制約(Integrity Constraints)**とは、テーブル内のデータに一定のルールを課すことで、データの正確性や一貫性を保つ仕組みだ。主な制約には以下のものがある。

  • 主キー制約(Primary Key Constraint): PRIMARY KEY

    • 主キーに設定された列に、NULL(値がないこと)や重複した値を許さないという制約。

  • 一意性制約(Unique Constraint): UNIQUE

    • 列に重複した値を許さないという制約。ただし、NULLは許可する。

  • 非NULL制約(NOT NULL Constraint): NOT NULL

    • 列にNULL(値がないこと)を許さないという制約。

  • 外部キー制約(Foreign Key Constraint): FOREIGN KEY

    • 外部キーに設定された列が、参照先のテーブルに存在する値しか持つことができないという制約。これにより、**「存在しないユーザーIDの注文は登録できない」**といったルールを強制できる。

    • ON DELETEやON UPDATE句を追加することで、参照元(親)のデータが削除・更新された際の動作を細かく制御できる(例:ON DELETE CASCADEとすると、親データが削除されたときに子データも自動的に削除される)。

  • チェック制約(Check Constraint): CHECK

    • 列に特定の条件を満たす値しか許さないという制約。

    • 例:CHECK(age >= 0)とすることで、年齢にマイナスの値が入力されるのを防ぐことができる。

    • ※データベースシステムによってはCHECK制約の対応状況が異なります。

制約の具体例

-- usersテーブルの作成
CREATE TABLE users (
    user_id INT PRIMARY KEY,              -- 主キー制約
    email_address VARCHAR(255) UNIQUE,    -- 一意性制約
    user_name VARCHAR(255) NOT NULL,      -- 非NULL制約
    age INT,
    CONSTRAINT chk_age CHECK (age >= 0)   -- チェック制約
);

-- ordersテーブルの作成
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE -- 外部キー制約
);

ボット君: FOREIGN KEYでテーブル同士がしっかり繋がっているんですね!これなら、データの整合性がガチガチに守られて、すごく安心できます!

先生: その通り!これらの制約を適切に設定することで、アプリケーション側でデータをチェックする手間が省け、データの品質をデータベース自身で保証することができるんだ。

まとめと次回の予告

先生: 今日のまとめだ。

  • キーの多様性: 主キー、候補キー、外部キーなど、データの役割に応じて様々なキーが存在する。

  • 整合性制約: データのルールを強制する仕組み。PRIMARY KEY、UNIQUE、NOT NULL、FOREIGN KEY、CHECKなどがある。

  • 外部キー制約: データの参照関係を保つ上で最も重要な制約。

これらのキーと制約を理解し、適切に設計に組み込むことで、データの品質を守り、安全で信頼性の高いデータベースを構築できる。

先生: 次回は、データベースの検索速度を劇的に向上させるための仕組み、**「インデックス」**について学んでいこう。


次回:第6回: SQLでデータを操作する!~基本操作と集約・並べ替え~

#データベース #SQL #キー #整合性制約 #データベース設計 #プログラミング学習


いいなと思ったら応援しよう!

ナオユキ|物語と知識のコンシェルジュ もしこの記事が少しでも役に立ったり、楽しんでいただけたりしたら、チップをいただけるととても嬉しいです! いただいたチップは、今後のより良いコンテンツ制作のための書籍代📚とnote購入🗒️、他の方へのチップ代💰に使わせていただきます。 いつも応援ありがとうございます!