Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL データ型

 

ドメイン

「ドメイン」は、適切な位置に精度や小数点以下の桁数を含み、さらにオプションとしてデフォルト値や CHECK 条件などを含んでいる、組み込みデータ型のエイリアスです。ドメインには、通貨データ型のように SQL Anywhere が事前に定義したものもありますが、ユーザが独自のドメインを追加することもできます。

ドメインは「ユーザ定義データ型」とも呼ばれ、データベース全体を通して、カラムを同じ NULL または NOT NULL 条件、同じ DEFAULT 設定、同じ CHECK 条件を持つ同じデータ型に自動的に定義できます。ドメインはデータベース全体の一貫性を高め、特定の種類のエラーを防止するのに役立ちます。

簡単なドメイン

ドメインを作成するには、CREATE DOMAIN 文を使用します。構文の詳細については、CREATE DOMAIN 文を参照してください。

次の文は street_address という名前の、35 文字の文字列のデータ型を作成します。

CREATE DOMAIN street_address CHAR( 35 );

CREATE DATATYPE は CREATE DOMAIN の代わりに使用できますが、おすすめしません。

データ型を作成するには RESOURCE 権限が必要です。データ型を一度作成すると、CREATE DOMAIN 文を実行したユーザ ID がそのデータ型の所有者となります。このデータ型はすべてのユーザが使用できます。他のデータベース・オブジェクトとは異なり、所有者名をデータ型名の前に置きません。

カラムを定義する場合は、street_address データ型を他のデータ型とまったく同じように使用します。たとえば、2 つのカラムがある次のテーブルでは、2 番目のカラムが street_address カラムです。

CREATE TABLE twocol (
    id INT,
    street street_address
);

DROP DOMAIN 文を使って、その所有者または DBA 権限を持つユーザがドメインを削除できます。

DROP DOMAIN street_address;

この文を実行できるのは、このデータ型をデータベースのどのテーブルでも使用していないときだけです。使用中のドメインを削除しようとすると、「テーブル 'ISYSUSERTYPE' 内のローのプライマリ・キーがテーブル 'ISYSTABCOL' 内の外部キー'ISYSUSERTYPE' によって参照されています。」とメッセージが表示されます。

ドメインの制約とデフォルト

NULL 入力可や DEFAULT 値の設定など、カラムに関連する属性の多くをドメインに組み込むことができます。データ型上で定義されたカラムは、NULL 設定、CHECK 条件、DEFAULT 値を自動的に継承します。このため、データベース全体を通してカラムに同じような意味を持たせ、統一性をとることができます。

たとえば、SQL Anywhere サンプル・データベース内の多くのプライマリ・キー・カラムは、ID 番号を保持する整数カラムです。次の文は、このようなカラムに有効なデータ型を作成します。

CREATE DOMAIN id INT
NOT NULL
DEFAULT AUTOINCREMENT
CHECK( @col > 0 );

デフォルトでは、id データ型を使用して作成されたカラムには NULL 値を格納できません。このため、これらのカラムにはデフォルト値として自動的に増分された値が設定され、必ず整数を保持しています。どのような識別子も @col 変数の中の col の代わりに使用できます。

カラムに対して明示的に属性を指定すると、データ型の属性を上書きできます。id データ型を使用して作成されたカラムに明示的に NULL が許可されると、id データ型の設定にかかわらず、NULL を使用できます。

互換性
  • 名前を付けた制約とデフォルト    SQL Anywhere では、ドメインをベース・データ型で作成し、オプションとして NULL または NOT NULL 条件、デフォルト値、CHECK 条件を含めます。名前付き制約と名前付きデフォルトはサポートしません。

  • データ型を作成する   SQL Anywhere では、sp_addtype システム・プロシージャを使って、ドメインを追加したり、CREATE DOMAIN 文を使用したりできます。