関係データベース (RDB) は基本情報試験で頻出。テーブル・主キー・外部キーの基本概念を学びます。
データベースって、エクセルみたいなもん?
近いけど、もっと厳格なのよ。
RDBは表 (テーブル) でデータを管理し、表同士を関連付けて使うの。
表は行 (レコード/タプル) と列 (カラム/属性) で構成。
各行を一意に識別する主キー (Primary Key) と、他の表の主キーを参照する外部キー (Foreign Key) が重要よ。
外部キーって、何のためにあるんですかぁ?
テーブル間の関連を表すためよ。
たとえば「注文表」が「顧客表」の顧客IDを外部キーとして持てば、誰の注文かを参照できる。
これで{kw('参照整合性', '外部キーが参照先の主キーに存在することを保証する制約')}が保たれるのよ。
DBMSはDBMSと呼ばれ、Oracle・MySQL・PostgreSQL・SQL Serverが代表ね。
よっしゃ、テーブルと主キー・外部キー、覚えた!
顧客表と注文表でキーを確認する
次の2表を考えます。顧客表の顧客IDは顧客を一意に識別し、注文表の注文IDは注文を一意に識別します。注文表の顧客IDは、顧客表の行を指す外部キーです。
| 顧客表 | |
|---|---|
| 顧客ID (主キー) | 氏名 |
| C01 | 佐藤 |
| C02 | 鈴木 |
| 注文表 | ||
|---|---|---|
| 注文ID (主キー) | 顧客ID (外部キー) | 金額 |
| O101 | C02 | 3,000円 |
| O102 | C01 | 1,500円 |
新しい注文O103に顧客ID C99を入れようとしても、顧客表にC99が存在しないなら参照整合性制約に反します。一方、同じ顧客が複数回注文するので、注文表の顧客IDは重複して構いません。外部キーだから一意ではなく、参照先との対応を保証する列だと理解しましょう。
制約と検索機能を混同しない
主キーには一意性とNULL不可が求められます。候補キーが複数ある場合は、その中から一つを主キーとして選び、残りは代替キーになります。複数列を組み合わせて初めて一意になる「複合主キー」もあります。たとえば受注明細なら、注文IDと明細番号の組合せを主キーにできます。
| 仕組み | 主な目的 | 一意性を保証するか |
|---|---|---|
| 主キー制約 | 行を一意に識別する | 保証する。NULLも不可 |
| 外部キー制約 | 参照先との整合性を守る | 参照する側の重複は許される |
| インデックス | 検索を高速化する | 通常は保証しない。一意インデックスは別 |
| ビュー | 問い合わせ結果を仮想的な表として見せる | 行識別の制約そのものではない |
選択肢にインデックスがあると「検索の起点」という説明に引かれがちですが、設問が問うのは高速化か、一意識別か、参照整合性かを確認します。また、顧客を削除するときにその顧客を参照する注文が残っていれば、削除を拒否する、関連行も削除するなど、定義された参照動作が必要です。DBMS名ではなく、制約の役割から判断するのが解法です。
確認クイズ
リレーショナルデータベースで、テーブル内の各行を一意に識別する列はどれか。
- インデックス
- 主キー
- 外部キー
- ビュー
こたえを見る
正解: 2. 主キー
主キー (Primary Key) はテーブル内の各行を一意に識別する列です。NULLや重複が許されず、検索の起点となります。