PR

【DB】ドメインとは?CREATE(DROP) DOMAIN の使い方を1分で解説

Database

SQLではデータの型とその制約を定義するために様々な機能が提供されています。その一つが「DOMAIN(ドメイン/定義域)」です。

DOMAINとは一言で言えば、ユーザーが定義した特別なデータ型のことです。基本的なデータ型に制約を組み合わせることで、特定の目的や要件に適した独自のデータ型を作成することができます。

参考 データ型とは?

例えば、商品の価格を表すデータ型を定義するとしましょう。基本的には数値型ですが、価格はマイナスになることはありません。このような状況でDOMAINを活用することで、価格を表すデータが常に0以上となるような項目を作成することが可能になります。

この記事では、DOMAINの基本的な概念から、具体的な使用方法、さらには実際のデータベース設計におけるDOMAINの活用までを詳しく解説していきます。

このページで学べる内容
  • DOMAINの基本的な概念
    • CREATE DOMAIN
    • ALTER DOMAIN
    • DROP DOMAIN
  • DOMAINの活用例

プログラマーやシステムエンジニアを目指す方であれば知らないと恥ずかしい基本知識です。是非最後までご覧ください。

参考 【初心者向け】SQLの基本構文ルール

スポンサーリンク

SQL/DB 「DOMAIN」とは?

SQLにおけるDOMAINは、ユーザーが定義したデータ型のことを指します。

正の整数型、とか、{有:無} の2つの値だけを許可するデータ型が欲しいような場面でDOMAINが使えるということ。

これは基本的なデータ型と一緒にその値が満たすべき制約を組み合わせたもので、より特定の目的に適したデータ型を作成することができます。

すべてのデータベース管理システム(DBMS)がDOMAINという概念をサポートしているわけではありません。

例えば、PostgreSQLはDOMAINをフルにサポートしていますが、MySQLやSQLiteでは厳密な意味でのDOMAINはサポートされていません。(同じような役割を果たす機能としてENUMやCHECK制約が提供されています。)

そのため、特定のDBMSでDOMAINを使用する前に、そのDBMSがDOMAINをサポートしているかどうかを確認することが重要です。

例えば、年齢を表すデータ型を定義する場合、基本的には整数型を利用します。

しかし、人の年齢は通常、0以上の整数であり負の値を取ることはありません。また極端な大きな値(例えば1000歳以上)も現実的ではありません。

このような制約を組み込んだ新しいデータ型を定義することで、データの整合性を確保し、間違ったデータが入力されるのを防ぐことが可能になります。これがDOMAINの重要性です。

また、同じ制約を持つカラムを複数のテーブルで使用する場合にも、DOMAINは大変便利です。例えば、電話番号や郵便番号などの特定の形式を必要とするデータ型をDOMAINとして定義しておくと、それぞれのテーブルで一貫した制約を維持することが容易になります。これにより、データベース全体の整合性と管理の効率性が向上します。

以上のように、DOMAINはデータの型とその制約を一緒に定義することで、データの整合性を保つ上で非常に重要な役割を果たします。次の章では、DOMAINの作成、変更、削除について具体的に解説していきます。

ドメインの作成:CREATE DOMAIN

新しいDOMAINを作成するには、CREATE DOMAIN文を使用します。

/* 新しいDOMAINの作成 */
CREATE DOMAIN domain_name AS data_type
  CONSTRAINT constraint_name CHECK (value_condition);
  • domain_name:作成するDOMAINの名前
  • data_type:基本データ型
  • constraint_name:制約の名前
  • value_condition:制約条件
VALUEキーワード

VALUEキーワードは、SQLのCREATE DOMAIN文で使用される特殊なキーワードです。このキーワードは、ドメインの制約(CHECK制約)の定義内で使用され、そのドメインの値を参照します。

例えば、前述の年齢を表すデータ型をDOMAINとして定義する場合、次のようになります。

/* 年齢を表すDOMAINの作成 */
CREATE DOMAIN age AS INTEGER
  CONSTRAINT valid_age CHECK (VALUE >= 0 AND VALUE <= 130);

↑ではDOMAIN ageを作成しています。このageは整数型で、値は0以上130以下であるという制約を持っています。このように定義しておくことで、0未満や131以上の値がageに設定されるのを防ぐことができます。

ドメインの変更:ALTER DOMAIN

既存のDOMAINを変更するには、ALTER DOMAIN文を使用します。基本的な構文は次のとおりです。

/* 既存のDOMAINの制約の追加 */
ALTER DOMAIN domain_name
  ADD CONSTRAINT constraint_name CHECK (value_condition);

例えば、先ほど作成した年齢を表すDOMAINに、さらに値が120以上はありえないという制約を追加したいとします。その場合、次のように記述します。

/* 年齢を表すDOMAINに制約の追加 */
ALTER DOMAIN age
  ADD CONSTRAINT valid_age_upper_limit CHECK (VALUE <= 120);

↑では、すでに存在するDOMAIN ageに対して、新たに制約valid_age_upper_limitを追加しています。この制約により、ageの値が120を超えることはなくなります。

ドメインの削除:DROP DOMAIN

DOMAINを削除するには、DROP DOMAIN文を使用します。

/* 既存のDOMAINの削除 */
DROP DOMAIN domain_name;

例えば、先ほど作成した年齢を表すDOMAINが不要になったとします。その場合、次のように記述します。

/* 年齢を表すDOMAINの削除 */
DROP DOMAIN age;

この例では、DOMAIN ageを削除しています。

ただし、注意点として、すでに他のテーブルで使用されているDOMAINを削除することはできません。そのような場合には、まずDOMAINを使用しているカラムやテーブルを削除するか、別のデータ型に変更してから、DOMAINを削除します。

ドメインの活用例

これまでに、DOMAINの作成、変更、削除方法について詳しく見てきました

。この章では、これらの知識を活かして、実際のデータベース設計におけるDOMAINの活用方法についていくつかサンプルをご紹介します。

サンプル1 電話番号(日本の場合)

電話番号は通常特定の形式を持っています。以下の例では、日本の標準的な電話番号形式(3桁-4桁-4桁)を定義しています。

/* 電話番号を表すDOMAINの作成 */
CREATE DOMAIN phone_number AS VARCHAR(13)
  CONSTRAINT valid_phone_number CHECK (VALUE ~ '^[0-9]{3}-[0-9]{4}-[0-9]{4}$');

サンプル2 郵便番号

郵便番号も特定の形式を持っています。以下の例では、日本の標準的な郵便番号形式(3桁-4桁)を定義しています。

/* 郵便番号を表すDOMAINの作成 */
CREATE DOMAIN postal_code AS VARCHAR(8)
  CONSTRAINT valid_postal_code CHECK (VALUE ~ '^[0-9]{3}-[0-9]{4}$');

サンプル3 メールアドレス

以下の例では、基本的なメールアドレスの形式を定義しています。

/* メールアドレスを表すDOMAINの作成 */
CREATE DOMAIN email AS VARCHAR(255)
  CONSTRAINT valid_email CHECK (VALUE ~ '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$');

これらの例では、各々のドメインが特定の形式の文字列データを保証するために使用されています。データベース設計時にこれらのドメインを適切に使用することで、データの整合性を保つことができます。

なお、これらの正規表現は基本的なもので、全てのケースを網羅しているわけではありません。実際の利用時にはより詳細な条件を設定する必要があります。

【まとめ】ドメインとは何か

  • ドメインとはデータベース内で特定のタイプのデータを定義するための概念
  • 基礎となるデータ型とそのデータ型に適用する制約から成りたつ
  • 同じ制約を持つ複数のカラムに対して一貫性を保つために使用される
  • ドメインはCREATE DOMAIN/ALTER DOMAIN/DROP DOMAINを利用して操作する
  • すべてのDBMSがドメインの概念をサポートしているわけではないため使用前に確認が必要

SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。

SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?

とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
DatabaseIT-Skills
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました