基本情報技術者 2019年 春期 午前(科目A) 問26
問題文
関係モデルの属性に関する説明のうち、適切なものはどれか。
選択肢
ア:関係内の属性の定義域は重複してはならない。
イ:関係内の属性の並び順に意味はなく、順番を入れ替えても同じ関係である。(正解)
ウ:関係内の二つ以上の属性に、同じ名前を付けることができる。
エ:名前をもたない属性を定義することができる。
🔒 解説は解答すると表示されます
関係モデルの属性順序性【午前解説】
正解の理由
選択肢「イ」が正しい理由は、リレーショナルモデル(関係モデル)の定義に基づきます。関係は属性名(列名)をキーにして値を対応させたタプルの集合であり、タプルは属性名と値のペアの集合的な記述です。集合や写像として扱うため、属性の並び順(列の順序)は意味を持ちません。したがって、並び順を入れ替えても同じ関係(同一の意味を持つ集合)とみなされます。
解法ステップ
- 「関係モデル」の定義を思い出す(関係=タプルの集合、タプル=属性名→値の写像)。
- 各選択肢を定義と照合する:順序・名前・ドメインのルールを確認する。
- SQLの実装上の挙動と数理モデルの違いを区別して判断する。
- 最終的に「属性の順序は意味を持たない」ことを根拠に選択肢を決定する。
選択肢別の誤答解説
- ア: 関係内の属性の定義域は重複してはならない。→誤り。複数の属性が同じドメイン(たとえば整数や文字列)を持つことは許されます。ドメインの重複自体は問題ではありません。
- イ: 関係内の属性の並び順に意味はなく、順番を入れ替えても同じ関係である。 →正解。関係は集合的なタプルの集合であり、属性順序は定義上無意味です。
- ウ: 関係内の二つ以上の属性に、同じ名前を付けることができる。→誤り。属性名(列名)は関係内で一意でなければならず、同じ名前を付けることはできません。
- エ: 名前をもたない属性を定義することができる。→誤り。関係モデルでは各属性に名前(識別子)を付けて属性名→値の対応を定義します。名前なしの属性はモデル化できません。
よくある誤解
- SQLの画面表示やDDLでの列順をそのまま関係モデルの性質だと誤認する。表示順と数理的順序は別物です。
- ドメイン(属性の定義域)が重複してはならないと考える誤り。複数属性が同じドメイン(例えば整数)を持つことは問題ありません。
- 属性名の一意性と値の一意性を混同する。属性名は関係内で重複できませんが、属性値が重複すること自体はタプルの重複を除けば許容されます。
補足コラム
- タプルの内部で「属性の順序」が意味を持たない理由は、タプルを属性名をキーとする写像(関数)として考えるからです。つまりタプル t に対して t["年齢"] = 30 のように属性名で値を参照します。
- 現実のRDBMS(SQL)では、CREATE TABLEで定義する列順やSELECT句の順序が結果表示に影響しますが、これは実装上・表現上の話であり、関係モデルの数学的性質とは切り分けて考える必要があります。
- 属性名は関係内で一意であるべきですが、異なる関係(テーブル)間で同じ属性名を使うことはしばしばあります(例: id, name)。
FAQ
Q1: SQLでは列の順序を変えたら同じテーブルと言えるのですか?
A1: 実装上は同じスキーマを保ちつつも表示順が変わるだけで、数理モデル上の関係は同一です。DBMSによっては列順が意味を持つ操作もありますが、理論と区別してください。
A1: 実装上は同じスキーマを保ちつつも表示順が変わるだけで、数理モデル上の関係は同一です。DBMSによっては列順が意味を持つ操作もありますが、理論と区別してください。
Q2: 属性のドメインが同じだと設計上問題になりますか?
A2: 同じドメインを持つ属性があること自体は問題ありません。重要なのは属性名の意味と用途が混同されないよう設計することです。
A2: 同じドメインを持つ属性があること自体は問題ありません。重要なのは属性名の意味と用途が混同されないよう設計することです。
Q3: タプルの順序(行順)は関係モデルで意味がありますか?
A3: 関係モデルではタプルの順序も意味を持ちません。集合として扱うため行の並びは無関係です(ただし実用上の出力順序は別問題です)。
A3: 関係モデルではタプルの順序も意味を持ちません。集合として扱うため行の並びは無関係です(ただし実用上の出力順序は別問題です)。
関連キーワード: 関係モデル、リレーショナルモデル、属性、ドメイン、タプル、主キー、集合論、SQL、リレーショナル代数

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

