データを行と列からなる表形式で管理し、表同士を関連づけるデータベース。
関係データベース(RDB=Relational Database)とは、データを行と列からなる「表(テーブル)」で管理し、複数の表を共通の値で関連づけられるデータベースのことです。現在もっとも広く使われているデータベースの形式です。
身近な例で考えると、Excel の表(スプレッドシート)に似ています。1行が1件のデータ(例:顧客1人分の情報)、1列が1つの項目(例:氏名・住所)にあたります。違うのは、RDB では複数の表を「同じ顧客ID」のような共通の値でつなげて、横断的にデータを取り出せる点です。
上の図解では「顧客表」と「注文表」を顧客IDで結びつけて、誰が何を注文したかをたどれる様子を示しています。データを操作するときは SQL(=データベース専用の言語)という共通の命令を使います。
RDB の表は、次の要素で構成されます。用語はそれぞれ別名(数学用語)でも呼ばれます。
・表(テーブル / 関係):データのまとまり。1つのテーマ(顧客・商品など)を表す
・行(レコード / タプル):1件分のデータ。横一列
・列(属性 / フィールド):項目の種類。氏名・住所など
表同士を関連づけるために、2種類の重要な「キー(鍵となる列)」があります。
・主キー(primary key):その表の中で行を一意に識別する列。値の重複・空欄(NULL)は許されない(例:顧客ID)
・外部キー(foreign key):別の表の主キーを参照する列。これで表と表がつながる
図書館の本に例えると、主キーは本ごとの「蔵書番号」のようなものです。番号が重複しないからこそ、1冊を正確に指し示せます。外部キーは「貸出記録に書かれた蔵書番号」で、どの本が貸し出されたかを記録とたどれるようにする役割です。
RDB に対して、NoSQL(=Not only SQL)は表形式にとらわれない多様な形式のデータベースの総称です。両者の主な違いを整理します。
| 項目 | RDB(関係DB) | NoSQL |
|---|---|---|
| データ形式 | 表(行と列)に固定 | キー値・文書・グラフなど多様 |
| スキーマ | 事前に列を定義(厳格) | 柔軟(後から項目追加が容易) |
| 操作言語 | SQL | 製品ごとに異なる |
| 得意な場面 | 整合性が重要な業務データ | 大量・多様なデータの高速処理 |
RDB は表の形が事前にきっちり決まっているため、銀行の取引や在庫管理のように「データの正確さ・整合性」が何より大事な場面に向いています。一方 NoSQL は形が自由なので、SNS の投稿やセンサーのログのように形がバラバラで量が膨大なデータを素早くさばくのに向いています。
どちらが優れているという話ではなく、扱うデータの性質に応じて使い分けるのが基本です。整然と整理したい帳簿は RDB、雑多なメモの山は NoSQL、とイメージすると分かりやすいでしょう。
表形式が選ばれる理由は、「どんなデータも同じ構造に揃えることで、統一した操作ができる」からです。
表形式を使うことで得られる主なメリットは次のとおりです。
・一貫した操作:顧客データも商品データも、同じSQL命令(SELECT・INSERTなど)で扱える
・表同士を結びつけられる:主キーと外部キーで複数の表をつなげ、「誰が・何を・いつ注文したか」を一度にたどれる
・整合性を保ちやすい:列の型(文字列・数値・日付など)と制約(空欄禁止・重複禁止)を事前に決めておける
バラバラなファイルでデータを管理していたころは、顧客の名前が1つのファイルでは「田中太郎」、別のファイルでは「田中 太郎」(スペースあり)と表記がズレて検索できない、といった問題が頻発しました。表形式にまとめることで「どこを見ても同じルール」が保証されます。これが RDB が広く使われる根本の理由です。
正規化(normalization)とは、データの重複や矛盾をなくすために、表を適切に分割して整理する作業のことです。RDB の設計でとても重要な考え方です。
なぜ正規化が必要なのか。たとえば「田中さん」の住所が変わったとき、正規化していない表では「田中」という名前が含まれる全行を直さなければなりません。修正漏れがあると、同じ人の住所が行によって違う、という矛盾が生まれます。
正規化すると、顧客情報は顧客表の1行だけにまとめられます。住所が変わっても1か所を直すだけで済み、注文表には顧客IDの参照だけが残るため矛盾が起きません。正規化には段階(第1正規化・第2正規化・第3正規化など)がありますが、共通の目的は「同じ情報を1か所にだけ持つ」ことです。
・更新しやすくなる:1か所を直すだけで全体に反映される
・矛盾が起きにくい:同じデータが複数の場所にあることで生じる不整合を防ぐ
・容量が減る:重複データがなくなるため、記憶域を節約できる
Q1.関係データベース(RDB)でデータを管理する基本的な形式はどれか。
Q2.RDB の表において、各行を一意に識別するために設定する列(または列の組)を何というか。
Q3.ある表の列が、別の表の主キーを参照して表同士を関連づける役割を持つとき、その列を何というか。