DOMAIN (Postgres)
制約を埋め込んだ独自の型を作れるPostgreSQLの機能。CREATE DOMAIN email AS TEXT CHECK (VALUE ~ '^[^@]+@[^@]+$')と定義して列の型に使えば、制約が自動的についてくる。
使いどころは、同じCHECKを20個のテーブルに書き写さずに済ませることだ。たとえばCREATE DOMAIN positive_int AS INTEGER CHECK (VALUE >= 0)のように使う。複合型のためのCREATE TYPEとは別物である。ALTER DOMAINを実行すれば、そのドメインを使う全テーブルが一括で変わる。代償は、ロジックが型の中に隠れ、テーブル定義を見ても分かりにくくなる点。あまり人気のある機能ではなく、多くのPostgreSQLユーザーは列ごとのCHECKで済ませている。ENUM型も「型による制約」という同じ領域にあるが、こちらは固定の値リスト向けである。