テーブル設計

要点

  • テーブル設計とは、データを保存する表(テーブル)の形を決める作業のことです。
  • 「列(カラム)」でデータの項目を、「主キー」で1行を一意に識別し、「外部キー」でテーブル同士を関連づけます。
  • 設計が悪いと、データの重複や不整合、検索速度の低下につながります。

テーブルとは何か

テーブルは、データを行と列で整理した表のことです。1つのテーブルには、同じ種類のデータ(例えば「顧客」や「注文」)がまとめて格納されます。

customers
テーブル
顧客に関する
データの集まり
行×列の
表形式

ぽち先生のヒント会社の「顧客台帳」のようなものです。台帳1冊が1つのテーブル、記入するページのフォーマットが列の設計にあたります。

列(カラム)とデータ型

列は、テーブルに保存するデータの項目を表します。それぞれの列には、「どんな種類のデータを入れるか」を示す「データ型」を決めておきます。

id: 整数数値型の列
name: 文字列文字列型の列
created_at: 日時日時型の列

データ型を決めておくことで、数値のはずの列に文字が入ってしまうといった不正なデータの混入を防げます。

ぽち先生のヒントアンケート用紙の記入欄に例えられます。「年齢」の欄には数字だけ、「氏名」の欄には文字だけ、というように欄ごとに書ける内容が決まっているイメージです。

主キー:レコードを一意に識別する

主キーとは、テーブルの中で1行(1レコード)を他と重複なく特定するための列のことです。同じ値を持つ行が2つ以上存在しないことが保証されます。

id: 1
田中太郎
id: 2
佐藤花子
idは
必ず重複しない

ぽち先生のヒント学生証の「学籍番号」に似ています。同姓同名の学生がいても、学籍番号さえ見れば誰なのかを確実に特定できます。

外部キー:テーブル同士を関連づける

外部キーとは、あるテーブルの主キーの値を、別のテーブルの列として持たせることで、2つのテーブルを結びつける仕組みです。

customers
主キー: id
customer_id
orders
外部キー: customer_id

これにより、「この注文は、どの顧客のものか」をデータ上で正しく紐づけられます。顧客の名前や住所を注文テーブルに毎回書き写す必要がなくなります。

ぽち先生のヒント宅配便の伝票に書かれる「会員番号」のようなものです。伝票そのものには住所を全部書かなくても、会員番号から会員データベースを引けば、正しい届け先が分かります。

テーブル同士の関係:1対多

テーブル設計でよく登場するのが「1対多」の関係です。1人の顧客が複数の注文をする、という関係を例に考えてみます。

顧客1人
1対多
注文は
複数件

この関係は、「多」側のテーブル(注文)に「1」側のテーブル(顧客)の主キーを外部キーとして持たせることで表現します。他にも「多対多」など複雑な関係もありますが、まずは1対多の考え方を押さえておくとよいでしょう。

実務で気をつけたいポイント

インデックスを考慮しない設計検索条件によく使う列にインデックスを設定しないと、テーブルが大きくなるにつれ検索が遅くなる。
NULLを許容するかを曖昧にする「値が未入力」なのか「値が0」なのかを区別できないなど、NULL許容の設計を曖昧にすると、後々のデータ処理でバグの原因になる。
命名規則を統一するテーブル名・カラム名の命名規則(単数形か複数形か、スネークケースかなど)をチーム内で統一しておくと、コードの可読性と保守性が上がる。

まとめ

テーブル設計は、列でデータの項目を決め、主キーで1行を一意に識別し、外部キーでテーブル同士を関連づける作業です。この土台がしっかりしていないと、後から重複や不整合が起きやすくなります。

関連トピック:

🏠 トップに戻る