基本情報技術者 2009年 秋期 午後 問02
倉庫内の保管棚を用いた書類管理に関する次の記述を読んで、設問1~3に答えよ。
A社では、書類の保管管理(以下、書類管理という)を関係データベースを用いて行っている。書類管理の概要と書類管理データベースの概要は、次のとおりである。
〔書類管理の概要〕
(1) 書類は、倉庫に配置された保管棚の中の箱に入れて保管される。書類には、全社を通じて一意となる書類番号が付与されている。
(2) 倉庫は1棟だけであり、3階建てで、各階は四つの区画に分けられている。各区画には複数の保管棚が配置されている。
(3) 保管棚には、倉庫内でその保管棚を一意に識別できるように、棚番号が付与されている。保管棚は、倉庫内のどの区画に配置してもよい。また、一つの保管棚には、複数の箱がある。
(4) 箱には、一つの保管棚の中で一意に識別できるように保管棚の段と列を組み合わせた箱番号が付与されている。例えば、3段目4列の箱番号は3-4となる。一つの箱には、複数の書類を保管できる。
(5) 書類管理の担当者は、社内の部署から預かった書類を、保管棚のいずれかの箱に入れて保管する。保管の際、全社を通じて一意となる預託番号を付与する。
(6) 預かった書類は返却依頼を受けて返却する。
(7) 倉庫、保管棚及び箱の構成を図1に示す。
〔書類管理データベースの概要〕
(1) 階数表は、倉庫の階番号と階名称を管理する。
(2) 区画表は、倉庫の各階における区画名称を管理する。
(3) 棚表は、保管棚の配置された日付、位置(階番号と区画番号)及び棚名称を管理する。
(4) 箱表は、箱名称を管理する。
(5) 書類預託表は、部署から預かった書類の保管状況(預託日と返却日)を管理する。預託日には、書類を預かった日付が設定される。返却日には、書類を預かったときにNULLが設定され、書類を返却したときにその日付が設定される。
(6) 書類表は、書類の預け元の部署番号と書類名称を管理する。
(7) 部署表は、部署名称を管理する。
(8) A社の書類管理データベースのE-R図を図2に、構造の一部を図3に示す。

設問1:
問題文を見る 書類を保管していない保管棚が各階に幾つあるかを検索する。次のSQL文中のに入れる正しい答えを、解答群の中から選べ。
SELECT 棚表.階番号, COUNT(棚表.棚番号) FROM 棚表
WHERE 棚表.棚番号
a (SELECT 書類預託表.棚番号 FROM 書類預託表
WHERE 書類預託表.返却日 IS NULL)
b 棚表.階番号
解答群
ア:EXISTS
イ:GROUP BY
ウ:IN
エ:LIKE
オ:NOT IN
カ:ORDER BY
模範解答
a:オ、b:イ
解説
解答の導き方
このSQL文は、書類を保管していない保管棚を見つけ、その数を階ごとに数える処理です。SQL(Structured Query Language:データベースに検索や集計を指示する言語)の処理を、内側の検索から順に考えます。
-
現在、書類を保管している棚を調べます。
問題文には、書類を預かったときの返却日は「NULL」で、返却したときに返却日を設定するとあります。NULL(値が設定されていない状態)の返却日は、まだ返却されていないことを表します。
そこで、内側の検索では、返却日がNULLである行から棚番号を取り出します。この結果には、現在書類を保管している棚の番号が含まれます。 -
その棚を、数える対象から除きます。
棚表から棚番号を取り出すとき、内側の検索結果に含まれる棚番号を除外する必要があります。
INは「検索結果の中にある」という条件です。その反対の、検索結果の中にないことを表すのがNOT INです。したがって、aにはNOT INが入ります。
これにより、未返却の書類を保管している棚は除かれ、該当する書類がない棚だけが残ります。 -
階ごとに棚をまとめて数えます。
棚表には、棚番号と、その棚が配置された階番号があります。棚番号を数えるだけでは全階分の合計になるため、階番号ごとに分けて数えます。
GROUP BYは、指定した項目の値が同じ行をまとめる指定です。ここでは階番号ごとにまとめるので、bにはGROUP BYが入ります。
まとめた各階の中で、COUNT関数が棚番号の数を数えます。
誤りやすいポイント
-
INとNOT INを取り違えないようにします。
INを使うと、未返却の書類を保管している棚が対象になります。今回はそれらを数えないので、NOT INを使います。 -
返却日がNULLの行だけを対象にする理由に注意します。
返却日が設定済みの行は、すでに返却された書類の記録です。現在の保管状況を調べるには、返却日がNULLの行に絞る必要があります。 -
GROUP BYとORDER BYは役割が異なります。
GROUP BYは階番号ごとにまとめる指定です。ORDER BYは検索結果の並び順を指定するもので、階ごとに数える処理には使いません。 -
COUNTだけでは階ごとの集計になりません。
COUNTは数を数える関数です。階ごとに別々の数を出すには、階番号によるGROUP BYも必要です。
FAQ
Q: 返却済みの書類がある棚は、必ず数えられますか。
A: 返却済みの書類だけがある棚は、内側の検索結果に含まれないため、数える対象になります。ただし、同じ棚に未返却の書類もある場合は、その棚番号が検索結果に含まれるため、対象から除かれます。
A: 返却済みの書類だけがある棚は、内側の検索結果に含まれないため、数える対象になります。ただし、同じ棚に未返却の書類もある場合は、その棚番号が検索結果に含まれるため、対象から除かれます。
Q: 内側の検索結果に同じ棚番号が複数回あっても問題ありませんか。
A: 問題ありません。NOT INは、棚番号が検索結果に含まれているかどうかを調べます。同じ番号が何回含まれていても、その棚を対象から除く処理は変わりません。
A: 問題ありません。NOT INは、棚番号が検索結果に含まれているかどうかを調べます。同じ番号が何回含まれていても、その棚を対象から除く処理は変わりません。
Q: COUNTは、書類の数を数えているのですか。
A: いいえ。外側の検索対象は棚表なので、COUNTが数えるのは、条件に合った棚番号です。書類の数ではありません。
A: いいえ。外側の検索対象は棚表なので、COUNTが数えるのは、条件に合った棚番号です。書類の数ではありません。
関連キーワード: SQL、サブクエリ、NOT IN、GROUP BY、NULL、集計関数
設問2:
問題文を見る 預かってから1年を超え、未返却である書類を検索する。
検索日を2009年10月18日とする場合、次のSQL文中のに入れる正しい答えを、解答群の中から選べ。
SELECT 書類預託表.書類番号, 書類表.書類名称, 書類預託表.預託日,
棚表.階番号, 棚表.区画番号, 書類預託表.棚番号,
書類預託表.箱番号
FROM 棚表, 書類預託表, 書類表
WHERE c
AND d
AND 書類預託表.返却日 IS NULL
AND 書類預託表.預託日 <= '20081018'
解答群
ア:書類預託表.書類番号 = 書類表.書類番号
イ:書類預託表.書類番号 <> 書類表.書類番号
ウ:書類預託表.預託日 <= 書類預託表.返却日
エ:棚表.棚配置日 = 書類預託表.預託日
オ:棚表.棚配置日 <= 書類預託表.預託日
カ:棚表.棚番号 = 書類預託表.棚番号
キ:棚表.棚番号 <> 書類預託表.棚番号
模範解答
c:ア、d:カ(順不同)
解説
解答の導き方
まず、検索したい書類の条件と、表どうしを対応付ける条件を分けて考えます。
問題文では、預かったときは返却日がNULLになり、返却したときは返却日が設定されます。NULL(値が設定されていない状態)かどうかを見る「書類預託表.返却日 IS NULL」は、未返却の書類を選ぶ条件です。
また、検索日は2009年10月18日です。SQL文には「書類預託表.預託日 <= '20081018'」があり、1年前の日付である2008年10月18日以前に預かった書類を選びます。この2つの条件で、未返却で、1年前の日付以前に預かった書類を絞り込みます。
一方、空欄の条件は、SQL(Structured Query Language:関係データベースに検索や更新を指示する言語)で表どうしを結び付けるためのものです。複数の表から、同じ対象を表す行を対応付ける処理を「結合」といいます。
図3を見ると、書類預託表と書類表の両方に「書類番号」があります。書類預託表の書類番号に対応する書類名称を取り出すには、同じ書類番号どうしを結び付けます。したがって、[c]には「書類預託表.書類番号 = 書類表.書類番号」を入れます。選択肢ではアです。
次に、棚表と書類預託表の両方に「棚番号」があります。書類を保管している棚の階番号や区画番号を取り出すには、書類預託表に記録された棚番号と、棚表の棚番号を対応付けます。したがって、[d]には「棚表.棚番号 = 書類預託表.棚番号」を入れます。選択肢ではカです。
誤りやすいポイント
- 「<>」は「等しくない」という意味です。表どうしを結び付けるときに使うと、別の書類や別の棚の情報を誤って組み合わせてしまいます。
- 預託日と棚配置日は、どちらも日付ですが、表している内容が異なります。預託日と棚配置日を比べても、書類と保管棚を対応付けることはできません。
- 返却日の条件は、未返却の書類を絞り込む条件です。書類番号や棚番号の条件は、表どうしを結び付ける条件です。それぞれの役割を分けて考えます。
FAQ
Q: なぜ書類番号を結び付けるのですか?
A: 書類預託表の書類番号と書類表の書類番号が同じなら、その預託記録と書類名称が同じ書類のものだと分かるからです。
A: 書類預託表の書類番号と書類表の書類番号が同じなら、その預託記録と書類名称が同じ書類のものだと分かるからです。
Q: 箱表をSQL文に含めなくてよいのですか?
A: このSQL文では、箱番号が書類預託表に記録されています。また、取得したい棚の位置情報は棚表にあります。そのため、箱表を使わなくても必要な情報を取得できます。
A: このSQL文では、箱番号が書類預託表に記録されています。また、取得したい棚の位置情報は棚表にあります。そのため、箱表を使わなくても必要な情報を取得できます。
Q: 「書類預託表.返却日 IS NULL」は、なぜ未返却を表すのですか?
A: 問題文で、預かったときは返却日をNULLにし、返却したときは返却日を設定すると説明されているためです。
A: 問題文で、預かったときは返却日をNULLにし、返却したときは返却日を設定すると説明されているためです。
関連キーワード: SQL、表の結合、結合条件、NULL、日付比較**
設問3:
問題文を見る A社では倉庫内の利便性を高めるため、保管棚の配置を変更したり、ある箱に入っている書類を別の箱に移し替えたりしている。A社の書類管理データベースの説明として、正しい答えを解答群の中から選べ。
解答群
ア:ある箱に入っている書類を、同一の保管棚の別の箱に移す場合、箱表と書類預託表のそれぞれを更新すればよい。
イ:ある箱に入っている書類を、別の保管棚の別の箱に移す場合、書類預託表の棚番号だけを更新すればよい。
ウ:保管している書類の保管棚とその位置を検索する場合、書類番号だけでは検索できない。
エ:保管棚の配置されている区画名称を変更する場合、区画表は更新しなくてよい。
オ:保管棚の配置を変更する場合、書類預託表は更新しなくてよい。
模範解答
オ
解説
解答の導き方
この問題では、書類を別の箱へ移すことと、保管棚そのものの配置を変えることを区別するのがポイントです。
図3では、書類の保管状況を記録する書類預託表に「箱番号」と「棚番号」があります。一方、棚がどの階のどの区画にあるかは、棚表の「階番号」と「区画番号」で管理されています。つまり、書類が入っている箱・棚の情報と、棚が置かれている場所の情報は、別の表に記録されています。
表のキー項目とは、行を識別するための項目です。箱表では「箱番号」と「棚番号」の両方に下線が引かれています。箱番号は保管棚ごとに付けられるため、箱を特定するには、この2項目を組み合わせます。
各選択肢を確認します。
- ア:同じ保管棚の別の箱に書類を移す場合、書類預託表の「箱番号」を変更します。箱表は箱そのものの情報を管理する表で、どの書類が入っているかは管理していません。そのため、箱表を更新する必要はありません。誤りです。
- イ:別の保管棚にある箱へ移す場合、書類預託表の「棚番号」だけでなく「箱番号」も変更します。箱は「棚番号」と「箱番号」の組合せで特定されるためです。誤りです。
- ウ:書類番号は全社を通じて一意です。書類番号を使って書類預託表から保管状況を調べ、その「棚番号」を手掛かりに棚表を確認すれば、保管棚の位置を検索できます。返却済みの記録と区別するときは、返却日がNULLの記録を確認します。したがって、「書類番号だけでは検索できない」は誤りです。
- エ:区画名称は区画表で管理されています。区画名称を変更する場合は、区画表を更新する必要があります。誤りです。
- オ:保管棚の配置を変更するときは、棚表に記録された階番号や区画番号などを更新します。棚の位置が変わっても、書類が入っている箱や棚そのものが変わるわけではないため、書類預託表を更新する必要はありません。
したがって、保管棚の配置変更について正しく説明しているのはオです。
誤りやすいポイント
- 棚の配置変更と、書類を別の棚へ移すことを同じ操作だと考えないようにします。棚の配置変更では、棚表の位置情報を更新します。
- 書類預託表は、書類がどの箱・棚に保管されているかを記録します。箱表は箱そのものの情報を記録するため、書類を箱から箱へ移しても箱表は更新しません。
- 箱番号は棚ごとに使われる番号です。別の棚の箱へ移す場合は、棚番号と箱番号の両方を確認します。
- 書類番号が書類預託表のキー項目でなくても、検索に使えないとは限りません。キー項目かどうかと、検索条件にできるかどうかは別の話です。
FAQ
Q: 書類を同じ保管棚の別の箱へ移したとき、何を変更しますか?
A: 書類預託表の箱番号を変更します。同じ棚の中での移動なので、棚番号は変わりません。箱表は、箱自体の情報を管理する表なので変更しません。
Q: 書類を別の保管棚へ移したときは、何を変更しますか?
A: 書類預託表の棚番号と箱番号を変更します。箱は棚番号と箱番号の組合せで特定されるため、移動先の両方の番号が必要です。
Q: 棚を別の区画へ移したとき、書類預託表も変更しますか?
A: 変更しません。書類預託表が示す棚や箱はそのままで、棚が置かれている場所だけが変わるからです。位置情報は棚表で管理します。
関連キーワード: 関係データベース、主キー、複合主キー、外部キー



