diff --git a/src/pages/sql/010-foundation.mdx b/src/pages/sql/010-foundation.mdx index 4cef1ed..113839a 100644 --- a/src/pages/sql/010-foundation.mdx +++ b/src/pages/sql/010-foundation.mdx @@ -59,6 +59,33 @@ ## なぜIDが必要なの? +普段の生活では、例えば誰かを判断する場合に名前で判断することが多いです。 +しかしプログラムの世界では、これを避けて敢えて`ID`を割り振っています。 + +ところで、2000人の人を1か所に集めると、そのなかに同姓同名のペアが1つ以上存在する確率は約86%だそうです。 +[引用 - 同姓同名のペアができる確率をExcelで計算したら予想よりも高かった件。](https://note.com/yudo_tanaka/n/ndddef4b15d95) + +これが多いか少ないかはさておき、名前で人を特定することが難しい場合があることがわかります。 +これを回避して確実に1人を特定するために、`ID`を割り当てているのです。 + +なお、SQLの世界では、`ID`は主に **主キー (Primary Key)** として使われます。 +また、複数のキーを組み合わせて一意に特定する **複合キー (Composite Key)** にすることもあります。 + +IDには、以下のようなものが使われることが多いです。 + +**連番 (1, 2, 3, ...)** + +自動で連番を振る仕組みがデータベースに備わっていることが多く、重複しないことが直感的にわかりやすい + +**UUID (例: `550e8400-e29b-41d4-a716-446655440000`)** + +時刻や、操作しているコンピュータの情報などを元に生成されるIDで、重複する可能性が天文学的に低い + +**ハッシュ値 (例: `5d41402abc4b2a76b9719d911017c592`)** + +例えばメールアドレスなど、元のデータから一意に生成される値をIDとして使う場合に使われることがある。 +同じメールアドレスからは同じハッシュ値が生成されるため、重複を避けられる。 + ## テーブルそのものを操作する ### テーブルを作成 (CREATE TABLE)