【DB】テーブル定義について

DBに定義するテーブルについて記載します。

テーブルとは

テーブルとはデータベース上でデータを種類ごとに分類し整理する箱のようなものだと考えます。テーブルを定義する場合に最低限必要な要素は以下の通りです。

  • テーブル名:データベース上でテーブルを識別する名称です。
  • 項目(カラム):テーブル内にデータを種類ごとに分ける枠の名称です。
  • データ型:カラムに登録するデータのプログラムから見たデータ種類です。
  • 主キー:各データを一意に識別可能な値になります。(※)

※主キーは「索引:インデックス」の仲間になります。インデックスの持つ意味についてはここでは割愛いたします。

データ型について

カラムに設定するデータ型によってデータの種類が決まってきます。主なデータ型については以下の通りです。

No. 種類 データ型 主な用途
1 数値 NUMERIC 金額、年齢など
2 文字、
文字列
CHAR、
VARCHAR
など
 名前、住所、メールアドレスなど
3 日付、
時刻
DATE、DATETIME、TIMESTAMP
など
データ登録日時、誕生日など
4 論理値 BOOLEAN、
BIT、
など
フラグ管理など。
5 バイナリ  BLOB
など
 PDFファイル画像データなどを登録する

また、データ型にはサイズ(文字数、数値の桁数)を明示的に定義する必要があるものもあります。上記表にあるデータ型だと「NUMERIC」、「CHAR」、「VARCHAR」などが該当します。

※細かい型の説明については利用するDBの仕様に依存するためここでは割愛します。

主キーについて

主キーとは、データを一意に識別可能な情報です。主キーを定義する場合一つの項目から定義する場合と複数の項目から定義する場合とあります。

例えば以下のような社員情報のテーブル定義を作成します。

No. 社員番号 名前
1 SN0001 葉月しずく
2 SN0002 遠山りん
3 SN0003 八神コウ
4 SN0004 滝本ひふみ

テーブル定義をする場合は以下のように考えることができます。

No. 項目 データ型(サイズ) 主キー
1 社員番号 CHAR(6)
2 名前 VARCHAR(20)

「社員番号」は各社員ごとでユニークになると判断できるため主キーとして定義しました。データの特色から「社員番号」を固定長、「名前」を可変長として定義しました。

固定長と可変長

テーブルの作り方

テーブルの構成に最低限必要な要素を一つずつ定義します。

No. 艦名 艦種 進水日
1 大和 戦艦 1940年8月8日
2 赤城 空母 1925年4月22日
3 五月雨 駆逐艦 1935年7月6日
4 朝霜 駆逐艦 1943年7月18日

上記の軍艦の情報をテーブル定義していきます。

※テーブルの正規化については別途記載するため今回は割愛します。

 テーブル名の定義

まずはテーブル名を定義します。テーブル名は情報が分かるものをアルファベットで表現します。

テーブル名:「WARSHIP

※データベースにより日本語をそのまま使えることもありますが今回はアルファベットにしました。

日本語を使わない理由

カラム構成の定義

カラム構成を下記のように考えていきます。

◆主キー

まず、主キーとなる項目を考えます。「No.」という項目がありますが実際には表を見やすくするための項目になります。この情報にはユニークになる項目がないため連番を識別番号の項目として追加します。

主キー項目:「ID

◆カラム名

カラム名もアルファベット化していきます。

艦名:「NAME
艦種:「TYPE
進水日:「LAUNCH_DATE

◆データ型

カラムごとにデータ型を定義します。データ型は情報の特性を考えて定義します。

ID:「NUMERIC(5)
※増やしていった場合1万件では不安と考えました。
艦名:「VARCHAR(100)
※海外艦でも100文字は超えないかなと考えました。
艦種:「VARCHAR(50)
※海外艦種名でも50文字は超えないかなと考えました。
進水日:「DATE
※年月日で表現できると考えました。

テーブル作成

テーブル構成は以下の通りで定義しました。

※正規化についてはここでは考慮しておりません。

正規化とは

テーブル名:WARSHIP

No. カラム名 データ型 主キー
1 ID NUMERIC(5)
2 NAME VARCHAR(100)
3 TYPE VARCHAR(50)
4 LAUNCH_DATE DATE

テーブルを作成は以下のSQLで行います。

CREATE TABLE WARSHIP (
  ID NUMERIC(5) PRIMARY KEY,
  NAME VARCHAR(100),
  TYPE VARCHAR(50),
  LAUNCH_DATE DATE)

これでテーブルは作成されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です