[https://www.youtube.com/watch?v=TGprQpw16VA:embed:cite]
今回の動画では、令和4年度 春期 応用情報技術者試験 午後問6「データベース」を詳しく解説します。本問は、宿泊施設予約サイトに新たに追加されるクーポン機能を題材とした、非常に実務寄りの問題です。E-R図のリレーション整理、SQL文の穴埋め、外部キーと制約、そしてトラフィック集中時の排他制御まで一気通貫で理解できる、学習価値の高い構成になっています。 中でも、クーポン発行直後にアクセスが殺到した際の「連番管理」と「排他制御(ロックあり/なし)」の比較は、データベース運用の根幹に関わるテーマであり、採点講評でも受験者の理解が十分でなかったと指摘されたポイントです。この動画では、表構造とSQLの動作に基づきながら、なぜエラーが起きるのか、どうすれば防げるのかを丁寧に解説します。 動画の流れに沿って、学習すべきポイントを紹介します。 まず、設問1では、施設予約サイトに新しく追加されるクーポン機能の前提を理解します。施設コードやプランコードを持つ予約エンティティとの関連付け、またクーポンエンティティとの間にどのような関係性を持たせるかが問われ、E-R図を正しく読み取る力が必要です。ここでは、業務ルールをどう関係モデルに落とし込むかが核心で、「一つのクーポンは一つの予約にだけ利用できる」という制約を、UNIQUE制約やALTER TABLE文でどのように実装するかが重要なポイントです。 続く設問2では、最初に採用された「ロックなし方式」による連番管理が取り上げられます。最大番号をMAX関数で取得し、1を加えて発行番号とする典型的な方式ですが、アクセス集中時の弱点が明確になります。複数のユーザが同時にクーポンを取得しようとすると、同じ番号を参照してしまい、主キー制約違反による再オペレーションが多発します。この再実行は性能面で大きな負担となり、ユーザ体験を損なう問題につながります。動画では、なぜ競合が発生するのかをタイムラインで再現しながら、根本問題を説明します。 設問3では、競合を防ぐために採用された改善案である「ロックあり方式」がテーマです。この方式では、クーポン管理テーブルに発行済枚数列を追加し、まずこの列を更新してからクーポン発行処理を進めることで排他制御が成立します。SQL文の中にある発行制限条件「発行済枚数 <発行上限枚数」の役割や、UPDATE文とINSERT文がどのように連動するかを理解することが重要です。一見地味な変更ですが、ロックによって「番号の一意性」が確保され、再オペレーションが実質ゼロになるという運用上の大きな効果があります。 設問4では、方式変更に伴うCRUD図の更新が問われます。ロックなし方式では参照のみだったクーポン管理テーブルに対し、ロックあり方式では更新も行うため、必要な操作が「R」から「RU」に変化します。これは実務の設計書でも重要な変更点で、どのテーブルがどの処理で参照/更新されるのかを明確にすることは、障害調査や性能分析にも直結する内容です。動画では、ロックの有無でCRUDがどのように変化するかを図解しながら解説します。 本問はデータベースの基礎から実務につながる実装判断まで一貫して問われるため、午後試験の中でも難易度が適度に高く、確実に得点源にしておきたい分野です。E-R図のカーディナリティや外部キーの考え方、SQL文の穴埋め問題、UNIQUE制約の使い方はもちろん、データベースの一貫性を保つために欠かせない「排他制御とトランザクション管理」を、具体例を用いながら徹底的に理解できます。 応用情報技術者試験でデータベース分野が苦手な方、SQLの実装と表設計の関係を深く理解したい方、トランザクション制御の考え方を実務レベルで学びたい方にとって非常に有益な内容です。過去問を単に暗記するのではなく、実務でも役立つ形で体系的に理解できるよう構成していますので、ぜひ最後までご覧ください。 出典:独立行政法人情報処理推進機構(IPA)