2021年 秋期 応用情報技術者試験 問6
企業向け電子書籍サービスの追加設計と実装
H 社は,個人会員向けに電子書籍の販売及び閲覧サービス(以下,既存サービスという)を提供する中堅企業である。近年,テレワークの普及に伴い,企業での電子書籍の需要が高まってきた。そこで,既存サービスに加え,企業向け電子書籍サービス(以下,新サービスという)を開発することになった。
新サービスの開始に向けて,企業向け書籍購入サイトを新たに作成し,既存サービスで提供している電子書籍リーダを改修する。新サービスの機能概要を表1に,検討したデータベースのE-R図の抜粋を図1に示す。
このデータベースでは,E-R図のエンティティ名を表名とし,属性名を列名にして,適切なデータ型で表定義した関係データベースによって,データを管理する。
No. | 機能名 | 概要 |
---|---|---|
1 | 一括購入 | 企業の一括購入担当者が,電子書籍を一括購入する。購入した電子書籍を企業の社員に割り当てる方法には,次の二つがある。 (1) 一括購入担当者が,配布対象の社員にあらかじめ割り当てておく方法 (2) 社員が,未割当の一括購入された電子書籍を割当依頼する方法 |
2 | 企業補助 | 社員が,自己啓発に役立つビジネスや技術などの特定の分類の電子書籍を購入する。その際,企業が購入額の一部を負担する。ただし,企業は負担する上限金額を書籍分類ごとに設定する。 |
3 | 割引購入 | 社員が,個人として読みたい本や雑誌などの電子書籍を購入する。その際,それぞれの企業がH社と契約した一定の割引率を適用した価格で購入できる。 |
4 | 書籍閲覧 | 社員が,電子書籍リーダに,H社が付与した企業ID,社員ID及び社員パスワードを用いてログインし,No.1~3で確認した電子書籍を閲覧する。電子書籍リーダにログインすると,一括購入で割り当てられた電子書籍や,社員が購入した電子書籍が一覧表示され,各電子書籍を選択して閲覧できる。 |

【一括購入機能の社員割当処理の作成】
表1中の一括購入機能の概要(2)にある,社員が割当依頼した電子書籍を割り当てる処理を考える。検討した処理の流れを表2に示す。ここで,":一括購入ID"は割当依頼された一括購入IDを,":企業ID"及び":社員ID"は割当依頼した社員の企業IDと社員IDを格納する埋込み変数である。
手順 | 処理概要 | 使用するSQL文 |
---|---|---|
1 | 社員が割当依頼した一括購入IDから,一括購入数量を取得する。 | SELECT 一括購入数量 FROM 一括購入 WHERE 一括購入ID = :一括購入ID |
2 | 社員が割当依頼した一括購入IDのうち,現在割り当てられている数量を取得する。 | SELECT d FROM 一括購入割当 WHERE 一括購入ID = :一括購入ID |
3 | 手順1で取得した数量が,手順2で取得した数量より e 場合,手順4に進む。そうでない場合,処理を終了する。 | なし |
4 | 割当依頼した社員に一括購入IDを割り当てる。 | INSERT INTO 一括購入割当 (一括購入ID, 社員ID, 企業ID) f |
表2のレビューを実施したところ,処理の流れやSQL文に問題はないが,①トランザクションの同時実行制御には専有ロックを用いるように,とのアドバイスを受けた。
【書籍閲覧機能の作成】
電子書籍リーダに,社員がログインした際,閲覧可能な重複を含まない書籍の一覧を取得するSQL文を図2に示す。ここで,":企業ID"及び":社員ID"は,ログインした社員の企業IDと社員IDを格納する埋込み変数である。また,図2の c には,図1の c と同じ字句が入る。
SELECT sk.c FROM 社員書籍購入 sk WHERE sk.企業ID = :企業ID AND sk.社員ID = :社員IDg
SELECT ik.c FROM 一括購入 ik INNER JOIN 一括購入割当 iw h WHERE ik.企業ID = :企業ID AND iw.社員ID = :社員ID
【書籍閲覧機能の改善】
書籍閲覧機能のレビューを実施したところ,既存サービスを個人で利用している社員は,電子書籍リーダのログインIDを個人会員IDから企業IDと社員IDに切り替えて利用しなければならず複雑である,との指摘を受けた。
そこで,電子書籍リーダに個人会員IDを用いてログインした際,社員として閲覧できる書籍も一覧に追加して閲覧できるように,E-R図に新たに②一つエンティティを追加し,電子書籍リーダに③一つ画面を追加した上で書籍閲覧機能に改修を施した。