経営情報システム ③応用編_データベースとSQL1問〜5問

問1:関係データベースの正規化理論における「関数従属」に関する記述として、最も適切なものはどれか。

  • A:あるテーブルにおいて、属性Xの値を1つ定めると属性Yの値が常に1つに定まる関係を、YはXに関数従属するという。
  • B:属性Xが主キーである場合、Xから一般項目Yへの関数従属は必ず「部分関数従属」に分類される。
  • C:X→Y という関数従属があるとき、Yの一部の値に対してXの値が複数対応することは絶対にない。
  • D:推移的関数従属とは、X→Y かつ Y→Z という関係があるとき、YからXへの関数従属が成立している状態を指す。
  • E:関数従属はデータベースのパフォーマンス(検索速度)を向上させるために、意図的に定義するインデックス設定のガイドラインである。
【第1問:正解と解説】

正解:A
【解説】
・A:適切:関数従属(Functional Dependency: X→Y)の正確な定義です。Xが決まればYが1つに決まる関係を指します。
・B:不適切:Xが単一の主キーであれば、X→Yは「完全関数従属」となります。部分関数従属は、主キーが複合キー(複数の列)の場合に、その一部の列に従属することを指します。
・C:不適切:Xを決めればYが1つに決まりますが、逆に同じYに対して異なるXが複数対応することは妨げられません(例:社員番号Xが決まれば年齢Yは1つに決まるが、同じ年齢Yの社員Xは複数存在し得る)。
・D:不適切:推移的関数従属とは、X→Y かつ Y→Z(ただしYからXへは従属しない)が成り立つことで、間接的にX→Zが成立する関係を指します。
・E:不適切:関数従属は、データが持つ論理的な依存関係(ビジネスルール)を示すものであり、インデックス設定のような物理的な検索性能向上のための仕組みではありません。


問2:関係データベースの正規化の段階のうち、「ボイス・コッド正規形(BCNF)」の説明として、最も適切なものはどれか。

  • A:すべての非キー属性が、主キーに対して推移的に関数従属していない状態を指す。
  • B:複合主キーの一部から他の主キー構成属性への関数従属が存在しないように、テーブルを分割した状態を指す。
  • C:第3正規形を満たしており、かつ「成立しているすべての関数従属(X→Y)において、Xが候補キー(または主キー)である」状態を指す。
  • D:1つのテーブルに2つ以上の独立した多値従属が存在する場合に、それを別テーブルに分割した状態を指す。
  • E:主キーを構成する列の中に、NULL(空値)を許容する属性が含まれないようにした状態を指す。
【第2問:正解と解説】

正解:C
【解説】
・A:不適切:これは第3正規形の定義です。
・B:不適切:これは第2正規形(部分関数従属の排除)に近い説明、あるいは主キー間の依存に関する記述であり、BCNFの正確な定義ではありません。
・C:適切:ボイス・コッド正規形(BCNF)は、第3正規形よりも厳格な正規形であり、「関数従属の決定項(X)がすべて候補キーである」状態を指します。これにより主キー構成属性が他の属性に依存する不整合も排除されます。
・D:不適切:これは第4正規形の定義です。
・E:不適切:主キーにNULLを許さないのは「実体整合性制約」であり、正規形の定義とは関係ありません。


問3:次の「受注データ」を第2正規化して「受注メインテーブル」と「商品マスタテーブル」に分割する場合、元のデータが持つ関数従属(依存関係)の分類として、最も適切なものはどれか。 【受注データ項目】受注番号(複合主キー)、商品コード(複合主キー)、受注日、数量、商品名、単価

  • A:このデータには、主キーから独立した「多値従属」が複数含まれているため、第1正規化の時点で3つ以上のテーブルに分割される。
  • B:「受注番号 → 受注日」は、主キー以外の一般項目どうしが段階的に依存しているため「推移的関数従属」である。
  • C:「受注番号、商品コード → 数量」は、どちらか一方のキーだけで値が決まるため「部分関数従属」である。
  • D:「商品名 → 単価」は、主キーの全体に対して従属しているため「完全関数従属」である。
  • E:「商品コード → 商品名、単価」は、複合主キーの一部に一般項目が従属しているため「部分関数従属」である。
【第3問:正解と解説】

正解:E
【解説】
・A:不適切:多値従属の議論ではなく、関数従属に基づく第2正規化のフェーズです。第1正規化では繰り返しを排除するだけです。
・B:不適切:「受注番号 → 受注日」も複合主キーの一部に依存しているため「部分関数従属」です。一般項目どうしの連鎖ではないため推移的関数従属ではありません。
・C:不適切:「数量」は、どの受注で(受注番号)、どの商品が(商品コード)何個売れたかという、複合主キーの「両方」が揃わないと決まらないため、「完全関数従属」です。
・D:不適切:「商品名 → 単価」は一般項目間の関係(または商品マスタ内の従属)であり、元の複合主キー全体に直接従属する完全関数従属の説明としては誤りです。
・E:適切:複合主キー(受注番号+商品コード)のうち、一部の列である「商品コード」だけで一般項目(商品名、単価)が一意に決定するため、これは「部分関数従属」に該当します。第2正規化ではこれを別テーブル(商品マスタ)に切り出します。


問4:データベースの「非正規化(逆正規化)」に関する記述として、中小企業診断士のシステム設計上のアドバイスとして最も適切なものはどれか。

  • A:非正規化を行うことで、ストレージに保存されるデータ全体の冗長性が完全に排除され、ディスク容量の大幅な節約になる。
  • B:非正規化とは、第3正規化されたテーブルから主キーの設定を取り消し、インデックスを全削除してストレージ容量を削減する手法である。
  • C:データの一貫性を100%担保するためには、本番運用のシステムであっても、パフォーマンスを犠牲にして常に第5正規化まで非正規化せずに維持すべきである。
  • D:非正規化を行うと、テーブル結合(JOIN)の回数が減るため検索処理は高速化するが、データの更新・挿入時に矛盾(更新異状)が生じるリスクが高まる。
  • E:非正規化は主に「第1正規化」に戻す操作を指し、セルの中に複数の値をカンマ区切りで詰め込むことでSQL文の記述を簡素化する。
【第4問:正解と解説】

正解:D
【解説】
・A:不適切:非正規化はデータをあえて重複させるため、冗長性が「増加」し、ディスク容量は多く消費するようになります。
・B:不適切:主キーの取り消しやインデックスの全削除を行うことではなく、論理構造としてテーブルを結合・統合することを指します。
・C:不適切:実務(特にデータウェアハウスや参照の多いシステム)では、処理速度向上のためにあえて適切な非正規化を行うのが一般的であり、常に第5正規化を維持するのが正解とは限りません。
・D:適切:非正規化は、検索パフォーマンス(リード性能)を向上させるためにあえてテーブルを結合させて冗長性を持たせる手法です。JOINが減るため速くなりますが、同じデータが複数箇所に存在するため、更新時に一部だけ書き換わってしまうなどの「更新異状」のリスクを伴います。
・E:不適切:第1正規化未満(原子値でない状態)に戻すような操作ではなく、一般的には正規化されたテーブルどうしをドッキングさせて重複を許容する操作を指します。


問5:関係データベースにおける「候補キー(Candidate Key)」の説明として、最も適切なものはどれか。

  • A:他テーブルの主キーを参照している列のことであり、参照整合性制約を定義する際に必ず候補キーとして指定される。
  • B:主キーに選ばれた列の予備として、主キーが破損した際に自動的に身代わりとなる暗号化された非表示列のことである。
  • C:テーブル内の行を一意に識別できる属性(または属性の集合)であり、そこからどの属性を外しても一意性が失われる(既約性を満たす)ものを指す。
  • D:行を一意に識別できる列の組み合わせであれば、どれだけ余剰な列(無関係な列)を含んでいても候補キーと呼ぶことができる。
  • E:候補キーに指定された列は、インデックスが強制的に外されるため、検索条件として使用すると処理速度が著しく低下する。
【第5問:正解と解説】

正解:C
【解説】
・A:不適切:他テーブルの主キーを参照するのは「外部キー」の説明です。
・B:不適切:破損時の身代わり列のような物理的な機能ではなく、論理モデル上の概念です。
・C:適切:候補キーの正確な定義です。「一意性(ユニークであること)」と「既約性(極小であること、余分な列を含まないこと)」の双方を満たす必要があります。候補キーの中から1つが「主キー」に選ばれ、残りは「代替キー」となります。
・D:不適切:余剰な列を含んでよいのは「スーパーキー」です。候補キーは「これ以上削れない」という極小性(既約性)が必要です。
・E:不適切:候補キー(主キーやユニークキー)は一意性が保証されているため、通常は検索を高速化するためのインデックス(一意インデックス)が自動的に生成されます。


コメント

タイトルとURLをコピーしました