IDとKeyの違いとは?データベース設計で混乱しやすい識別子とキーの考え方

IDはデータを識別する値であり、Keyはデータベース上で一意性や関連付けを担う役割です。この違いを押さえると、RDBMS、AppSheet、AI時代のデータ設計で混乱しにくくなります。

概要

IDとKeyは、データベース設計やAppSheetの構築で混同されやすい言葉です。

どちらも「データを識別するもの」として使われるため、同じ意味のように扱われることがあります。

しかし、実務上は分けて考えた方が理解しやすくなります。

短く言えば、IDはデータを識別する値であり、Keyはデータベース上で一意性や関連付けを担う役割です。

ID = データを識別する値
Key = データベース上で一意性や関連付けを担う役割

さらに簡単に言えば、IDは値、Keyは役割です。

IDとは

IDとは、あるデータを区別するための識別子です。

user_id = 1001
order_id = A00021
customer_id = C-0058
session_id = S-20260515-001

IDの目的は、「どのデータなのか」を特定することです。

ユーザーを区別する。注文を区別する。顧客を区別する。セッションを区別する。

このように、IDは対象を識別するための値です。

ただし、IDという名前が付いているからといって、必ずしもデータベース上の主キーとは限りません。

画面表示用の番号、業務上の管理番号、外部サービスから渡されたIDなど、IDにはさまざまな種類があります。

Keyとは

Keyは、データベース設計における役割です。

Keyは、データを一意にする、検索しやすくする、別テーブルと関連付ける、といった目的で使われます。

代表的なKeyには、Primary Key、Foreign Key、Unique Key、Composite Key、Business Key、Surrogate Keyなどがあります。

つまりKeyは、単なる値ではなく、その列や値がデータベース上でどう使われるかを表す概念です。

IDとKeyの違い

IDとKeyの違いは、値なのか、役割なのかです。

たとえば、次のようなユーザーテーブルがあるとします。

users
- id
- email
- name

この場合、idはユーザーを識別するIDです。

さらに、データベース上でidが主キーに設定されていれば、idはPrimary Keyでもあります。

IDとしては識別子
Keyとしては主キー

同じ列でも、識別子として見ているのか、データベース上の役割として見ているのかで意味が変わります。

IDは「どのデータか」を表します。Keyは「そのデータをどう扱うか」を表します。

Primary KeyとForeign Key

Primary Keyは、テーブル内のレコードを一意に識別するための主キーです。

重複せず、NULLにせず、その行を特定する基準になります。

一方、Foreign Keyは、他のテーブルのデータを参照するためのキーです。

たとえば、注文テーブルにcustomer_idがある場合、そのcustomer_idが顧客テーブルの主キーを参照していれば、注文と顧客を結び付けられます。

orders.customer_id → customers.customer_id

Primary Keyはレコードを特定するためのKeyであり、Foreign Keyはテーブル同士の関係を作るためのKeyです。

Business KeyとSurrogate Key

実務で特に重要なのが、Business KeyとSurrogate Keyの違いです。

Business Keyは、業務上の意味を持つ識別子です。顧客コード、社員番号、商品コード、請求番号、物件番号などが該当します。

人間が見ても意味があり、業務上の管理番号として使われます。

一方、Surrogate Keyは、システム内部で安定して参照するための人工的なIDです。自動採番ID、UUID、AppSheetのUNIQUEID()などが該当します。

Business KeyとSurrogate Keyを分ける理由は、業務上のIDは変わる可能性があるからです。

商品コードのルールが変わる。社員番号を付け直す。顧客コードを統合する。物件番号の採番ルールが変わる。

こうした変更に備えるには、内部的なKeyには意味を持たないIDを使い、業務上の番号は別の列として持つ設計が安定しやすくなります。

AppSheetでも重要になる

AppSheetでも、IDとKeyの違いはかなり重要です。

AppSheetでは、各レコードを一意に識別するKey列が必要です。

このKeyに、業務上の番号をそのまま使うこともできます。しかし実務では、変更や重複の可能性を考える必要があります。

人間が見て分かりやすい番号だからといって、それを内部Keyにすると、後から運用が崩れることがあります。

そのため、AppSheetでも内部的なKeyにはUNIQUEID()のような値を使い、顧客番号、案件番号、物件番号などは別列で持つ方が安定しやすくなります。

Time合同会社では、AppSheetで業務アプリを作る場合でも、単なるスプレッドシートの延長ではなく、RDBMSに近いレコード構造としてデータを蓄積する方針を重視しています。

画面上はノーコードでも、裏側のデータはテーブル、Key、Ref、リレーションを意識して設計した方が、後から修正しやすく、AIや外部システムとも連携しやすくなります。

AI時代にもIDとKeyは重要

AI時代になると、IDとKeyの管理はさらに重要になります。

RAG、ベクトル検索、ナレッジベース、AIエージェントの設計では、Document ID、Chunk ID、Session ID、Memory ID、User ID、Entity IDのような識別子が増えます。

一方で、検索や保存の仕組みでは、Primary Key、Foreign Key、Index Key、Cache Key、Vector KeyのようなKeyも使われます。

ここでも考え方は同じです。

IDは「どのデータか」を表します。Keyは「どう検索し、どう関連付け、どう一意性を保つか」を表します。

AIにデータを読ませる場合でも、元データのIDやKeyが曖昧だと、情報の追跡や更新が難しくなります。

まとめ

IDとKeyは似ていますが、同じ意味ではありません。

ID = データを識別する値
Key = データベース上での役割

IDは「どのデータか」を表します。Keyは「そのデータをどう扱うか」を表します。

実務では、業務上の番号と内部参照用のIDを分けることが重要です。

顧客コード、社員番号、請求番号、物件番号のようなBusiness Keyは、人間が使う番号です。一方、UUIDやUNIQUEID()のようなSurrogate Keyは、システムが安定して参照するためのIDです。

IDは値。Keyは役割。

この違いを押さえると、RDBMS、AppSheet、業務システム、AI時代のデータ設計で混乱しにくくなります。