0Pricing
SQL Academy · レッスン

データ型の概要:INT VARCHAR DATE BOOLEAN

基本的なSQLデータ型である整数、varchar/text、日付とタイムスタンプ、ブール値、10進数を学び、各列に適した型を選べるようになります。

「データ型の概要:INT VARCHAR DATE BOOLEAN」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

型が重要な理由

すべての列には固定された型があります。型によって、次のことが決まります。

  • どの値が有効か
  • 各行が使用するストレージ容量
  • どの演算子や関数を適用できるか
  • プランナーがインデックスや結合をどのように選ぶか

整数型

PostgreSQLには、3種類のサイズの整数型があります。

SMALLINT  -- 2 bytes,  -32768 to 32767
INTEGER   -- 4 bytes,  ±2.1 billion       (alias: INT)
BIGINT    -- 8 bytes,  ±9.2 quintillion

-- Auto-incrementing variants:
SMALLSERIAL  BIGSERIAL  SERIAL

NUMERIC / DECIMAL

金額や正確な小数にはNUMERIC(precision, scale)を使います。FLOATは決して使わないでください。

CREATE TABLE invoices (
  id BIGSERIAL PRIMARY KEY,
  amount NUMERIC(12, 2) NOT NULL,   -- up to 10 digits + 2 decimals
  tax_rate NUMERIC(5, 4) NOT NULL   -- 0.0875 = 8.75%
);

FloatとNumericの違い

REAL(4バイト)とDOUBLE PRECISION(8バイト)は不正確です。2進数の小数を丸めるためです。科学計算には適していますが、金額の扱いには適していません。

-- Inexact:
SELECT 0.1::FLOAT + 0.2::FLOAT;   -- 0.30000000000000004

-- Exact:
SELECT 0.1::NUMERIC + 0.2::NUMERIC;  -- 0.3

テキスト型:VARCHARとTEXT

PostgreSQLには、主に2種類のテキスト型があります。

-- VARCHAR(n) — variable-length, max n characters
email VARCHAR(255)

-- TEXT — variable-length, no declared limit
description TEXT

-- In PostgreSQL both have the same performance.
-- VARCHAR(n) just adds a length check.
-- CHAR(n) (fixed-length, blank-padded) — avoid.

日付と時刻

日付と時刻には専用の型を使い、文字列として保存しないでください。

DATE         -- 2024-03-15
TIME         -- 14:30:00
TIMESTAMP    -- 2024-03-15 14:30:00      (no time zone)
TIMESTAMPTZ  -- 2024-03-15 14:30:00+02   (recommended)
INTERVAL     -- 1 day, 3 hours

-- Prefer TIMESTAMPTZ unless you have a strong reason not to.

ブール型

BOOLEANはTRUE、FALSE、またはNULLを保存します。

CREATE TABLE tasks (
  id BIGSERIAL PRIMARY KEY,
  done BOOLEAN NOT NULL DEFAULT false
);

SELECT * FROM tasks WHERE done;        -- shorthand for done = true
SELECT * FROM tasks WHERE NOT done;

UUID

グローバルに一意な識別子には、次の型を使います。

CREATE TABLE api_keys (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id BIGINT NOT NULL,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

JSONとJSONB

半構造化されたドキュメントには、次の型を使います。

-- JSON   — text, preserves whitespace, no index
-- JSONB  — binary, deduplicated keys, indexable with GIN

CREATE TABLE events (
  id BIGSERIAL PRIMARY KEY,
  payload JSONB NOT NULL
);

配列

PostgreSQLの列には、任意の基本型の配列を指定できます。

CREATE TABLE posts (
  id BIGSERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  tags TEXT[] NOT NULL DEFAULT '{}'
);

INSERT INTO posts (title, tags) VALUES
  ('Hello', ARRAY['sql', 'intro']);

SELECT * FROM posts WHERE 'sql' = ANY(tags);

適切な型を選ぶ

目安は次のとおりです。

  • 金額 → NUMERIC(FLOATは決して使いません)
  • ID → BIGSERIALまたはUUID
  • 日付 → イベントにはTIMESTAMPTZ、暦上の日にはDATE
  • 短いコード → VARCHAR(n)、長いテキスト → TEXT
  • フラグ → BOOLEAN

まとめ

要件を満たす最も小さな型を選びます。

  • 適切な型にすると、インデックスが小さくなり、統計情報が改善され、バグが減ります
  • 正確な小数にはNUMERICを使います
  • イベントのタイムスタンプにはTIMESTAMPTZを使います
  • 型付きデータを文字列として保存しないでください。検証機能とインデックスを失うためです

確認問題

商品の価格を保存する必要があります。どの型を選ぶべきですか。

よくある質問

「データ型の概要:INT VARCHAR DATE BOOLEAN」レッスンは無料ですか?

はい。「データ型の概要:INT VARCHAR DATE BOOLEAN」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「データ型の概要:INT VARCHAR DATE BOOLEAN」で何を学びますか?

基本的なSQLデータ型である整数、varchar/text、日付とタイムスタンプ、ブール値、10進数を学び、各列に適した型を選べるようになります。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「データ型の概要:INT VARCHAR DATE BOOLEAN」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. RDBMSとは何か、なぜテーブルが重要か
  2. 主キーと一意性
  3. NULL:第3の真理値
  4. データ型の概要:INT VARCHAR DATE BOOLEAN
← SQL Academyに戻る