お鍋が美味しい季節ですね。ついつい買い込んでしまう食材は「先入れ先出し」、つまり先に買ったものから食べきっていきたいものです。そこで今回は、Accessを使って冷蔵庫の「在庫管理」の問題を出題します。
AccessはWindowsの「ファイル」としてデータベースがサクッと作れるうえ、ビジュアルプログラミングでSQLを組み立てられる、とても手軽なデータベース管理ソフトなんです。本格的なデータベースシステムを立てるほどではないけれど、Excelで処理するには荷が重いからちょこっとデータベースを使いたい、そんなときにとっても便利です。
今回の問題は、SQLの知識を使っても解ける内容です。Accessを開いたことのないエンジニアの方も、息抜きとしてぜひ解いてみてくださいね。
【問題】
前提として、以下の3つのテーブルがあるとします。いずれも、左端のフィールドが主キーです。
1つ目は、鍋の食材情報を管理する「Item」テーブルです。Accessの「テーブル」オブジェクトは、フィールド名と型を設定すれば、スプレッドシートのような感覚でデータを挿入・更新・削除することができます。
2つ目は、いつ、なにを、いくつ買ったかの記録をする「Stock」テーブルです。使い切った食材はBoolean型の「stockOut」フィールドを「True」にする仕様とします。
3つ目は、上の「Stock」テーブルの主キーに対して、いつ、いくつ使ったかの記録をする「Feed」テーブルです。
この3つのテーブルを使って、「いつ買った」「何の食材が」「現在いくつあるのか」を把握できる、以下のようなレコードセットを作ってみましょう。使い切ったIDの食材は抽出しないものとします。
Accessでレコードセットを作るには、「クエリ」オブジェクトという、ビジュアルプログラミングでSQLを組み立てられる機能を使います。この機能は、ビジュアルプログラミング画面(デザインビュー)と、結果のレコードセットを表示する画面(データシートビュー)の2つのビューを持っており、上の図がデータシートビューです。
デザインビューは以下のような見た目をしていて、上段で情報を取得したいテーブルと、リレーションシップを設定します。SQLでいうと「FROM Table1 INNER JOIN Table2 ON ~」のあたりです。
下段で、SELECTするフィールド、WHEREやORDERなどの条件を付けられます。
以上を踏まえて、「いつ買った」「何の食材が」「現在いくつあるのか」を把握できるレコードセットが得られるデザインビューは、3つのうちどれでしょうか?
【選択肢1】
【選択肢2】
【選択肢3】
丸の付いている部分が、差異のある箇所です。上段のリレーションシップは、両端が丸のものが内部結合、矢印になっているものが外部結合を表します。下段の「currentStock」は演算フィールドで、他のフィールドを使って現在庫を算出します。
・・・
予想するSQL文が、Accessのビジュアルプログラミングだとどんな形になるのか、正解はわかりましたか?ぜひ考えてみてくださいね。
正解とその解説は後日エンジニアスタイルにて掲載予定です。お楽しみに。
Excel、Access等の書籍を執筆し、事務系プログラマー、ブロガー、ライターとして活動するワーキングマザー。著書のイラストや図解も手掛けている。WordPressを使った個人ブログ(https://ateitexe.com/)で技術情報を発信している。著書に『スピードマスター Accessデータベース 用語図鑑』『Accessデータベース 本格作成入門』『Excel & Access連携 実践ガイド』『Excel VBA ユーザーフォーム&コントロール 実践アプリ作成ガイド』(技術評論社)など。
▼今回解けた方も、解けなかった方も、他の挑戦状にチャレンジ!
・エンジニアへの挑戦状 #01 プログラム修正問題
・エンジニアへの挑戦状 #02 Pythonでお宝探し
・エンジニアへの挑戦状 #03 テストデータ作成問題
・エンジニアへの挑戦状 #04 新型ウイルス感染者数をSQLで抽出