モジュールのレッスン (1/4)
高度なデータ型とENUM
前のレッスンでは、基本的な CREATE TABLE コマンドについて説明しました。次に、より正確かつ安全な方法でドメインをモデル化するために PostgreSQL が提供するいくつかの高度なデータ型を調べてみましょう。
数値型とテキスト型
PostgreSQL には数値とテキストのタイプがいくつかあります。適切なものを選択すると、検証と保管スペースの両方に役立ちます。
CREATE TABLE advanced_products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description TEXT,
-- NUMERIC(p,s) dove p = cifre totali, s = cifre decimali
price NUMERIC(10, 2) NOT NULL,
featured BOOLEAN DEFAULT FALSE
);TEXT対VARCHAR(n): Postgres ではパフォーマンスは同じです。VARCHAR(n)は、データベース レベルで挿入長を明示的に制限する場合にのみ使用します。NUMERIC(10, 2): 金銭や算術精度に最適です。ここでは、最大 8 桁の整数と 2 桁の小数点 (合計 10 桁) が許可されます。10.555を挿入すると、Postgres はそれを10.56に丸めます。
UUID タイプ
Web 上に公開される安全な識別子 (URL 内のパブリック ID など) の場合、多くの場合、従来の SERIAL 増分よりも UUID が優先されます。
CREATE TABLE public_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer TEXT NOT NULL,
total NUMERIC(10, 2)
);ENUM (列挙型)
多くの場合、列には事前に定義されたいくつかの値のうち 1 つだけを含める必要があります (注文ステータス: 「新規」、「支払い済み」、「発送済み」など)。 1 つのアプローチは CHECK キーワードを使用することですが、PostgreSQL はカスタム ENUM タイプを提供します。
-- Dobbiamo prima creare il tipo:
CREATE TYPE order_status AS ENUM ('nuovo', 'pagato', 'spedito', 'cancellato');
-- Ora possiamo usarlo in una tabella:
CREATE TABLE orders_demo (
id SERIAL PRIMARY KEY,
status order_status NOT NULL DEFAULT 'nuovo'
);これにより、誰も無効なステータスを挿入できないことが保証され、データの一貫性が保護されます。
試してみてください
id (SERIAL pk)、test_id (デフォルトの gen_random_uuid() を持つ UUID)、score (null 以外の整数)、および content (TEXT) を使用して「user_reviews」テーブルを作成します。他のフィールドでは、型を超えた明示的な制約は必要ありません。
ヒントを表示
CREATE TABLE user_reviews (...) を記述してから、さまざまなフィールドを記述します。カンマを覚えておいてください。
3 回の試行後に解決策が利用可能になります
復習演習
まず、値「admin」および「user」を持つ ENUM タイプ「user_role」を作成します。次に、ID (SERIAL pk) とロール (先ほど作成したタイプ、NOT NULL) を使用して「enum_users」テーブルを作成します。
ヒントを表示
;を忘れないでください。 2 つのステートメント (CREATE TYPE と CREATE TABLE) を分離します。
3 回の試行後に解決策が利用可能になります