【SQL & データベース入門】テーブル作成とデータ型の選び方|初心者向け設計ガイド

テーブルとは何か?

データベースとテーブルの関係

リレーショナルデータベースでは、情報はテーブルという形式で保存されます。テーブルは行(レコード)と列(フィールド)で構成され、Excelのスプレッドシートに似た構造を持っています。各行は一つのデータセットを表し、各列は特定の属性(名前、年齢、住所など)を表します。

テーブル作成の重要性

データベースを効率的に管理するには、テーブルの設計が非常に重要です。正しいテーブル構造と適切なデータ型を使用することで、データの検索や更新がスムーズになり、データの整合性を保つことができます。

テーブル作成の基本

CREATE TABLE文の基本構文

CREATE TABLE テーブル名 (
    列名1 データ型1 [制約],
    列名2 データ型2 [制約],
    ...
);
  • CREATE TABLE:新しいテーブルを作成するSQLコマンド。
  • 列名:テーブル内の各列の名前を指定。
  • データ型:各列に格納するデータの種類を指定。
  • 制約(任意):データの整合性を保つための制限。

実際の使用例

社員情報を管理するテーブルを作成する場合:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    department VARCHAR(50),
    salary DECIMAL(10, 2)
);
  • id 列は整数型で、主キー(PRIMARY KEY)として指定。
  • name 列は50文字までの文字列を格納し、空(NULL)値を許可しない。
  • salary 列は10桁の数値(小数点以下2桁)を格納します。

データ型の種類

1. 数値型

数値データを格納するために使用されます。

  • INT:整数を格納します。
    • 例:年齢、社員番号など。
  • DECIMAL(桁数, 小数点以下桁数):精密な小数値を格納します。
    • 例:給与、価格など。
  • FLOAT/DOUBLE:実数値を格納します(浮動小数点数)。
    • 例:科学計算や統計データ。

2. 文字列型

文字列データを格納するために使用されます。

  • CHAR(文字数):固定長の文字列を格納します。
    • 例:郵便番号や国コード(例:”JP”)。
  • VARCHAR(文字数):可変長の文字列を格納します。
    • 例:氏名、メールアドレスなど。
  • TEXT:大きな文字列データを格納します。
    • 例:記事の本文やコメント。

3. 日付と時刻型

日付や時間のデータを格納するために使用されます。

  • DATE:日付を格納します(例:YYYY-MM-DD)。
    • 例:誕生日、雇用開始日。
  • TIME:時刻を格納します(例:HH:MM:SS)。
    • 例:勤務開始時刻。
  • DATETIME:日付と時刻を同時に格納します(例:YYYY-MM-DD HH:MM:SS)。
    • 例:注文日時、ログイン記録。

4. ブール型

真(TRUE)または偽(FALSE)を格納します。

  • BOOLEAN:真偽値を格納します。
    • 例:ユーザーがアクティブかどうかを示す。

テーブル制約の種類

PRIMARY KEY(主キー)

  • テーブル内で各行を一意に識別するための列に指定します。
  • 主キーにはNULL値を設定できません。

:

id INT PRIMARY KEY

FOREIGN KEY(外部キー)

  • 他のテーブルの列との関連性を定義します。
  • データの整合性を保つために重要です。

:

department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(id)

NOT NULL

  • 空の値(NULL)を許可しない制約です。

:

name VARCHAR(50) NOT NULL

UNIQUE

  • 重複する値を許可しない列に指定します。

:

email VARCHAR(100) UNIQUE

CHECK

  • 列に設定する値の条件を定義します。

:

age INT CHECK (age >= 18)

実用例:顧客情報テーブルの作成

次の例では、顧客情報を管理するテーブルを作成します。

CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    birth_date DATE,
    registration_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    active BOOLEAN DEFAULT TRUE
);
  • customer_id は主キーとして機能し、各顧客を一意に識別します。
  • email は重複しないように設定されています。
  • registration_date はデフォルトで現在の日時を設定。
  • active 列は顧客がアクティブかどうかを示します。

テーブル設計のベストプラクティス

1. 適切なデータ型の選択

各列に格納されるデータに最も適したデータ型を選択することで、ストレージの無駄遣いを防ぎ、パフォーマンスを最適化できます。

2. 主キーと外部キーの設定

主キーを適切に設定し、必要に応じて他のテーブルとの関連性を外部キーで定義することで、データの整合性を確保できます。

3. NULLの取り扱い

NULL値の許可が必要な場合とそうでない場合を明確にし、データの欠損を防ぎましょう。

4. インデックスの活用

検索速度を向上させるために、頻繁に検索される列にはインデックスを設定することが推奨されます。

まとめ

テーブル作成とデータ型の選択は、データベース設計の基礎であり、システム全体のパフォーマンスとデータの正確性に大きな影響を与えます。基本的な構文やデータ型、制約をしっかり理解しておくことで、効率的で信頼性の高いデータベースを構築することが可能です。初めての方も、実際にテーブルを作成しながら練習することで、徐々に理解を深めていきましょう。