データベーススペシャリスト 2021年 午前2 問11
問題文
関係R, Sに次の演算を行うときRとSが和両立である必要のないものはどれか。
選択肢
ア:共通集合
イ:差集合
ウ:直積(正解)
エ:和集合
🔒 解説は解答すると表示されます
和両立性(リレーショナル代数)【午前2解説】
正解の理由
リレーショナル代数における和両立性(union-compatibility)は、2つの関係が和集合・差集合・共通集合などの「集合演算」を適用できるために、属性の数(次数)と対応する属性のドメイン(型)が一致していることを指します。和集合・差集合・共通集合は行を直接比較・集合演算するため、この条件が必要です。これに対して、ウの直積(Cartesian product)は2つの関係のスキーマを単純に結合して新たな関係を作る操作であり、元の関係同士が同じ次数・ドメインである必要はありません。したがって和両立である必要がないのは ウ(直積)です。
解法ステップ
- 和両立性の定義を確認:同じ次数(属性数)と対応属性のドメイン一致が必要。
- 各演算がどのように行を扱うかを考える:
- 和集合・差集合・共通集合:行ごとの比較/集合演算を行う → 属性対応が必須
- 直積:各組の組合せを列として連結する → 属性対応は不要
- 上記により、不要なのは直積と判断する。
選択肢別の誤答解説
-
ア: 共通集合
共通集合(intersection)は R と S に共通する行を取り出す操作であり、行同士を比較するため属性の数と型が一致していなければ比較できません。よって和両立が必要です。 -
イ: 差集合
差集合(R − S)は R に属するが S に属さない行を求めます。行の比較が前提なので、やはり属性対応(次数・ドメイン一致)が必要です。 -
ウ: 直積
直積は R の各行と S の各行の組合せを作り、それぞれの属性を連結して新しい行を作成します。R と S が異なる属性数・型でも操作可能です(属性名の衝突はリネームで解決)。したがって和両立は不要です。 -
エ: 和集合
和集合(union)は両関係の行を集合的に合成するため、各行が同じスキーマであることが前提です。和両立が必要です。
よくある誤解
- 「直積も列の対応が要る」と考える誤解:直積は対応する属性間で比較しないため、列の対応は不要です。ただし属性名が重複すると見やすさや実装上問題になるのでリネームするのが普通です。
- 「SQLのUNIONは常に重複を残す」との誤解:標準SQLでは SELECT はデフォルトで重複行を返しますが、集合演算子では UNION が重複を排除し、UNION ALL が重複を保持します。混同しないよう注意してください。
補足コラム
- 和両立(union-compatibility)の正式条件:2つの関係が同じ次数(列数)を持ち、同じ位置にある対応する列が同じドメイン(型)であること。必要に応じて射影(π)やリネーム(ρ)でスキーマを整えることで和両立にできる。
- 直積のスキーマの次数は R の次数 + S の次数。結果の属性名が重複する場合、明示的にリネームするか、属性名の接頭辞を付けるなどして衝突を避ける。
- SQLでの対応関係:UNION / INTERSECT / EXCEPT(差集合に相当)は一般に列数と型が揃っている必要がある。UNION は重複排除、UNION ALL は重複保持。SELECT 単体は重複行を返すが、SELECT DISTINCT で重複を排除する。
SQL の簡単な例:
-- SELECT はデフォルトで重複を返す
SELECT name FROM R;
-- UNION は重複を排除
SELECT name FROM R
UNION
SELECT name FROM S;
-- UNION ALL は重複を保持
SELECT name FROM R
UNION ALL
SELECT name FROM S;
FAQ
-
Q: 自然結合(natural join)では和両立が必要ですか?
A: いいえ。自然結合は共通の属性名を基に結合する操作であり、和両立(全属性の一致)は不要です。ただし共通属性の型は一致している必要があります。 -
Q: 和両立でない2つの関係の行を「合わせたい」場合、どうすればよいですか?
A: 必要な列を射影(π)で選択し、型が違えば変換・キャストし、属性名をリネーム(ρ)して同じスキーマに揃えれば和集合や差集合が可能になります。 -
Q: INTERSECT や EXCEPT の SQL 実装で重複の扱いはどうなりますか?
A: 標準SQLでは INTERSECT / EXCEPT もデフォルトで重複を排除します。データベースによっては ALL オプションをサポートして重複を保持する場合があります。
関連キーワード: 和両立、関係代数、直積、和集合、差集合、UNION、UNION ALL、属性リネーム、射影、集合演算

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

