Oracleデータベース完全ガイド: テーブル作成とデータ型をマスターする

Oracle Master Silver

Oracleデータベースにおけるテーブル作成は、効率的なデータ管理の基本です。本記事では、初心者でも理解しやすいように、テーブル作成の構文や主要なデータ型を具体例とともに詳しく解説します。また、現場で役立つヒントや注意点も盛り込みました。

1. テーブル作成の基本構文

Oracleでテーブルを作成するには、以下の基本構文を使用します。

CREATE TABLE テーブル名 (
列名 データ型 [制約],
...
);
  • テーブル名: 他と重複しないユニークな名前を付けましょう。慣例的に複数形を使用することが多いです(例: employees)。
  • 列名: テーブル内のデータ項目に適切な名前を付けます。名前は短く分かりやすくします(例: emp_id, hire_date)。
  • データ型: データの性質に合わせた型を選択します。型の選択はパフォーマンスやストレージ効率に大きく影響します。
  • 制約: データの一貫性を保つためのルールを設定します(例: NOT NULL, PRIMARY KEY)。

例: 社員情報を管理するテーブル

CREATE TABLE employees (
emp_id NUMBER(6) PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
gender CHAR(1) CHECK (gender IN ('M', 'F')),
salary NUMBER(8, 2) DEFAULT 0,
hire_date DATE NOT NULL,
profile_picture BLOB,
notes CLOB,
last_update TIMESTAMP DEFAULT SYSTIMESTAMP
);

2. データ型の詳細解説

Oracleで使用頻度が高いデータ型を、具体例とともに詳しく解説します。

1. NUMBER

  • 用途: 数値データの格納に使用。
  • 構文: NUMBER(精度, スケール)
    • 精度: 最大桁数(1~38)。
    • スケール: 小数点以下の桁数(-84~127)。
  • :sqlコードをコピーするsalary NUMBER(8, 2); -- 最大8桁、小数点以下2桁

2. CHAR

  • 用途: 固定長の文字列を格納。
  • 構文: CHAR(サイズ)
    • サイズ: 最大文字数(1~2000)。
  • 特徴: 指定サイズ未満の場合、余分なスペースで埋められる。
  • :sqlコードをコピーするgender CHAR(1); -- 性別を格納

3. VARCHAR2

  • 用途: 可変長の文字列を格納。
  • 構文: VARCHAR2(サイズ)
    • サイズ: 最大文字数(1~4000)。
  • :sqlコードをコピーするname VARCHAR2(50); -- 最大50文字の名前

4. BLOB

  • 用途: 画像や動画などのバイナリデータを格納。
  • 特徴: 最大4GBのデータを保存可能。
  • :sqlコードをコピーするprofile_picture BLOB; -- プロフィール画像を格納

5. CLOB

  • 用途: 長文の文字データを格納。
  • 特徴: 最大4GBの文字データを保存可能。
  • :sqlコードをコピーするnotes CLOB; -- 長文のメモを格納

6. DATE

  • 用途: 日付と時刻を格納。
  • 特徴: 年、月、日、時、分、秒をサポート。
  • :sqlコードをコピーするhire_date DATE; -- 雇用日を格納

7. TIMESTAMP

  • 用途: DATE型を拡張し、ナノ秒精度まで記録。
  • :sqlコードをコピーするlast_update TIMESTAMP(3); -- 小数秒3桁で時刻を格納

3. 実用例: 商品管理テーブルの作成

以下は、さまざまなデータ型を活用した商品の管理テーブルの例です。

CREATE TABLE product_catalog (
product_id NUMBER(10) PRIMARY KEY,
product_name VARCHAR2(100) NOT NULL,
description CLOB,
image BLOB,
price NUMBER(10, 2) DEFAULT 0,
release_date DATE,
last_updated TIMESTAMP DEFAULT SYSTIMESTAMP
);

データ挿入例

INSERT INTO product_catalog (product_id, product_name, price, release_date)
VALUES (1, 'Smartphone X', 799.99, TO_DATE('2024-12-15', 'YYYY-MM-DD'));

4. 設計のベストプラクティス

  1. データ型を慎重に選択
    • 数値にはNUMBERを、可変長文字列にはVARCHAR2を使用するなど、データの性質に合わせて選びます。
  2. 制約を活用する
    • PRIMARY KEY、FOREIGN KEYなどを設定してデータの整合性を確保。
  3. 可読性の高い命名
    • 列名やテーブル名には統一された命名規則を使用(例: スネークケースやキャメルケース)。
  4. ストレージ効率を考慮
    • 必要以上に大きなデータ型を設定しないようにしましょう。

5. よくあるエラーと対処法

エラー1: ORA-00955 テーブル名が既に存在します

  • 原因: 同名のテーブルが既に存在。
  • 対処: テーブルを削除して再作成する。sqlコードをコピーするDROP TABLE テーブル名 CASCADE CONSTRAINTS;

エラー2: ORA-01747 列名が不正

  • 原因: 列名に予約語や特殊文字を使用。
  • 対処: 列名を変更するか、ダブルクォートで囲む。sqlコードをコピーする"COLUMN"

この記事を通じて、Oracleデータベースのテーブル作成の基礎をしっかりと学べたはずです。次のステップとして、インデックスの作成やパフォーマンスチューニングについて学ぶのもおすすめです。

[参考]
Oracle Database SQL言語リファレンス 19c

コメント

タイトルとURLをコピーしました