収録問題 60問 / 10問ランダム出題
ランダムに出題・即時フィードバック・間違えた問題の復習機能付き
関係データベースで、1件のデータ(実体)を表す横方向のまとまりはどれですか?
答え: 行(レコード/タプル)
関係データベースの表は行(レコード)と列(属性)で構成され、1行が1件のデータを表します。
関係データベースで、各行を一意に識別するために定める列(の組)はどれですか?
答え: 主キー
主キーは一意性とNULL不可(実体保全性)を満たし、各行を一意に識別します。
他の表の主キーを参照し、表間の関連と整合性を保つために用いる列はどれですか?
答え: 外部キー
外部キーは他表の主キーを参照し、参照整合性(存在しない値を参照しない)を保ちます。
繰り返し項目(複数値)を排除し、各セルが単一の値を持つようにした正規形はどれですか?
答え: 第1正規形
第1正規形は繰り返し項目をなくし、各属性が単一値を持つ状態にします。正規化の出発点です。
第2正規形にするために除去するのは、どのような関数従属ですか?
答え: 主キーの一部にのみ依存する部分関数従属
第2正規形は第1正規形を満たした上で、複合主キーの一部にのみ依存する部分関数従属を除去します。
第3正規形にするために除去するのは、どのような関数従属ですか?
答え: 非キー属性が別の非キー属性に依存する推移的関数従属
第3正規形は第2正規形を満たした上で、非キー属性間の推移的関数従属を除去します。
SQLで、表から条件に合致する行を取り出すために使う基本的な文はどれですか?
答え: SELECT 〜 WHERE
SELECT文で列を指定し、WHERE句で条件を指定して行を抽出します。CREATEは定義、GRANTは権限付与です。
複数の表を共通の列で関連付けて1つの結果にまとめるSQLの操作はどれですか?
答え: 結合(JOIN)
JOINは複数表を共通列で関連付けて結合します。内部結合は両表で一致する行のみを返します。
SQLで、特定の列の値ごとにグループ化して合計や件数を集計する句はどれですか?
答え: GROUP BY
GROUP BYは指定列ごとに行をまとめ、SUMやCOUNTなどの集約関数と組み合わせて集計します。
インデックスを作成する主な目的はどれですか?
答え: 検索(参照)を高速化する
インデックスは検索を高速化しますが、更新時にはインデックス保守のコストが増え、容量も増えます。
トランザクションのACID特性のうち「原子性」を保証する操作の組合せはどれですか?
答え: コミットとロールバック
原子性は全実行か全取消を保証します。正常時はコミットで確定、異常時はロールバックで取り消します。
トランザクションのACID特性のうち「独立性(分離性)」の説明として適切なものはどれですか?
答え: 並行実行されるトランザクションが互いに影響しないこと
独立性は同時実行されるトランザクションが互いに干渉しないことを保証します。
複数トランザクションが互いに相手のロック解放を待ち続け、処理が進まなくなる状態はどれですか?
答え: デッドロック
デッドロックは互いのロック解放を待ち合い処理が停止する状態で、検知して一方を強制終了するなどで解消します。
複数の利用者が同じデータを同時に更新しても矛盾が起きないよう制御する仕組みはどれですか?
答え: 排他制御(ロック)
排他制御はロックなどで同時更新を調整し、データの一貫性を保ちます。共有ロックと専有ロックがあります。
実表に基づいて定義され、利用者には表のように見える仮想的な表はどれですか?
答え: ビュー
ビューは問合せ結果を仮想表として提供し、複雑な参照の簡略化やアクセス範囲の限定に使えます。
特定の表の更新などをきっかけに、自動的に実行される処理はどれですか?
答え: トリガー
トリガーはINSERTやUPDATEなどのイベントを契機に自動実行され、整合性維持やログ記録に使われます。
データベース設計で、実体(エンティティ)とその関連を図で表現する手法はどれですか?
答え: E-R図(実体関連図)
E-R図は実体・属性・関連を図示し、概念データモデルの設計に用いられます。
障害発生時に、ログを用いてコミット済みの更新を再現し、データを復旧する処理はどれですか?
答え: ロールフォワード(前進復帰)
ロールフォワードはバックアップにログのコミット済み更新を反映して復旧します。未完了処理の取消はロールバックです。
分散データベースで、複数サイトの更新を「全コミットか全ロールバック」に統一する手順はどれですか?
答え: 2相コミット(2フェーズコミット)
2相コミットは準備フェーズで合意を取り、コミットフェーズで全サイトを一斉に確定/取消し、分散環境の原子性を保ちます。
大量データの集計・分析を目的に、複数システムのデータを統合して蓄積する仕組みはどれですか?
答え: データウェアハウス
データウェアハウスは分析目的でデータを統合・蓄積し、意思決定支援に用いられます。
関係データベースとは異なり、固定スキーマに縛られず大規模分散に向くデータベースの総称はどれですか?
答え: NoSQL
NoSQLはキーバリューや文書型など柔軟なデータモデルを持ち、大規模・分散・非定型データに向きます。
候補キーの説明として適切なものはどれですか?
答え: 各行を一意に識別できる、主キーになり得る列(の組)
候補キーは一意性を満たし主キーになり得る列(の組)です。選ばれなかった候補キーは代替キーと呼ばれます。
SQLで列にNULLが入っているかを判定するために用いる条件はどれですか?
答え: IS NULL
NULLは未知・不在を表す特別な状態で、比較演算子では判定できません。IS NULL/IS NOT NULLを使います。
正規化を進めることの主な利点はどれですか?
答え: データの重複を減らし、更新時の矛盾を防ぐ
正規化は重複を排除して更新時異常を防ぎます。一方で結合が増え検索性能のために非正規化することもあります。
実体(エンティティ)間の「1対多」の関連の例として適切なものはどれですか?
答え: 1人の顧客が複数の注文を持つ
「1人の顧客が複数の注文を持つ」は1対多の典型です。多対多は中間表で1対多2つに分解して表現します。
可用性向上や負荷分散のため、データベースの複製を別サーバに保持・同期する仕組みはどれですか?
答え: レプリケーション
レプリケーションはデータベースの複製を同期し、参照負荷の分散や障害時の可用性向上に役立ちます。
DBに保存した一連の処理をまとめて呼び出せるようにした、あらかじめ定義された手続きはどれですか?
答え: ストアドプロシージャ
ストアドプロシージャは処理をDB内に定義して呼び出せるようにし、通信回数の削減や処理の共通化に役立ちます。
SQLで取り出した結果を、指定した列の値で昇順や降順に並べ替える句はどれですか?
答え: ORDER BY
ORDER BYは結果を指定列で並べ替えます。GROUP BYは集計のグループ化、HAVINGは集計後の絞り込みです。
大規模な注文テーブルで、注文日と顧客IDを条件にした検索が頻繁に遅い。最初に検討すべき対策として適切なものはどれですか?
答え: 検索条件に合う複合インデックスを設計し、実行計画で効果を確認する
検索性能は、条件、結合、並び順に合うインデックスと実行計画の確認が重要です。インデックスは読み取りを速くできますが、更新コストも増えるため設計が必要です。
トランザクション分離レベルで、他トランザクションがまだコミットしていない更新を読めてしまう現象はどれですか?
答え: ダーティリード
ダーティリードは未コミットデータを読んでしまう現象です。後でロールバックされる値を基に処理すると、整合性が崩れる可能性があります。
同じ集計条件で再実行したとき、他トランザクションの行追加により結果行数が変わる現象はどれですか?
答え: ファントムリード
ファントムリードは、同じ検索条件でも他トランザクションの挿入・削除により該当行集合が変わる現象です。分離レベルの設計で考慮します。
二つのトランザクションが互いに相手のロック解放を待ち続け、処理が進まない状態はどれですか?
答え: デッドロック
デッドロックは、複数の処理が互いに必要な資源を保持し合い、待ち状態から抜けられない状態です。DBMSは検出して一方を中断することがあります。
表を年月や範囲で分割し、検索や保守の対象を絞り込みやすくする設計はどれですか?
答え: パーティショニング
パーティショニングは大きな表を範囲、リスト、ハッシュなどで物理的・論理的に分割する設計です。検索範囲の限定や古いデータの保守に役立ちます。
本番DBのバックアップ設計で、RPOを小さくしたい。最も関係が深い設計はどれですか?
答え: バックアップ頻度やトランザクションログ取得間隔を短くする
RPOはどの時点までデータを戻せる必要があるかを示します。小さくするには、ログ取得や差分・増分バックアップの間隔を短くする設計が重要です。
個人情報を含む列を、権限のない利用者には一部伏字で見せたい。適切な対策はどれですか?
答え: 列マスキングやビューで表示内容を制御する
機微データは、必要最小限の権限、ビュー、列マスキング、監査ログなどを組み合わせて保護します。用途に応じて暗号化も検討します。
データウェアハウス向けに、事実表とディメンション表で分析しやすくする代表的なモデリングはどれですか?
答え: スタースキーマ
スタースキーマは、売上などの事実表を中心に、日付、商品、顧客などのディメンション表を配置する分析向けの設計です。
OLTPシステムの特徴として最も適切なものはどれですか?
答え: 多数の短い取引を高い整合性で処理する
OLTPは受注、決済、在庫更新など、多数の短いトランザクションを高い整合性と応答性で処理する用途に向きます。
SQLインジェクション対策として、アプリケーションがDBへ問い合わせる際に最も基本的な実装はどれですか?
答え: プレースホルダを使ったプリペアドステートメントで値をバインドする
SQLインジェクション対策では、SQL構文と値を分離するプリペアドステートメントが基本です。入力検証や最小権限も併せて実施します。
外部キー制約を設定する主な目的として最も適切なものはどれですか?
答え: 存在しない親行を参照する子行を防ぎ、参照整合性を保つ
外部キー制約は、子表の値が親表の主キーなどに存在することを保証し、孤児レコードの発生を防ぎます。
運用中のDBでスロークエリを改善する際、最初に行うべき調査として適切なものはどれですか?
答え: 実行計画、統計情報、読み取り行数、待機イベントを確認する
スロークエリ改善では、実行計画と実測値を確認し、インデックス不足、統計情報の古さ、結合順序、I/O待ちなどを切り分けます。
契約には個人契約と法人契約があり、どちらか一方にだけ属する。さらに法人契約だけが請求担当者を持つ。この構造を概念データモデルで表す方法として最も適切なものはどれですか?
答え: 契約をスーパータイプ、個人契約・法人契約を排他的サブタイプとして表す
共通属性をスーパータイプに置き、種別固有属性をサブタイプへ分けます。排他的制約により、一つの契約が両方へ同時に属さない業務規則も表せます。
商品の販売価格について、過去の注文は注文時点の価格で再現し、将来の価格改定も事前登録したい。適切な設計はどれですか?
答え: 価格履歴に適用開始日と適用終了日を持たせ、期間が重複しないよう制約する
有効期間を持つ履歴モデルなら、任意時点の価格と将来予定を表せます。同一商品の期間重複や空白をどう扱うかも制約・更新手順で定義します。
複数画面から同じ顧客情報を更新した際、後から保存した処理が先の変更を気付かず上書きした。利用者へ競合を通知したい場合の対策はどれですか?
答え: バージョン番号を更新条件に含める楽観的ロック
読み込み時のバージョン番号をUPDATEの条件に含め、更新件数が0なら他処理による変更を検知します。利用者に再読込や差分確認を促せます。
時刻印順序方式で、トランザクションT1より新しいT2が既にデータを更新した後、古いT1が同じデータを書き込もうとした。基本的な扱いはどれですか?
答え: 時刻印順序に反するT1の書込みを拒否し、必要なら再実行する
時刻印順序方式は論理的な実行順を時刻印で保ちます。古いトランザクションの書込みが新しい更新を壊す場合は中止し、整合した順序で再実行します。
MVCCを使うDBで、長時間開いたままの読取りトランザクションがあり、不要な旧バージョンを回収できず表が膨張している。最も適切な対応はどれですか?
答え: 長時間トランザクションを特定・短縮し、回収処理の進捗を監視する
MVCCでは古いスナップショットが必要な間、旧行バージョンを削除できません。長時間トランザクションの原因を直し、VACUUMなど製品固有の回収処理を正常化します。
注文表で WHERE customer_id = ? AND ordered_at >= ? ORDER BY ordered_at を頻繁に実行する。最初に検討する複合インデックスはどれですか?
答え: (customer_id, ordered_at)
一般に等価条件のcustomer_idを先頭、範囲・並び順のordered_atを後ろに置くと、対象顧客の期間検索と並べ替えに利用しやすくなります。実データと実行計画で確認します。
実行計画では100行と見積もられた結合が実際には100万行となり、非効率な結合方式が選ばれた。最初に確認すべきものはどれですか?
答え: 統計情報の鮮度、列値の偏り、列間相関と実測行数
オプティマイザは統計情報から行数を推定します。統計が古い、値が偏る、複数列が相関する場合は誤差が大きくなり、結合順序や方式の選択を誤ることがあります。
更新の多い表を、複合キー (created_at, id) の順で重複・欠落なくページ送りしたい。OFFSET方式より適切な条件はどれですか?
答え: 前ページ末尾の (created_at, id) より後を同じ順序で取得する
キーセットページングでは一意な並び順と前回末尾キーを使います。同時更新の影響と深いOFFSETの読み飛ばしコストを抑えやすくなります。
1億件を更新する夜間バッチが途中失敗すると、最初からやり直すため時間内に終わらない。改善として最も適切なものはどれですか?
答え: 再実行可能な処理単位でコミットし、チェックポイントから再開できるようにする
業務整合性を保てる単位で区切り、処理済み位置を永続化します。再実行時の二重更新を防ぐ冪等性と、部分コミット時の業務要件も設計します。
無停止に近い形で必須列を追加したいが、旧版アプリも同時稼働する。安全な変更手順として最も適切なものはどれですか?
答え: NULL許可で追加し、両対応コードを展開、既存値を補完後に制約を強める
Expand and contract方式では、まず旧新両版が扱える形でスキーマを拡張し、データ移行とコード切替後に不要な互換部分を縮退させます。
数TBの本番DBを別製品へ移行し、停止時間を数分に抑えたい。最も適切な方式はどれですか?
答え: 初期全量コピー後、CDCで更新差分を継続反映し、整合性確認後に切り替える
全量ロード中の更新を変更データキャプチャで追随し、遅延が十分小さくなった時点で短時間停止して最終同期します。件数・ハッシュ・業務照合も必要です。
2相コミット中、参加DBがprepare済みの状態で調停者へ接続できなくなった。参加DBが独自判断でコミットしてはいけない主な理由はどれですか?
答え: 他参加者の結果と不一致になり、分散トランザクションの原子性を壊すため
prepare済み参加者は最終決定を調停者のログなどから確認する必要があります。独自決定すると、一部コミット・一部ロールバックの不整合が起こり得ます。
書込み直後に読取りレプリカへ問い合わせると、更新前の値が返ることがある。利用者自身の更新を直後に必ず見せる方法はどれですか?
答え: 更新後の一定期間または位置確認まで、主系から読み取る
非同期レプリカには遅延があります。read-your-writesが必要な処理は主系へ固定するか、レプリカが対象ログ位置まで追随したことを確認してから読みます。
ネットワーク分断時に主系候補が二つ同時に書込みを受け付け、復旧後にデータが競合した。再発防止の中核はどれですか?
答え: クォーラムとフェンシングで、書込み可能な主系を一つに限定する
スプリットブレイン対策では、多数決などで正当な主系を一つ選び、旧主系をストレージやネットワークから遮断するフェンシングが重要です。
操作ミスで午前10時15分に重要データを削除した。午前10時14分の状態へ戻し、他DBと比較して確認したい。最も適切な方法はどれですか?
答え: バックアップとトランザクションログから隔離環境へ時点復旧する
PITRで削除直前まで再生し、まず隔離環境で対象行と依存データを検証します。必要なデータだけを安全に戻すか、全体切替かを影響に応じて決めます。
DB暗号化鍵をローテーションする。DBバックアップと同じ保管領域へ鍵を平文保存することが危険な理由はどれですか?
答え: 保管領域が侵害されると、暗号化データと復号鍵を同時に取得されるため
鍵はKMSやHSMなど分離した管理基盤で保護し、アクセス権、監査、ローテーション、旧バックアップ復号に必要な鍵の保存期間を設計します。
マルチテナントDBで、アプリの検索条件漏れがあっても別テナントの行を返さないようDB側でも防ぎたい。適切な対策はどれですか?
答え: 認証主体に基づく行レベルセキュリティを設定し、管理権限も分離する
行レベルセキュリティならDBMSが各問合せへテナント境界を強制できます。接続IDの信頼性、バイパス権限、管理操作の監査も合わせて設計します。
顧客から個人データ削除依頼を受けた。DB本体から削除してもバックアップには一定期間残る。適切な運用はどれですか?
答え: 保持期限と復元時の再削除手順を定め、バックアップを厳格に隔離・期限消去する
バックアップの改変が困難な場合は、目的に沿った保持期限、アクセス制限、期限後消去を定めます。復元時には削除台帳を再適用し、削除済みデータを本番へ復活させません。
複雑な集計を高速化するためマテリアライズドビューを使うが、利用者へ最大5分前までのデータを提供する必要がある。設計で最も重要なものはどれですか?
答え: 更新方式・間隔・失敗監視を定め、鮮度を測る
マテリアライズドビューは結果を保持するため、完全・差分更新の選択、更新時間、失敗時の再試行、最終成功時刻の監視が鮮度SLAに直結します。
ハッシュ結合がメモリに収まらず一時領域へ大量に書き出され、夜間集計が遅い。改善前に最も適切な調査はどれですか?
答え: 実行計画の実測行数、推定誤差、メモリ上限、一時I/O、結合前の絞込みを確認する
スピルは行数誤推定、絞込み不足、メモリ不足など複数要因で起きます。実測を基に統計、SQL、索引、処理単位、メモリ設定のどこを直すか判断します。