データベーススペシャリスト 2013年 午前2 問07
問題文
SQLにおけるドメインに関する記述のうち、適切なものはどれか。
選択肢
ア:基底表を定義するには、ドメインの定義が必須である。
イ:ドメインの定義にはCREATE文、削除にはDROP文を用いる。(正解)
ウ:ドメインの定義は、それを参照する基底表内に複製される。
エ:ドメイン名は、データベースの中で一意である必要はない。
🔒 解説は解答すると表示されます
ドメイン定義と管理【午前2解説】
正解の理由
SQLの「ドメイン」は列で使う再利用可能なデータ型+制約の定義で、作成・削除には標準のDDL文を用います。従って、ドメインの定義にCREATE文、削除にDROP文を使う選択肢が正しいため、選択肢イが正解です。
付記すると、ドメイン名の一意性は「スキーマ(名前空間)単位」で規定される点が重要です。つまり同一スキーマ内では名前が重複してはいけませんが、異なるスキーマ間では同名を許すDBMSもあります(DBMSごとに実装差があります)。
付記すると、ドメイン名の一意性は「スキーマ(名前空間)単位」で規定される点が重要です。つまり同一スキーマ内では名前が重複してはいけませんが、異なるスキーマ間では同名を許すDBMSもあります(DBMSごとに実装差があります)。
解法ステップ
- 「ドメイン」が何を指すかを確認する(ユーザ定義型+制約の集合)。
- ドメインの作成・削除に対応するSQL文が何かを思い出す(CREATE DOMAIN / DROP DOMAIN)。
- 各選択肢と照らし合わせ、ドメインの定義方法、格納の有無、名前のスコープについて正誤を判定する。
選択肢別の誤答解説
- ア: 基底表(テーブル)を定義するのにドメイン定義は必須ではありません。列には組込み型(INT, VARCHARなど)を直接指定でき、ドメインはあくまで任意の再利用手段です。よって誤り。
- イ: ドメインの作成はCREATE DOMAIN、削除はDROP DOMAIN(またはDBMS固有の文)で行うのが標準的であり正しい。例:
(DBMSによりシンタックス差やサポート状況があります)CREATE DOMAIN price AS NUMERIC(10,2) CHECK (VALUE >= 0); DROP DOMAIN price; - ウ: ドメイン定義が「基底表内に複製される」というのは誤り。テーブルの列はドメインを参照して型と制約を適用する形で保持され、定義が物理的に複製されるわけではありません。したがって、ドメインを変更すれば(DBMSの方針により)参照列に影響することがありますが、実装差に注意が必要です。
- エ: 「ドメイン名はデータベース内で一意である必要はない」との記述は文脈によって誤解を招きます。正しくは「スキーマ(名前空間)ごとに一意である必要がある」が標準的な考え方です。したがって選択肢の断定は不正確で、試験上は誤りとなります。
よくある誤解
- ドメインは必ずテーブルの内部にコピーされる:実際には参照される形で管理され、定義の更新が参照先にどう影響するかはDBMS次第です。
- ドメイン名はデータベース全体でユニーク:標準ではスキーマ単位の名前空間で管理されるため、スキーマを跨いで同じ名前を使える場合があります。
- すべてのDBMSがCREATE DOMAINをサポートする:MySQLなど一部DBMSはCREATE DOMAINを直接サポートしていないため、DBMS固有の代替機能(ユーザー定義型など)を使います。
補足コラム
- ALTER DOMAIN: SQL標準ではドメインに対する制約追加などの操作をサポートしますが、実際の挙動はDBMS依存です。たとえば、あるドメインに新たなCHECKを追加した場合、既存列の既存データが新制約に違反するとALTERが失敗することがあります。運用では事前にデータ検査や更新を行う必要があります。
- DBMS差異の実例:
- PostgreSQL: CREATE DOMAIN をサポート。ALTER/DROP も利用可。
- MySQL: 古くは CREATE DOMAIN をサポートしていない(代わりに列定義やユーザー定義型の利用)。
- SQL Server: CREATE TYPE を使ったエイリアス型やユーザー定義型で類似機能を提供する。
- Oracle: 標準的な CREATE DOMAIN はないが、ユーザー定義型や制約を駆使して同等の設計を行う。
FAQ
Q. ドメインを変更すると既存の列に自動適用されますか?
A. 原則として列はドメイン参照を保持するため、ドメイン定義の一部変更は参照列に影響しますが、DBMSによっては既存データチェックが行われたり、制約追加が拒否されたりします。事前検証が必要です。
A. 原則として列はドメイン参照を保持するため、ドメイン定義の一部変更は参照列に影響しますが、DBMSによっては既存データチェックが行われたり、制約追加が拒否されたりします。事前検証が必要です。
Q. 小規模システムでもドメインを使う利点は?
A. 型と共通の制約を再利用できるため、設計の一貫性・保守性が向上します。特に同じビジネスルールを複数列で共有する場合に有効です。
A. 型と共通の制約を再利用できるため、設計の一貫性・保守性が向上します。特に同じビジネスルールを複数列で共有する場合に有効です。
Q. CREATE DOMAIN が使えないDBMSではどうする?
A. DBMS固有のユーザー定義型(CREATE TYPEなど)や、テーブル設計で列定義を統一、あるいはチェック制約をテンプレート化して運用する方法があります。
A. DBMS固有のユーザー定義型(CREATE TYPEなど)や、テーブル設計で列定義を統一、あるいはチェック制約をテンプレート化して運用する方法があります。
関連キーワード: SQL、CREATE DOMAIN、DROP DOMAIN、スキーマ、ユーザ定義型、チェック制約、DBMS差異

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

