確認○×問題まとめ21(テクノロジ系9~データベース~)

データベース方式

問21-1-1

データベースの論理的構造を規定した論理データモデルのうち、関係データモデルとは、データ同士の関係を木構造で表現したモデルである。

答え:×

設問の文章は階層型データベースの説明です。なお、関係データモデル(関係データベース)とは、データの集まりを表形式で表現するモデルです。

問21-1-2

関係データベースにおいて、レコード(行)を一意に識別するための情報を主キーと言い、表と表を特定のフィールドで関連付けることもできる。

答え:〇

正しい記述です。主キーとは、データベースにおいてテーブル内の各行(レコード)を一意に識別するための列(または列の組み合わせ)のことです。

問21-1-3

関係データベースの主キーの設定に関する次の記述中、適切なものは2つある。

  1. 値が他のレコードと重複するものは主キーとして使用できない。
  2. 主キーの値は数値でなければならない。
  3. 主キーは複数フィールドを組み合わせて設定することができる。
  4. 主キーに設定したフィールドの値に1行だけならNULLを設定することができる。
  5. 主キーに設定したフィールドの値を更新することはできない。
  6. 主キーに設定したフィールドは他の表の外部キーとして参照することができない。

答え:〇

  1. 適切です。主キーは一意性を有する(他のレコードと重複しない)ことが必要です。
  2. 不適切です。主キーは数値である必要はありません。文字や複数の列を組み合わせた複合キーも主キーとして設定できます。ただし、高速に検索できる、コンパクトでシンプル、変更が起きにくいなどの理由から、特別な理由がない限り、数字(数値ID)を主キーにするのが推奨されます。
  3. 適切です。関係データベースでは、複数の列(フィールド)を組み合わせて1つの主キーとして設定することができます。これを複合主キーと呼びます。
  4. 不適切です。主キーにはNULL値を一切設定できません。
  5. 不適切です。主キーの値は技術的には更新可能です。ただし、主キーは一意な識別子なので、原則として「変更されない値」であるべきです。また、主キーが他のテーブルの外部キーとして参照されている場合、更新は整合性エラーの原因になるため、「更新すべきでない」とされる場合が多いです。
  6. 不適切です。主キーは、他の表の外部キーとして参照されるために使われるのが一般的です。

よって、適切な記述は1.と3.の2つです。

問21-1-4

条件①〜⑤によって、関係データベースで管理する”従業員”表と”部門”表を作成した。”従業員”表の主キーとして、最も適切なものは「部門コード」である。

〔条件〕
① 各従業員は重複のない従業員番号を一つもつ。
② 同姓同名の従業員がいてもよい。
③ 各部門は重複のない部門コードを一つもつ。
④ 一つの部門には複数名の従業員が所属する。
⑤ 1人の従業員が所属する部門は一つだけである。

答え:×

〔条件〕④に「一つの部門には複数名の従業員が所属する」とあるため、部門コードが重複する可能性があります。そのため、部門コードを主キーとするのは不適切です。

また、〔条件〕②に「同姓同名の従業員がいてもよい」とあるため、従業員名も重複する可能性があり、主キーとするのは不適切です。

この問題の場合、重複のない従業員番号を主キーとするのが適切です。

MEMO

生年月日は言うまでもありませんが、住所も重複の可能性があるため(例えば同居している夫婦など)、主キーとするのは不適切です。

問21-1-5

関係データベースの操作を行うための言語はFAQである。

答え:×

関係データベースの操作を行うための言語はSQL(Structured Query Language)です。なお、FAQ(Frequently Asked Questions) とは「よくある質問」のことで、問い合わせ対応の手間を減らし、ユーザー自身が迅速に解決策を見つけられるようにするためのものです。

問21-1-6

次のa~gのうち、DBMSに備わる機能として、適切なものは4個ある。

a.アクセス権管理
b.障害回復
c.同時実行制御
d.ファイアウォール
e.ウイルスチェック
f.データ検索・更新
g.テーブルの正規化

答え:〇

正しい記述です。以下のものはDBMSの機能ではありません。

d.ファイアウォール
e.ウイルスチェック
g.テーブルの正規化

よって、DBMSに備わる機能として、適切なものは4個(a.アクセス権管理、b.障害回復、c.同時実行制御、f.データ検索・更新)です。

できなかった問題はこちらで復習

データベース設計

問21-2-1

データベース設計におけるデータ分析で行うこととしては、「必要なデータ項目を洗い出し、項目間の関連を整理する」といったことが挙げられる。

答え:〇

記述の通りです。

データベース設計の前段階として、データ分析を行います。データの質を向上させるために、業務で使用するデータの洗出しと整理を行い、不正確、不完全、重複、または不適切なデータを特定して修正または削除する作業を行います。この作業のことをデータクレンジングと呼びます。

問21-2-2

E-R図では、処理手順などのアルゴリズムを図で表記する。

答え:×

E-R図では、データベースの設計に当たって、データ間(エンティティ同士)の関係を表記します。なお、設問の文章はフローチャートの説明になります。

問21-2-3
[条件]①~④を全て満たすとき、出版社と著者と本の関係を示すE−R図は
出版社著者

となる。

[条件]
①出版社は、複数の著者と契約している。
②著者は、一つの出版社とだけ契約している。
③著者は、複数の本を書いている。
④1冊の本は、1人の著者が書いている。

ここで、E−R図の表記法は次のとおりとする。

[表記法]
ab

aとbが、1対多の関係であることを表す。

答え:×

[条件] ①と②から、出版社と著者の関係は「1対多」となり、これをE−R図で表記すると
出版社著者

となります。

また、[条件] ③と④から、著者と本の関係は「1対多」となり、これをE−R図で表記すると
著者

となります。

以上より、出版社と著者と本の関係を示すE−R図は

出版社著者

が適切な表記です。

問21-2-4

関係データベースを構築する際にデータの正規化を行う目的は、データに冗長性をもたせて、データ誤りを検出することにある。

答え:×

関係データベースを構築する際にデータの正規化を行う目的は、データの矛盾や重複を排除して、データの維持管理を容易にすることにあります。むしろ、データの冗長性を排除することが目的なので、設問の記述は誤りです。

問21-2-5

関係データベースで管理された”会員管理”表を正規化して、”店舗”表、”会員種別”表及び”会員”表に分割した。このとき、”会員”表は次のようになる。ここで、表中の下線は主キーを表し、一人の会員が複数の店舗に登録した場合は、会員番号を店舗ごとに付与するものとする。

店舗コード会員コード会員名
“会員”表

答え:×

【第1正規化】

繰り返しの項目を排除し表の構造をシンプルにするため、すべての列が単一の値で構成されている状態にします。設問の会員管理表は繰り返しの項目がないため、この作業は不要です。

【第2正規化】

複合主キーの一部にしか依存しない列を分離し、冗長性を排除します。「店舗コード」がわかれば店舗名が特定できるため、「店舗コード」とそれに連なる「店舗名」を別表に分離します。

なお、設問中に「会員番号を店舗ごとに付与する」とあるため、「会員番号」のみでは会員名を特定することはできないので、これを分離することはできません。

店舗コード会員番号会員名会員種別コード会員種別名
0011試験花子02ゴールド
0012情報太郎02ゴールド
0021高度次郎03一般
0022午前桜子01プラチナ
0031午前桜子03一般
“会員”表
店舗コード店舗名
001札幌
002東京
003大阪
“店舗”表

【第3正規化】

キー属性が他の非キー属性に依存している状態を排除して更新時の整合性を保ちます。非主キーの「会員種別コード」が分かれば「会員種別名」が特定できるため、これを別表に分離します。

店舗コード会員番号会員名会員種別コード
0011試験花子02
0012情報太郎02
0021高度次郎03
0022午前桜子01
0031午前桜子03
“会員”表
店舗コード店舗コード
001札幌
002東京
003大阪
“店舗”表
会員種別コード会員種別名
01プラチナ
02ゴールド
03一般
“会員種別”表

以上より、”会員”表は次のようになります。

店舗コード会員コード会員名会員種別コード
“会員”表
MEMO

正規化で考えなくても、本問では店舗表と会員種別表が示されているので、これらを会員管理表から分離することで正解は導けると思います。

問21-2-6

一つの表で管理されていた受注データを、受注に関する情報と商品に関する情報に分割して、正規化を行った上で関係データベースの表で管理する。ここで、同一商品で単価が異なるときは商品番号も異なるものとする。また、発注者名には同姓同名はいないものとする。

このとき、正規化を行った結果の表の組合せは次のようになる。

答え:〇

【第1正規化】

繰り返しの項目を排除し表の構造をシンプルにするため、すべての列が単一の値で構成されている状態にします。設問の受注データ表は繰り返しの項目がないため、この作業は不要です。

【第2正規化】

複合キーの一部にしか依存しない列を分離し、冗長性を排除します。「受注番号」のみがわかればレコードを特定できる(一意に識別できる)ため、主キーは「受注番号」となります。主キーが単一のため、この作業は不要です。

【第3正規化】

キー属性が他の非キー属性に依存している状態を排除して更新時の整合性を保ちます。非主キーの「商品番号」が分かれば「商品名」と「単価」が特定できるため、これを別表に分離します。

受注番号発注者名商品番号個数
T0001試験花子M00015
T0002情報太郎M00023
T0003高度秋子M00012
商品番号商品名単価
M0001商品13,000
M0002商品24,000

以上より、正規化を行った結果の表の組合せは次のようになります。

受注番号発注者名商品番号個数
商品番号商品名単価

できなかった問題はこちらで復習

データ操作とトランザクション処理

問21-3-1

表1と表2に、ある操作を行って表3が得られた。行った操作は「結合」と「選択」である。

答え:×

表1と表2から表3を得るための操作は次のようになります。

①まず、品名コードによって表1と表2を結合します。

品名コード品名価格メーカ棚番号
001ラーメン150A社1
002うどん130B社5

②次に、「品名」「価格」「棚番号」の列を抽出します(射影)。

品名価格棚番号
ラーメン1501
うどん1305

以上より、表1と表2から表3を得るための操作は「結合」と「射影」となります。なお、「選択」とは行(レコード)を抽出する操作です。

問21-3-2

関係データベースで管理している”入館履歴”表と”建物”表から、建物名が”東館”を条件に抽出した結果を日付の降順でソートしたとき、2番目のレコードの社員番号は「S0004」である。

答え:〇

正しい記述です。

建物名が”東館”の建物コードは「B002」なので、”入館履歴”表から建物コードがB002のレコードを抽出します。

社員番号建物コード日付
S0001B00210/30
S0002B00210/10
S0003B00210/12
S0004B00210/20

次に、日付の降順(大きい順)でソート(並び替え)します。

社員番号建物コード日付
S0001B00210/30
S0004B00210/20
S0003B00210/12
S0002B00210/10

以上より、2番目のレコードの社員番号は「S0004」となります。

問21-3-3

トランザクション処理に関する次の記述のうち、適切なものは2つある。

  1. コミットとは、トランザクションが正常に処理されなかったときに、データベースをトランザクション開始前の状態に戻すことである。
  2. 排他制御とは、トランザクションが正常に処理されたときに、データベースの内容を確定させることである。
  3. ロールバックとは、複数のトランザクションが同時に同一データを更新しようとしたときに、データの矛盾が起きないようにすることである。
  4. ログとは、データベースの更新履歴を記録したファイルのことである。

答え:×

  1. 誤り。記述はロールバックの説明です。
  2. 誤り。記述はコミットの説明です。
  3. 誤り。記述は排他制御の説明です。
  4. 正しい。

よって、適切な記述は4.の1つとなります。

問21-3-4

処理一覧に示す実行順に、トランザクション1〜4を実行する。あるトランザクションが途中で異常終了し、トランザクションを中断してロールバックした結果、データAとデータBが残った。異常終了したトランザクションは「トランザクション4」である。ここで、トランザクションが正常終了したときにコミットを行い、次のトランザクションがあれば、それを実行する。異常終了したときは、当該トランザクション以降のトランザクションを実行しないものとする。

答え:〇

正しい記述です。

各トランザクションが正常に終了したときのデータは次のようになります。

コミットされたトランザクション生成されたデータ
トランザクション1データA
トランザクション2データB
トランザクション3データA、データB
トランザクション4データA

ここで、ロールバックとはトランザクションの処理を途中で取り消して、データベースをトランザクション開始前の状態に戻す操作のことです。設問には「ロールバックした結果、データAとデータBが残った」とあるため、トランザクション4の処理が正常に終了しなかった(つまり、トランザクション4の処理開始前の状態に戻った)ということが分かります。

問21-3-5

複数のプロセスが共通の資源を排他的に利用する場合に、お互いに相手のプ口セスが占有している資源が解放されるのを待っている状態をデッドロックという。

答え:〇

正しい記述です。

ロック方式の課題(欠点)として、複数のトランザクションがお互いにロックの解除を待ち続けることで、永久に処理が進まなくなる状態になることがあります。この状態のことをデッドロックと呼びます。

問21-3-6

ある在庫管理システムは、複数の入力を同時並行して処理し、在庫数を更新しているが、排他制御は行っていない。ある時点での在庫数が100であったとき、入力された二つの入力A、Bに応じて、図に示す処理が①→②→③→④の順序で実行された場合、処理④が終了した時点の在庫数は「120」となる。

答え:×

処理①:入力Aによって在庫数が150(=初期値100+50)になります。

処理②:「複数の入力を同時並行して処理」しているため、入力Bが読み込んだ在庫数は初期値(更新前)の100です。ここから30を引くので在庫数は70となります。

処理③:入力Bで、70が在庫数として上書きされます。

処理④:入力Aで、150が在庫数として上書きされます。

以上より、処理④が終了した時点の在庫数は「150」となります。

このような結果となるのは、複数のユーザーが同時にデータベースにアクセス・操作したために、データの整合性や一貫性が壊れてしまうのが原因です。これを回避するためには排他制御を行います。

仮に、排他制御を行った場合は次のようになります。

処理①:入力Aによって在庫が150(=初期値100+50)になります。このとき、入力Aはロックをかけて入力Bが在庫数のデータにアクセスできないようにします。

処理②③:入力Bは在庫数のデータを参照できないため、ロックが解除されるまで待ちます。

処理④:入力Aでは、150が在庫数として書き込まれます。ここで参照が終わったのでロックを解除します。

処理②´:入力Bが読み込んだ在庫数は更新後の150です。ここから30を引くので在庫数は120となります。

処理③´:入力Bでは、120が在庫数として上書きされます

このように、排他制御を行うと処理がすべて終了した後の在庫数は120となり、期待通りの結果が得られます。

できなかった問題はこちらで復習