キーと型の選択
BIGSERIALとUUIDの主キーを比較し、TEXTとVARCHAR(n)のどちらを使うか決め、すべての列に適した型を選びます。
「キーと型の選択」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
主キーの選び方
実際の選択肢は3つあります:
- BIGSERIAL — 単調増加する64ビット整数
- UUID — 128ビットのグローバル一意値
- ナチュラルキー — 現実世界の識別子(メールアドレス、ISBN)
BIGSERIALを選ぶべき場合
ほとんどのアプリケーションでのデフォルトの選択肢です:
- 小さく(8バイト)、インデックスが高速で、キャッシュ効率がよい
- 単調増加するため、最近のデータがインデックスの末尾にまとまる
- URLで読みやすい(例:
/posts/42)
UUIDを選ぶべき場合
次の場合はUUIDを選びます:
- グローバルに一意なIDが必要(複数データセンター、オフラインファーストアプリ)
- URLからビジネス規模を推測されるようなIDの漏えいを避けたい
- INSERT前にクライアント側でIDを生成したい
コストは16バイト(BIGINTの8バイトに対して)で、v4 UUIDはインデックスへの挿入をランダム化します。
ナチュラルキーが危険な理由
メールアドレスは変更されます。SKUは名前が変わります。国コードは分割されることがあります。PKにはサロゲートキーを使い、ナチュラルキーにはUNIQUE制約を設定します。
列の型:文字列
ほとんどのテキスト列には、次を使います:
VARCHAR(n)— 厳密な上限がある場合(メールアドレス、コード)TEXT— 自由形式の長いコンテンツCITEXT— 常に大文字と小文字を区別せず比較する場合(メールアドレスなど)
列の型:数値
数値列には、次を使います:
- IDとカウンターには
BIGINT - 金額には
NUMERIC(p, s) - 科学計算に限って
REAL/DOUBLE PRECISION
列の型:時刻
時刻の列には、次を使います:
- イベントには
TIMESTAMPTZ(デフォルト) - 暦上の日付には
DATE(誕生日、祝日) - 日付を伴わない時刻には
TIME(店舗の営業時間)
Booleanとステータス
列が将来2つを超える状態を取る場合は、booleanよりもステータス文字列+CHECKを優先します:
-- Will probably grow:
status TEXT NOT NULL CHECK (status IN ('draft','published','archived'))
-- vs the trap of "is_published BOOLEAN" when you later need a third state.制約も合わせて定義する
すべての列には次を設定します:
- 要件に適合する最も狭い型
- NULLに意味がない限り
NOT NULL - ほとんど同じ値になる列には
DEFAULT - ドメイン上のルールがある場合は
CHECK - WHERE/JOIN/ORDERで使う場合はインデックス
ストレージへの影響
狭い型 = 小さい行 = 1ページあたりの行数増加 = キャッシュヒット率向上です。TEXTからVARCHAR(20)に変えても、同じストレージを使うため容量は節約できません。BIGINTからINTに変えると、列の幅は半分になります。
外部キーの型は一致させる必要がある
FK列の型は、参照先のPKの型と完全に一致していなければなりません:
-- Wrong (silently won't use the index efficiently):
user_id INT REFERENCES users(id) -- where users.id is BIGINT
-- Right:
user_id BIGINT REFERENCES users(id)まとめ
型の選択は設計そのものです。
- PKにはBIGSERIALまたはUUID
- 金額にはNUMERIC
- イベントにはTIMESTAMPTZ
- 変化するステータスにはTEXTとCHECKの組み合わせ
- デフォルトではNOT NULL
クイックチェック
複数のタイムゾーンにいるユーザーのイベント時刻を保存します。どの型を使いますか?
よくある質問
「キーと型の選択」レッスンは無料ですか?
はい。「キーと型の選択」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「キーと型の選択」で何を学びますか?
BIGSERIALとUUIDの主キーを比較し、TEXTとVARCHAR(n)のどちらを使うか決め、すべての列に適した型を選びます。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「キーと型の選択」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。