0Pricing
Coding Interview Prep · レッスン

主キー、外部キー、制約

面接官が求める形で、キー、一意性、参照整合性について説明します。

「主キー、外部キー、制約」はCoddyKit上の無料Coding Interview Prepレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCoding Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Coding Interview Prepコースには全4レッスンが含まれています。

キーが必ず話題になる理由

SQLの定義を説明した後、面接官はキーと制約に話題を移します。これらを結び付けるテーマは整合性です。つまり、不正なデータが入り込まないようにデータベースが適用するルールです。

主キーとは何か

主キーは各行を一意に識別します。必ず一意でNOT NULLであり、1つのテーブルに最大1つだけ設定できます。この点を簡潔に答えられると評価につながります。

CREATE TABLE customers (
  id INTEGER PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  name VARCHAR(100)
);

自然キーと代理キー

実際のデータを使うのでしょうか、それとも生成した番号を使うのでしょうか。自然キーは既存の一意なデータを使い、代理キーは生成したIDを使います。多くのチームが代理キーを好むのは、値が安定しているからです。

複合主キー

主キーは複数の列にまたがる複合キーにすることもできます。これは中間テーブルでよく使われ、2つの外部キーを組み合わせて各行を識別します。

CREATE TABLE enrollments (
  student_id INTEGER,
  course_id INTEGER,
  enrolled_on DATE,
  PRIMARY KEY (student_id, course_id)
);

主キーと一意制約

必ず聞かれる質問の1つが、主キーと一意制約の違いです。どちらも一意性を保証しますが、1つのテーブルに設定できる主キーは1つで、NOT NULLです。一方、一意制約は複数設定でき、それぞれNULLを許容します。

CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  email VARCHAR(255) UNIQUE,
  username VARCHAR(50) UNIQUE
);

外部キーとは何か

外部キーは別のテーブルの主キーを参照し、参照整合性を保証します。存在しない親を指す子の行を追加することはできません。

CREATE TABLE orders (
  id INTEGER PRIMARY KEY,
  customer_id INTEGER REFERENCES customers(id),
  amount NUMERIC(10,2)
);

参照アクション:ON DELETE / ON UPDATE

「顧客が削除されたら、その顧客の注文はどうなりますか?」これは参照アクションに関する質問です。RESTRICTは削除を拒否し(デフォルト)、CASCADEは子の行を削除し、SET NULLはキーをNULLにします。

CREATE TABLE order_items (
  id INTEGER PRIMARY KEY,
  order_id INTEGER REFERENCES orders(id) ON DELETE CASCADE
);

NOT NULL、CHECK、DEFAULT

整合性を支える制約は、ほかにも3つあります。NOT NULLは値の欠落を禁止し、CHECKはstock >= 0のようなルールを適用し、DEFAULTは代替となる値を設定します。

CREATE TABLE products (
  id INTEGER PRIMARY KEY,
  price NUMERIC(10,2) NOT NULL DEFAULT 0,
  stock INTEGER CHECK (stock >= 0)
);

例題:整合性を考慮して設計する

図書館の貸出テーブルを設計してみましょう。以下のコードでは、2つの外部キー、NULLを許可しない返却期限、そして1冊の本を同時に2回貸し出せないようにする一意制約を使います。

CREATE TABLE loans (
  id INTEGER PRIMARY KEY,
  book_id INTEGER NOT NULL REFERENCES books(id),
  member_id INTEGER NOT NULL REFERENCES members(id),
  due_date DATE NOT NULL,
  returned BOOLEAN DEFAULT false
);

整合性について説明する方法

理解の深さを示すには、3種類の整合性を挙げましょう。主キーによるエンティティ整合性、外部キーによる参照整合性、そしてNOT NULL、CHECK、データ型によるドメイン整合性です。

既存のテーブルに制約を追加する

既存のテーブルに制約を追加するよう求められたら、ALTER TABLE ... ADD CONSTRAINTを使います。注意すべき点として、現在の行が新しいルールにすでに違反している場合は失敗することがあります。

ALTER TABLE orders
  ADD CONSTRAINT fk_orders_customer
  FOREIGN KEY (customer_id) REFERENCES customers(id);

理解度チェック

主キーと一意制約の違いを説明してみましょう。

まとめ

まとめ:主キーは一意かつNOT NULLで、1つのテーブルに1つだけ設定できます。一意制約はNULLを許容し、複数設定できます。外部キーは参照整合性を保証します。

よくある質問

「主キー、外部キー、制約」レッスンは無料ですか?

はい。「主キー、外部キー、制約」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Coding Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Coding Interview Prepコースには全4レッスンが含まれています。

「主キー、外部キー、制約」で何を学びますか?

面接官が求める形で、キー、一意性、参照整合性について説明します。 ブラウザで直接実行するハンズオンコードでCoding Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Coding Interview Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCoding Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「主キー、外部キー、制約」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCoding Interview Prepレッスンでコードを書いて実行できますか?

はい。すべてのCoding Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. SQLとは何か、なぜ面接で問われるのか
  2. 論理的なクエリ実行順序
  3. 主キー、外部キー、制約
  4. 緊張する面接でスキーマを読み解く
← Coding Interview Prepに戻る