基本情報技術者 2015年 春期 午前(科目A) 問29
問題文
新たにデータ項目の命名規約を設ける場合、次の命名規約だけでは回避できない問題はどれか。
〔命名規約〕
(1) データ項目名の末尾には必ず“名”、“コード”、“数”、“金額”、“年月日”などの区分語を付与し、区分語ごとに定めたデータ型にする。
(2) データ項目名と意味を登録した辞書を作成し、異音同義語や同音異義語が発生しないようにする。
選択肢
ア:データ項目“受信年月日”のデータ型として、日付型と文字列型が混在する。
イ:データ項目“受注金額”の取り得る値の範囲がテーブルによって異なる。(正解)
ウ:データ項目“賞与金額”と同じ意味で“ボーナス金額”というデータ項目がある。
エ:データ項目“取引先”が、“取引先コード”か“取引先名”か、判別できない。
🔒 解説は解答すると表示されます
データ項目命名規約の限界【午前解説】
正解の理由
命名規約の(1)は項目名の末尾区分語によりデータ型を統一することを要求しており、これにより「日付型と文字列型が混在する」ような問題(選択肢ア)は回避されます。
(2)は辞書で異音同義語や同音異義語を排除することを目的としているため、「賞与金額」と「ボーナス金額」のような同義語(選択肢ウ)や、項目名からコードか名称か判別できないケース(選択肢エ)は辞書の登録ルールで対応可能です。
しかし、取り得る値の「範囲」や業務ごとの制約(例えばテーブルAは0〜1,000,000、テーブルBは0〜10,000,000)の違いは、命名規約だけでは規定されません。したがって正解は イ です。
(2)は辞書で異音同義語や同音異義語を排除することを目的としているため、「賞与金額」と「ボーナス金額」のような同義語(選択肢ウ)や、項目名からコードか名称か判別できないケース(選択肢エ)は辞書の登録ルールで対応可能です。
しかし、取り得る値の「範囲」や業務ごとの制約(例えばテーブルAは0〜1,000,000、テーブルBは0〜10,000,000)の違いは、命名規約だけでは規定されません。したがって正解は イ です。
解法ステップ
- 命題の規約(1)(2)が何を保証するかを正確に把握する(型の統一、語彙の一意化)。
- 各選択肢が示す問題が「型」「語彙」「意味の判別」「値域/業務制約」のどれに該当するか分類する。
- 規約でカバーできる問題(型の混在、同義語・同音異義語、名称の曖昧さ)とできない問題(ドメインや業務制約の差)を比較する。
- 規約で明示的にカバーされていない選択肢を正解とする。
選択肢別の誤答解説
- ア: データ項目“受信年月日”のデータ型として、日付型と文字列型が混在する。
→ 誤り。規約(1)で区分語ごとに定めたデータ型にすることを義務付けているため、型の混在は回避可能です。 - イ: データ項目“受注金額”の取り得る値の範囲がテーブルによって異なる。
→ 正解。取り得る値の範囲(ドメイン、業務ルール)は命名規約と辞書だけでは統一できないため、別途ドメイン定義や制約が必要です。 (イ) - ウ: データ項目“賞与金額”と同じ意味で“ボーナス金額”というデータ項目がある。
→ 誤り。規約(2)で辞書に登録し、異音同義語を発生させないようにするため、同義語の重複は防げます。 - エ: データ項目“取引先”が、“取引先コード”か“取引先名”か、判別できない。
→ 誤り。末尾に“コード”や“名”などの区分語を付与するルールがあるため、判別できない状態は避けられます。
よくある誤解
- 命名規約があればデータ品質は全て担保される:命名は可読性や型の統一には効くが、値域や整合性ルールまでは保証しない点を見落としがちです。
- データ辞書を作れば自動的に運用される:辞書の存在だけで運用・検証ルールが実行されるわけではなく、設計・実装・テスト工程での運用が必要です。
- 接尾語だけで業務意味が完全に伝わる:接尾語は型を示すが、業務上の単位や通貨、端数処理など詳細ルールは別途定義が要ります。
補足コラム
命名規約はデータ設計の重要な第一歩ですが、真にデータ品質を担保するには「ドメイン定義(値域)」「業務制約(ルール)」「実装上の制約(DBのチェック制約や型付け)」「運用ルール(変更管理、承認)」の四つを揃える必要があります。
具体的にはデータ辞書に次を明記します:データ型、最小/最大値、単位、桁数、小数点処理、NULL許容、参照制約、業務上の意味(算出方法や集計の扱い)。
データベースでの実装例(SQL: CHECK 制約):
具体的にはデータ辞書に次を明記します:データ型、最小/最大値、単位、桁数、小数点処理、NULL許容、参照制約、業務上の意味(算出方法や集計の扱い)。
データベースでの実装例(SQL: CHECK 制約):
-- 受注金額の範囲をテーブルごとに統一してチェックする例
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_amount NUMERIC(12,2) NOT NULL,
CONSTRAINT chk_order_amount_range CHECK (order_amount BETWEEN 0 AND 1000000)
);
また、業務ごとに範囲が異なる場合はドメインごとのカラム名や別テーブル(price_policy など)でルールを明示する方法が有効です。
FAQ
Q: 命名規約だけで何が達成できますか?
A: 項目名の一貫性、読みやすさ、基本的なデータ型の統一や同義語・同音異義語の排除を達成できますが、値域・業務制約までは含まれません。
A: 項目名の一貫性、読みやすさ、基本的なデータ型の統一や同義語・同音異義語の排除を達成できますが、値域・業務制約までは含まれません。
Q: ドメイン定義はどこに書くべきですか?
A: データ辞書に明記し、設計書・ER図・DB定義書・テスト仕様にも反映して運用するのが望ましいです。
A: データ辞書に明記し、設計書・ER図・DB定義書・テスト仕様にも反映して運用するのが望ましいです。
Q: 同じ“金額”でもテーブルによって許容範囲が異なる場合の対応策は?
A: ドメインを分けて命名(例:order_amount_small, order_amount_large)、または制約テーブルでポリシーを管理し、実装でバリデーションを行います。
A: ドメインを分けて命名(例:order_amount_small, order_amount_large)、または制約テーブルでポリシーを管理し、実装でバリデーションを行います。
関連キーワード: 命名規約、データ辞書、データ型、ドメイン定義、値域制約、データ品質、データガバナンス、同音異義語、正規化

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

