命名規約の区分語と辞書で防げないものを考える
基本情報技術者試験 平成30年度秋期 午前 問27 / データベース › データベース設計
過去問にチャレンジ
データ項目の命名規約を設ける場合,次の命名規約だけでは回避できない事象はどれか。 〔命名規約〕 (1) データ項目名の末尾には必ず“名”,“コード”,“数”,“金額”,“年月日”などの区分語を付与し,区分語ごとに定めたデータ型にする。 (2) データ項目名と意味を登録した辞書を作成し,異音同義語や同音異義語が発生しないようにする。
- ア
データ項目"受信年月日"のデータ型として,日付型と文字列型が混在する。
- イ
データ項目"受注金額"の取り得る値の範囲がテーブルによって異なる。
- ウ
データ項目"賞与金額"と同じ意味で"ボーナス金額"というデータ項目がある。
- エ
データ項目"取引先"が,"取引先コード"か"取引先名"か,判別できない。
会話形式の解説
講師この問題では、二つの命名規約がそれぞれ何を決めているのかを整理するのがポイントです。一つ目は末尾の区分語でデータ型を決める規約、二つ目は名前と意味を辞書に登録する規約です。どちらでも防げない事象を探します。
受験者命名規約というと、名前の付け方のルールだけだと思っていました。一つ目の規約は型まで決めているのですね。
講師そうです。区分語ごとにデータ型を一つに定めるので、名前を見れば型が分かるようになります。では、「受信年月日」で日付型と文字列型が混在する事象はどうでしょうか。
受験者末尾が「年月日」なら型は一つに決まるはずなので、混在は起きないと思います。一つ目の規約で防げますね。
講師そのとおりです。次に、「取引先」が取引先コードか取引先名か判別できない事象はどうですか。
受験者これは辞書の問題かと思いましたが、そもそも区分語が付いていない名前ですね。一つ目の規約では区分語を必ず付けるので、「取引先」という名前自体が許されないということでしょうか。
講師はい。規約に従えば「取引先コード」か「取引先名」のどちらかになるので、区別がつきます。では「賞与金額」と「ボーナス金額」が同じ意味で併存している事象は?
受験者表記は違うのに意味が同じなので、異音同義語ですね。辞書で名前と意味を一対一に管理すれば、どちらかに統一できるので、二つ目の規約で防げます。
講師よく整理できています。残るのは「受注金額」の取り得る値の範囲がテーブルごとに違う事象です。これは型の問題でしょうか、名前と意味の対応の問題でしょうか。
受験者型は「金額」の区分語で一つに決まっていて、名前も同じです。でも、その型の中でどこからどこまでの値を許すかは、どちらの規約にも書かれていません。
講師そこが判断の決め手です。同じ型・同じ名前のままでも、範囲の不一致は起こり得ます。ですから、これが命名規約だけでは回避できない事象です。
受験者まとめると、一つ目の規約は型の不統一と意味のあいまいさ、二つ目の規約は異音同義語と同音異義語を防ぐもので、値の範囲はどちらの守備範囲でもない、ということですね。
講師そのとおりです。値の範囲はドメインと呼ばれ、データ辞書でドメインとして範囲を定義したり、データベースの検査制約や入力チェックで制限したりします。「命名規約で防げないもの」を問われたら、名前と型以外の性質を扱う選択肢を探すと見つけやすくなります。
まとめ
データ項目の命名規約のうち、区分語ごとにデータ型を定める規約は、型の混在や「取引先」のように区分語のないあいまいな名前を防ぎます。辞書で名前と意味を登録する規約は、「賞与金額」と「ボーナス金額」のような異音同義語や同音異義語を防ぎます。しかし、データ型が決まっても取り得る値の範囲(ドメイン)までは決まらないため、「受注金額」の値の範囲がテーブルごとに異なる事象は命名規約だけでは回避できません。値の範囲は、データ辞書でのドメイン定義や検査制約、入力チェックなど別の仕組みでそろえます。
解答・解説
正解はイです
この問題のテーマ
データ項目の命名規約が何を統一し、何を統一しないのかを見分ける問題です。区分語でデータ型をそろえるルールと、辞書で語彙をそろえるルールの効果の範囲を問うています。
解き方の考え方
まず、二つの規約がそれぞれ何を決めているかを整理します。(1)は項目名の末尾の区分語からデータ型が一つに決まるようにする規則で、(2)は名前と意味を辞書で一対一に対応させる規則です。各選択肢の事象を「型の問題」「名前と意味の対応の問題」「どちらでもない問題」に振り分け、どちらにも当てはまらない事象を選びます。
選択肢ごとの解説
- ×ア データ項目"受信年月日"のデータ型として,日付型と文字列型が混在する。「受信年月日」の型の混在は、区分語「年月日」で回避できます。規約(1)では区分語ごとにデータ型を一つに定めるので、末尾が「年月日」の項目はすべて同じ型になり、日付型と文字列型が混在する余地はありません。
- ○イ データ項目"受注金額"の取り得る値の範囲がテーブルによって異なる。「受注金額」の値の範囲がテーブルごとに違うという事象は、規約では防げません。規約(1)で決まるのは「金額」という区分語に対応するデータ型までで、その型の中でどの範囲の値を許すかは決めていません。規約(2)も名前と意味の対応をそろえるだけなので、同じ型・同じ名前のままでも範囲の不一致は起こり得ます。
- ×ウ データ項目"賞与金額"と同じ意味で"ボーナス金額"というデータ項目がある。「賞与金額」と「ボーナス金額」の併存は、規約(2)で回避できます。この二つは表記が違っても意味が同じ異音同義語です。辞書に登録して名前と意味を一対一で管理すれば、片方に統一できます。
- ×エ データ項目"取引先"が,"取引先コード"か"取引先名"か,判別できない。「取引先」がコードか名称か分からないという事象は、規約(1)で回避できます。末尾に区分語を必ず付ける規則なので、区分語のない「取引先」という名前はそもそも付けられません。規約に従えば「取引先コード」か「取引先名」のどちらかになり、区別がつきます。
補足
値の範囲をそろえたい場合は、データ辞書でドメインとして範囲を定義したり、データベースの検査制約や入力チェックで制限したりします。命名規約とは別の仕組みが必要になります。
POINT
- 区分語とデータ型を対応させる規約は、型の不統一や項目の意味のあいまいさを防ぎます。
- 辞書で名前と意味を管理する規約は、異音同義語と同音異義語の発生を防ぎます。
- データ型が決まっても、取り得る値の範囲(ドメイン)までは決まりません。
- 「命名規約で防げないもの」を問われたら、名前と型以外の性質(値の範囲など)を扱う選択肢を探します。
