戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2013年 午後1 問01


データベースの基礎理論に関する次の記述を読んで、設問1〜3に答えよ。

 M社は、Web上のSNS, ブログなど (以下、Webサービスという)のアクセスログデータを分析するサービスを提供している。M社では、契約しているWebサービスのサービスプロバイダ(以下、プロバイダという)に登録された利用者を対象として、Webサービスのアクセスログをとり、様々な観点から分析する情報システム(以下、本システムという)を、新たに構築することになった。  本システムは、Webサービスのリソース (SNS, ブログなどのページ)にアクセスした利用者の情報を収集する。具体的には、利用者のプロフィール情報の収集、利用時の位置情報の収集などである。 M社では、これらの機能によって、利用者の行動傾向などを時間的・空間的に分析することを目指している。 本システムを構築するに当たって、具体例を用いて検討しながら、関係スキーマを設計することにした。本システムのデータモデルで検討した関係スキーマは、図1のとおりである。  図3〜5は、図2の関数従属性の表記法に従って、属性間の関数従属性を表したものである。図1,図3〜5の属性とその意味及び制約を、表1に示す。   データベーススペシャリスト試験(平成25年 午後1 問1 図1)
データベーススペシャリスト試験(平成25年 午後1 問1 表1)
〔利用者の行動傾向分析〕  利用者の行動傾向分析を行うために、関係“所属” 及び関係 “アクセスログ”に対して内自然結合演算及び射影演算を行い、関係 “利用実績” を作成した。 表2, 3は、関係 “所属”及び関係 “アクセスログ” の具体例である。 表4は、表2及び表3に対する演算結果の関係 “利用実績” の具体例である。
データベーススペシャリスト試験(平成25年 午後1 問1 表3)

設問1:関係“名寄せ”、“利用者” 及び図3, 4について、(1)〜(3)に答えよ。

問題文を見る
(1) 図3の関係 “名寄せ” の候補キーを全て答えよ。

模範解答

{プロバイダID、利用者ID}

解説

解答の論理構成

  1. 【問題文】の図3は「関係“名寄せ”、“利用者”の属性間の関数従属性」と明記されている。
  2. 図2の凡例より、矩形A→矩形Bの矢印は “A → B” を意味する。
  3. 図3で中央の太枠に格納された{プロバイダID、利用者ID}から、上部の「名寄せID」へ矢印が伸びているため

    が成立する。
  4. 名寄せIDからプロバイダID・利用者IDに向かう矢印は存在しない。従って

    である。
  5. 関係“名寄せ”(プロバイダID、利用者ID、名寄せID)で全ての属性を関数的に決定できる最小属性集合を列挙すると、{プロバイダID、利用者ID}のみが該当し、これが候補キーとなる。

誤りやすいポイント

  • 「名寄せIDは一意に識別するID」とあるため単独キーと決め付ける。矢印の向きを無視すると誤答になる。
  • {プロバイダID、利用者ID}のどちらか片方だけでキーになると誤解する。図3では二つがセットになって初めて名寄せIDを決定している。
  • 関数従属性の集合全体ではなく、図3に描かれた部分のみを見て候補キーを判定すべき点を見落とす。

FAQ

Q: 名寄せIDが一意なら候補キーにできないのですか?
A: 図3に「名寄せID → プロバイダID, 利用者ID」を示す矢印がないため、名寄せID単独では他属性を決定できる保証がありません。候補キーの判定は 必ず関数従属性に基づいて 行います。
Q: 図3に示されていない追加の業務規約を想定しても良いですか?
A: 試験では図・表に示された事実のみを前提とします。問題文外の想像で候補キーを追加すると誤答になります。
Q: 二つ以上の候補キーが存在する場合はすべて挙げる必要がありますか?
A: はい。設問に「全て答えよ」とある場合は列挙が必須です。本問は{プロバイダID、利用者ID}のみなので一つで完結します。

関連キーワード: 関数従属性、候補キー、主属性、データモデル、正規化

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:関係“名寄せ”、“利用者” 及び図3, 4について、(1)〜(3)に答えよ。

問題文を見る
(2) 図3の関係 “利用者” は、タプル挿入に関してどのような問題があるか。 その内容を、35字以内で具体的に述べよ。 また、第3正規形に分解した関係スキーマを示せ。なお、分解した関係スキーマの関係名は任意とし、主キーは実線の下線で示すこと。

模範解答

内容:  ・利用者ごとに、特性名、特性タイプが重複して登録される。  ・特性値ごとに、生年月日、性別、郵便番号が重複して登録される。  ・事前に特性ID、特性名、特性タイプを登録しておくことができない。 関係スキーマ:  利用者(プロバイダID、利用者ID、生年月日、性別、郵便番号)  利用者特性(特性ID、特性名、特性タイプ)  利用者特性値(プロバイダID、利用者ID、特性ID、特性値)

解説

解答の導き方

図3の下部にある利用者の関係スキーマは「利用者(プロバイダID、利用者ID、生年月日、性別、郵便番号、特性ID、特性名、特性タイプ、特性値)」です。ここから問題点を順に導きます。
  1. キー候補の決定
    表1に「利用者ごとに複数の特性が管理される」とあるので、同一の(プロバイダID、利用者ID)に対して複数の特性IDが対応し得ます。したがって一行はプロバイダ+利用者+特性の組合せを表し、自然な候補キーは
    です。
  2. 図と表から読み取れる主要な関数従属性
    • 表1に「特性IDに対応する特性の名称」「特性タイプ」とあるので
    • 図3の矢印と属性の意味から
    • 利用者の特性値はプロバイダ+利用者+特性で定まるため
  3. 正規形の判定と挿入異常の原因
    上の従属性から、生年月日等は候補キー の真部分 にのみ依存し、また特性名・特性タイプは のみに依存します。これらは部分従属であり第2正規形を満たしません。結果として挿入時に次のような問題(挿入異常)が発生します。
    短くまとめると:
    "特性を事前登録できず挿入異常が生じる"
    (具体的には、特性(特性ID・特性名・特性タイプ)を利用者と独立して登録できない、あるいは利用者が特性を持たない場合に利用者情報を挿入できない、という異常が起きます。)
  4. 第3正規形への分解
    部分従属を取り除くために、従属性ごとに関係に分解します。第3正規形へ分解した一例を示します(関係名は任意、主キーを下線で示します)。
    利用者(プロバイダID、利用者ID、生年月日、性別、郵便番号)
    利用者特性(特性ID、特性名、特性タイプ)
    利用者特性値(プロバイダID、利用者ID、特性ID、特性値)
    分解後は、利用者特性値 の (プロバイダID, 利用者ID) が 利用者 を、特性IDが 利用者特性 を参照する外部キー制約を張ることで整合性を保ちます。

誤りやすいポイント

  • 図3の矢印を誤読して としてしまう(実際は利用者は複数特性を持ちうる)。
  • 特性IDの一意性のスコープ(プロバイダ内かシステム全体か)を確認せずに分解する。表1の記述を確認して扱いを決める。
  • 「部分従属」と「推移的従属」を混同して、どの従属性が第3正規形違反かを誤判断する。
  • 挿入異常だけでなく、更新・削除異常も同じ根本(冗長な属性配置)に起因することを忘れる。

FAQ

Q: 特性IDがプロバイダ内でのみ一意なら分解は変わりますか?
A: はい。その場合は利用者特性の主キーを とするのが適切です。問題文の説明に合わせて一意性のスコープを確認してください。
Q: 分解後の参照整合性はどう保てばよいですか?
A: 利用者特性値 の (プロバイダID, 利用者ID) に対して 利用者 を参照する外部キー、特性IDに対して 利用者特性 を参照する外部キーを設定します。これで重複を減らし整合性を維持できます。
Q: なぜ第3正規形まで分解するのですか?
A: 部分従属を除去して冗長性を減らし、挿入・更新・削除の異常を防ぐためです。今回のように属性が候補キーの真部分に依存する場合は2NFを満たさず、さらに推移的従属があれば3NF違反となるため分解します。

関連キーワード: 関数従属性、部分従属、正規化、第3正規形、挿入異常

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問1:関係“名寄せ”、“利用者” 及び図3, 4について、(1)〜(3)に答えよ。

問題文を見る
(3) 図4の関数従属性を、□ には属性名を記入し、図2中の凡例の欄に示した表記法に従って完成させよ。

模範解答

データベーススペシャリスト試験(平成25年 午後1 問1 設問1-3解答)

解説

解答の論理構成

  1. 所属関係に含まれる属性と制約を整理
    • 【表1】では、所属関係の構成要素として
      「プロバイダID」「利用者ID」「組織ID」「職種」「所属登録日付」
      が示されています。
    • また制約として
      「利用者が所属する組織での職種は、同時期には一つだけ登録できる。」
      と記述されています。
  2. 「同時期には一つだけ」の読み替え
    • “同時期” を一意に表すキーが 「所属登録日付」です。
    • したがって組 ( {\text{プロバイダID}, \text{利用者ID}, \text{所属登録日付}} )
      が決まれば、その時点での「職種」は一意に定まります。
      → 関数従属性
      [ {\text{プロバイダID}, \text{利用者ID}, \text{所属登録日付}} ;\to; \text{職種} ]
  3. 組織履歴と所属履歴の関係付け
    • 所属表のキーに含まれる「組織ID」は、同じタイムスタンプで “その時点での組織” を指す必要があります。
    • 所属表の履歴行は1行1時点ですから、同じ組
      [ {\text{プロバイダID}, \text{利用者ID}, \text{所属登録日付}} ]
      に対して「組織ID」も一意となります。加えて履歴情報として組織側の日付「組織登録日付」が必要です。
      よって
      [ {\text{プロバイダID}, \text{利用者ID}, \text{所属登録日付}} ;\to; {\text{組織ID}, \text{組織登録日付}} ]
  4. 組織表の履歴制約
    • 【表1】には
      「組織情報(組織名称、郵便番号)は、履歴が管理される。」
      とあり、組織表の主キーが
      ({\text{組織ID}, \text{組織登録日付}})
      であることを示唆しています。
    • したがって
      [ {\text{組織ID}, \text{組織登録日付}} ;\to; {\text{組織名称}, \text{郵便番号}} ]
  5. 図2の凡例に従い、以上3本の関数従属性を図4に配置
    • 先頭のFDを示す矢印:
      「プロバイダID/利用者ID/所属登録日付」から「職種」へ
    • 2本目のFDを示す矢印:
      「プロバイダID/利用者ID/所属登録日付」から「組織ID/組織登録日付」へ
    • 3本目のFDを示す矢印:
      「組織ID/組織登録日付」から「組織名称/郵便番号」へ
      これで図4の □ は
      「プロバイダID」「利用者ID」「所属登録日付」
      「組織ID」「組織登録日付」
      「組織名称」「郵便番号」
      が正しく埋まります。

誤りやすいポイント

  • 「職種」が決定すると思い込む
    一見 “事務”“営業” などは固有の職種名なのでキーに見えますが、同じ職種を複数利用者が持つため逆向きFDになりがちです。
  • 履歴日付の漏れ
    組織側も履歴管理されるため「組織登録日付」を忘れるとFDが成り立たず、正規化判定を誤ります。
  • 主キーの取り違え
    所属表の主キーを 「プロバイダID」「利用者ID」だけと早合点し、同一利用者の転籍・異動履歴を区別できなくなるケースが頻発します。

FAQ

Q: 所属表の主キーはなぜ「所属登録日付」まで必要なのですか?
A: 利用者が異動・転籍するたびに行を追加する履歴管理方式なので、同一利用者でも複数行が登録されます。重複を避けるには「いつの情報か」を識別する「所属登録日付」を含める必要があります。
Q: 「組織ID」と「郵便番号」は1対1ではないのですか?
A: 組織が住所を変更すれば郵便番号も変わり得ます。履歴を管理するため「組織登録日付」を併せて主キーとし、その時点での「郵便番号」を決定させます。
Q: 関数従属性が確定したら次に何を確認すればよいですか?
A: FDをもとに候補キーと部分従属性・移行従属性の有無を確認し、正規化段階(第3正規形やBCNF)に適合しているかをチェックします。

関連キーワード: 関数従属性、履歴管理、候補キー、正規化、主キー

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:関係 “サービス提供リソース”及び図5について、(1)、(2)に答えよ。

問題文を見る
(1) 図5の関係 “サービス提供リソース” の候補キーを全て答えよ。 また、部分関数従属性、推移的関数従属性の有無を、“あり” 又は “なし” で答えよ。“あり”の場合は、その関数従属性の具体例を、図2中の意味の欄に示した表記法に従って示せ。

模範解答

候補キー:{ プロバイダID、サービス機能ID、利用者ID } 部分関数従属性の有無:なし 推移的関数従属性の有無:あり 部分関数従属性: 推移的関数従属性:  ・{プロバイダID、サービス機能ID、利用者ID} →   リソースID →   {リソース名称、リソース種別、配信スキーマ}  ・{プロバイダID、サービス機能ID、利用者ID} →   URI →   {リソース名称、リソース種別、配信スキーマ}

解説

解答の論理構成

  1. 図5の中央長方形には
    プロバイダID、サービス機能ID、利用者ID|リソースID、タイムスタンプ
    という配置が示されている。上下2段で区切られているが、その中間の縦線は論理的な境界を示すだけで、各行は1レコードである。
  2. 【問題文】「関係 “サービス提供リソース”(プロバイダID, サービス機能ID, 利用者ID, …)」より、行を一意に識別できる最小組合せを探す。
    • プロバイダID単独では、同じプロバイダが複数機能・利用者を持つ。
    • サービス機能ID単独でも、同一機能を複数プロバイダが提供し得る。
    • 利用者ID単独はプロバイダ内でしか一意でない。
      結果、3属性を合わせた {プロバイダID、サービス機能ID、利用者ID} が最小の一意識別子=候補キー。
  3. 部分関数従属性の判定
    部分関数従属性は “候補キーの真部分集合 → 非キー属性” が存在するときに生じる。図5にその矢印は描かれていないため なし。
  4. 推移的関数従属性の判定
    • 図5下部の矢印
      {プロバイダID、サービス機能ID、利用者ID} → リソースID
      リソースID → {URI、リソース種別、リソース名称、配信スキーマ}
      2段階で非キー属性が別の非キー属性を決定しており、推移的関数従属性 あり。
  5. 以上より模範解答と一致する。

誤りやすいポイント

  • 「サービス名称/管理者名」→サービス機能IDの矢印を見て“部分従属性あり”と誤判定。これは候補キーの一部ではなく別集合からの従属性なので該当しない。
  • リソースIDを候補キーに含めて {プロバイダID、サービス機能ID、利用者ID、リソースID} としてしまう。リソースIDは他の3属性によって一意に決まる(従属性側)ため冗長。
  • 推移的従属性を “URI → リソースID” と逆向きに読んでしまう。図では矢印の向きが決定側→従属側である点に留意。

FAQ

Q: プロバイダIDや サービス機能IDが候補キーに必ず入る根拠は何ですか?
A: 【問題文】の関係スキーマが「プロバイダID, サービス機能ID, 利用者ID, …」で開始しており、さらに図5で3属性が同一枠内に配置され、外部へ出る矢印が存在するため、この3属性が行を識別する設計意図が読み取れます。
Q: 「サービス名称」や「管理者名」は正規化でどこに置くべきでしょうか?
A: サービス名称/管理者名 → サービス機能IDという従属性から、それらはサービス機能IDを主キーとする別関係(図5中の “Webサービス”)へ分離されており、サービス提供リソース表には含まれていません。
Q: 推移的関数従属性があると、第何正規形に違反していますか?
A: 候補キー以外の属性間に推移的従属性が残っている状態は、第3正規形に不適合(第2正規形には適合)となります。

関連キーワード: 関数従属性、候補キー、正規化、推移的従属性、第3正規形

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問2:関係 “サービス提供リソース”及び図5について、(1)、(2)に答えよ。

問題文を見る
(2) 図5の関係 “サービス提供リソース”は、第1正規形、第2正規形、第3正規形のうち、どこまで正規化されているかを答えよ。 また、第3正規形でない場合は、第3正規形に分解した関係スキーマを示せ。  なお、分解した関係スキーマの関係名は任意とし、主キーは実線の下線で示すこと。

模範解答

正規形:第2正規形 関係スキーマ:  サービス提供(プロバイダID、サービス機能ID、利用者ID、リソースID、利用者登録日付)  リソース(リソースID、リソース名称、URI、リソース種別、配信スキーマ)

解説

解答の導き方

  1. 対象属性の確認
    図1に「サービス提供リソース(プロバイダID、サービス機能ID、利用者ID、利用者登録日付、リソースID、URI、リソース種別、リソース名称、配信スキーマ)」とあるので、この関係の属性は上記のとおりです。図5の図示を見ると、リソースに関する属性群(リソース名称、URI、リソース種別、配信スキーマ)は「リソースID」から決まることが示されており、また中央上部(サービス機能ID、プロバイダID、利用者ID)から「利用者登録日付」へ関係が示されています。これらから関数従属性を整理します。
  2. 図5から読み取れる主要な関数従属性(要約)
  • 「リソースID」 → 「リソース名称、URI、リソース種別、配信スキーマ」(図5の矢印より)
  • 「プロバイダID、サービス機能ID、利用者ID」 → 「利用者登録日付」 (図5の中央上部の矢印と、属性の説明「利用者登録日時は利用者、プロバイダごとにWebサービスとして本システムに登録した日付」から)
  1. 候補キーの決定と正規形判定の手順
  • 候補キー候補を考えると、問題文の意味と図5の矢印から、「プロバイダID、サービス機能ID、利用者ID」の組がこの関係内で利用者の登録情報を一意に表すキーになると判断できます(以後これをKと表す)。
  • 第1正規形(1NF):属性が原子値で表されているため満たします。
  • 第2正規形(2NF):候補キーKが複合キーである場合、非キー属性がKの部分集合のみに依存していないかを調べます。ここで、リソースに関する属性は「リソースID」に依存しますが、「リソースID」はKの一部分(例えばプロバイダIDや 利用者IDのみ)ではなくKによって決まる非主キー属性として扱われます。利用者登録日付はK全体に依存しています。したがって、非主キー属性がKの真部分集合のみに依存する「部分関数従属性」は図5から読み取れず、第2正規形は満たします。
  • 第3正規形(3NF):非キー属性が別の非キー属性を決定している(推移的関数従属性)がないかを調べます。ここではK → リソースID (リレーション内にリソースIDを保持しているため成立)かつ リソースID → リソース名称 等が成立するため、リソース名称 等はKを介してリソースIDによって決まる「推移的関数従属性」を持ち、第3正規形の要件を満たしません。
結論:図5の関係「サービス提供リソース」は第2正規形まで正規化されているが、第3正規形ではない。
  1. 第3正規形に分解する関係スキーマ(主キーは下線で示す)
  • サービス提供(プロバイダID、サービス機能ID、利用者ID、リソースID、利用者登録日付)
    • 説明:K = (プロバイダID, サービス機能ID, 利用者ID) を主キーとし、そのもとで利用者登録日付や登録したリソースIDを保持します。
  • リソース(リソースID、リソース名称、URI、リソース種別、配信スキーマ)
    • 説明:リソースIDを主キーとし、リソースに固有の属性群を格納します。
この分解により、元の関係にあったK → リソースID → リソース名称 等という推移的従属性は解消され、どちらの関係も第3正規形を満たします。

誤りやすいポイント

  • 図中の矢印の読み方を誤るとキーや従属性を間違える。図5で複数属性を含む大きな矩形から矢印が伸びている場合は、その矩形に含まれる属性の集合が決定子として扱われる点に注意してください。
  • 候補キーの定義を誤ると「部分関数従属性」と「推移的関数従属性」を取り違える。例えば誤ってリソースIDを候補キーに含めると、リソース名称 等の従属性が「部分従属性」に見えてしまい判定を誤ります。
  • 候補キーに不要な属性を含めると、その集合は最小性を失い候補キーではなく非最小なキー(スーパーキー)になります。最小性(要素の取り除きで一意性が保てなくなること)を必ず確認してください。
  • 切り出すべき属性群(今回はリソースに関する属性)がどれかを見落とすと、第3正規形化のための分解が不十分になります。

FAQ

Q: なぜ主キーを「プロバイダID、サービス機能ID、利用者ID」と決められるのですか?
A: 図1で「サービス提供リソース」の属性一覧にこれらが含まれており、図5では中央上部(サービス機能ID、プロバイダID、利用者ID)から利用者登録日付へ従属性が示されています。属性説明にも「利用者登録日時は利用者、プロバイダごとにWebサービスとして本システムに登録した日付」とあるため、この組がその関係内で登録情報を一意に表すキーとして妥当と判断できます。
Q: 候補キーに余計な属性を入れるとどうなりますか?
A: 余計な属性を含めると「最小性」が失われます。最小性を満たさない一意性集合は候補キーではなく非最小なキー、すなわちスーパーキーになります。つまり一意性は保てますが本来の候補キーの要件(最小であること)を満たしません。
Q: もし同一利用者が同一サービスで複数のリソースを登録できる場合はどう判定すればよいですか?
A: その場合は元の候補キーの定義が変わります。利用者が同一サービスで複数リソースを持てるなら、行を一意に表すキーにリソースIDを含める必要があり得ます(例: プロバイダID, サービス機能ID, 利用者ID, リソースID)。そのようにキーが変わると、第2正規形・第3正規形の判定も変わるため、まず実際の業務要件(同一サービスに対する利用者のリソースの多重度)から候補キーを正しく定めてから正規化判定を行ってください。

関連キーワード: 関数従属性、正規化、第3正規形、部分関数従属性、推移的関数従属性

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:表2〜4について(1)〜(3)に答えよ。

問題文を見る
(1) 表4の関係 “利用実績”には、アクセスした時点の利用者の所属を前提にした場合に現れてはならないタプルがある。 そのタプルの番号を全て答えよ。

模範解答

②

解説

解答の論理構成

  1. 前提
    • 関係“所属”は履歴管理されるため、同一キーで複数レコードが保持される(表2)。
    • 「アクセスした時点の利用者の所属を前提」とは、タイムスタンプ 時点で有効な1件に限定することを意味する。
  2. 内自然結合の結果(表4)
    • 内自然結合は キー属性「プロバイダID」「利用者ID」で単純に結合するため、有効・無効を区別せずタプルを生成する。
    • 取得後に「アクセス時点の有効性」フィルタを掛けなければならない。
  3. 各タプルの検証
    タプル属する“アクセスログ”検証対象“所属”判定
    ①タイムスタンプ2013-04-10 12:00:00所属登録日付2013-01-10有効(登録日が先)
    ②タイムスタンプ2013-04-10 12:00:00所属登録日付2013-04-15無効(登録日が後)
    ③タイムスタンプ2013-04-03 14:00:00所属登録日付2013-03-10有効
    ④タイムスタンプ2013-04-17 16:00:00所属登録日付2013-02-10有効
    ⑤タイムスタンプ2013-04-18 18:00:00所属登録日付2013-02-10有効
  4. 結論
    有効性を満たさないのはタプル ② のみ。

誤りやすいポイント

  • 所属登録日付 と タイムスタンプ の大小関係を見落とし、「最新=最大日付」と短絡してしまう。
  • 履歴管理の有効判定を忘れ、内自然結合だけで正答だと判断する。
  • 複数の“所属”レコードがある利用者(A,1)を例外なく評価対象とする必要に気付かない。

FAQ

Q: 「所属登録日付が同じ利用者に複数存在する」場合はどう扱いますか?
A: 問題文に追加条件が無い限り、タイムスタンプ 以前で最も新しい(=最大の)所属登録日付 を採用し、同日付で複数あればすべてが候補になります。
Q: 自然結合ではなく外部結合を使うと結果は変わりますか?
A: 今回は「内自然結合」と明示されているため、アクセスログに該当する所属が存在しない利用者はそもそも除外されます。外部結合ならNULL行が残る可能性がありますが、本設問の判定基準とは異なります。
Q: 履歴管理を正確に表現するSQL例は?
A: 代表的にはウィンドウ関数 ROW_NUMBER() を用いて「タイムスタンプ以前で最新」の行を1件に絞り込む方法が知られています。

関連キーワード: 内部結合、履歴管理、時系列データ、主キー、データ整合性

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:表2〜4について(1)〜(3)に答えよ。

問題文を見る
(2) 表4の関係 “利用実績” のタプルに現れない利用者がある。 どのような条件に当てはまる利用者か。 25字以内で述べよ。

模範解答

・関係“アクセスログ”にタプルがない利用者 ・まだアクセスしていない利用者

解説

解答の論理構成

  1. 問題文は次の通り述べています。
    ――【問題文】「関係“所属” 及び関係 “アクセスログ”に対して内自然結合演算及び射影演算を行い、関係 “利用実績” を作成した。」
  2. 内自然結合は、指定された属性値が両関係で一致する行だけを残し、片方にしかない行は削除します。
  3. したがって、 ・“所属”には行があるが、“アクセスログ”に行が無い利用者
    は結合条件を満たさず“利用実績”に現れません。
  4. 具体例
    表2にある「プロバイダID=B・利用者ID=2」は表3に無く、表4にも現れません。
  5. よって「“アクセスログ”にタプルが無い=まだアクセスしていない」利用者が条件となります。

誤りやすいポイント

  • 「自然結合=外部結合」と誤解して、片方に無い行も残ると思い込む。
  • “所属”側に無い利用者が落ちると考え、“アクセスログ”側だけを見落とす。
  • 表4の欠損を単なる抜粋だと誤認し、結合演算の性質を見逃す。

FAQ

Q: なぜ外部結合を使わなかったのですか?
A: 問題文に明示的に「内自然結合演算」と書かれているため、外部結合の結果を考慮する設計ではありません。
Q: “アクセスログ”に一度でも行があれば必ず“利用実績”に出ますか?
A: はい。同一の「プロバイダID」「利用者ID」が“所属”にも存在すれば、自然結合で対応行が生成されます。

関連キーワード: 自然結合、内結合、タプル欠落、アクセスログ、関係演算

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

設問3:表2〜4について(1)〜(3)に答えよ。

問題文を見る
(3) (2)の現れない利用者も表4の関係 “利用実績” のタプルに現れるようにするためには、内自然結合演算をどのような演算に変更すればよいか。 30字以内で述べよ。

模範解答

・関係“所属”を左とする左外自然結合演算 ・関係“所属”のタプルを全て出力する外自然結合演算

解説

解答の論理構成

  1. 現状の演算
    ①【問題文】「関係“所属” 及び関係 “アクセスログ” に対して内自然結合演算 … を行い、関係 “利用実績” を作成」とある。
    ② その結果、表4では“所属”に存在する (プロバイダID=A, 利用者ID=1, 職種=営業、所属登録日付=2013-04-15) などは写っているが、「表3に行が無い利用者」は出力されない。
  2. 要件の確認
    【小問説明】「現れない利用者も…タプルに現れるように」とある。つまり“所属”の行は全て残す必要がある。
  3. 外部結合の性質
    • 左外自然結合演算:左関係の全組を保持し、右に対応する組が無ければNULLを付与する。
    • 右外・完全外では左側の残り方が要件を満たさない/冗長。
  4. 結論
    よって「内自然結合演算」を「関係“所属”を左とする左外自然結合演算(または“所属”のタプルを全て出力する外自然結合演算)」に変更する。

誤りやすいポイント

  • 単に「外部結合」と書いて左右を示さない
    ⇒ 右外結合にすると目的を達成できない。
  • 「完全外結合」を選択
    ⇒ 余計に“アクセスログ”のみの行まで加わり、設問の趣旨とずれる。
  • SQL 用語の LEFT JOIN だけを書く
    ⇒ リレーショナル代数の記号論である「左外自然結合演算」を明示すべき。

FAQ

Q: 「左外自然結合演算」と「外自然結合演算」は同じ意味ですか?
A: 設問の文脈では、「左外自然結合演算」と「“所属”のタプルを全て出力する外自然結合演算」は同義です。要は“所属”が必ず残る外部結合であれば評価対象となります。
Q: “アクセスログ”を左側に置いた場合はどうなりますか?
A: “アクセスログ”に無い利用者が依然として落ちるため要件を満たしません。常に“所属”を左側に置く必要があります。

関連キーワード: 左外結合、外部結合、自然結合、NULL, 射影

解説を読んでも分からないところは、AIに質問できます。 この問題の本文と解説をふまえて答えます。

この設問をAIに質問する

クイズモードで開きます(AIへの質問は無料の会員登録で使えます)

戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリストを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について