2012年 春期 応用情報技術者試験 問6
複数の図書館の検索システムの統合
隣接するA市とB市は、半年後に合併を控えており、様々な情報システムの統合を計画している。両市が運営する図書館システムについて、統合を検討した結果、両図書館の貸出し可能な蔵書が確認できる統合検索サービスを実現することにした。その設計は、システム開発会社のC君が担当することになった。
A市とB市の現在の図書館システムのテーブル構造を表1と表2に示す。表1と表2において、下線は主キーを表す。
テーブル名 | 列名 |
---|---|
蔵書A | 蔵書番号、書籍番号 |
書籍A | 書籍番号、書籍名、著者名、出版社名、ISBN番号 |
利用者A | 利用者番号、利用者氏名、利用者住所、利用者電話番号 |
貸出記録A | 蔵書番号、利用者番号、貸出日、返却期限、返却日 |
テーブル名 | 列名 |
---|---|
蔵書B | 蔵書番号、ISBN番号 |
書籍B | ISBN番号、書籍名、著者名、出版社名 |
利用者B | 利用者番号、利用者氏名、利用者住所、利用者電話番号 |
貸出記録B | 利用者番号、貸出日、蔵書番号、返却期限、返却日 |
C君が統合検索サービスの実現方式について、調査検討を行った結果を次に示す。
・両システムの蔵書テーブル中の"蔵書番号"には、共に10桁の数字が使われており、"蔵書A"テーブルと"蔵書B"テーブルの間で重複があった。
・両システムとも貸出記録テーブルの"返却日"の値は、貸出中はNULLを、返却後は返却した日付を設定していた。
・両システムのテーブルを統合する際、既存のテーブル定義とデータを保持したまま、一つのスキーマ上に各テーブルを実装することにした。
・統合検索サービスを実現する際、①統合検索向けのテーブルを作成して夜間バッチ処理で両市図書館の情報をコピーする方法と、ビューを用いて両市図書館の情報を直接参照する方法を比較し、ビューを用いて実現することにした。
C君が統合検索サービスを実現するために作成した"統合検索"ビューを図1に示す。
CREATE VIEW 統合検索 (書籍名,著者名,出版社名,ISBN番号,図書館名,貸出可能冊数)AS SELECT 書籍A.書籍名,書籍A.著者名,書籍A.出版社名,書籍A.ISBN番号, 'A市図書館',COUNT(書籍A.書籍番号) FROM 蔵書A,書籍A WHERE a AND 蔵書A.蔵書番号 NOT IN (SELECT 貸出記録A.蔵書番号 FROM 貸出記録A WHERE b ) GROUP BY 書籍名,著者名,出版社名,書籍A.ISBN番号 c SELECT 書籍B.書籍名,書籍B.著者名,書籍B.出版社名,書籍B.ISBN番号, 'B市図書館',COUNT(書籍B.ISBN番号) FROM 蔵書B,書籍B WHERE d AND 蔵書B.蔵書番号 NOT IN (SELECT 貸出記録B.蔵書番号 FROM 貸出記録B WHERE e ) GROUP BY 書籍名,著者名,出版社名,書籍B.ISBN番号
統合検索サービスの拡張
統合検索サービスの構築中に、市民からの強い要望があり、両市の図書館で貸出可能な蔵書の確認だけでなく、貸出予約もできる機能を追加することになった。そこでC君が検討した結果、両システムの蔵書テーブルに"貸出状況"の列を追加した。追加後の蔵書テーブルを表3に示す。ただし、"貸出状況"の列には"貸出中"、"貸出可"又は"予約済"(貸出中ではないが、予約されていて借りられない状態)のいずれかが格納されているものとする。貸出予約は、"貸出状況"の値が"貸出可"となっている蔵書を、"予約済"に変更する処理である。
テーブル名 | 列名 |
---|---|
蔵書A | 蔵書番号、書籍番号、貸出状況 |
蔵書B | 蔵書番号、ISBN番号、貸出状況 |
蔵書テーブルの変更後、C君はビューを使って、貸出予約に対応した"統合貸出予約"ビューを図2のとおり作成した。"統合貸出予約"ビューは、"貸出状況"の値が"貸出可"となっている蔵書の一覧を表示するものである。
CREATE VIEW 統合貸出予約 (蔵書番号,書籍名,著者名,出版社名,ISBN番号,図書館名,貸出状況)AS SELECT 蔵書A.蔵書番号,書籍A.書籍名,書籍A.著者名,書籍A.出版社名, 書籍A.ISBN番号,'A市図書館',蔵書A.貸出状況 FROM 蔵書A,書籍A WHERE a AND f c SELECT 蔵書B.蔵書番号,書籍B.書籍名,書籍B.著者名,書籍B.出版社名, 書籍B.ISBN番号,'B市図書館',蔵書B.貸出状況 FROM 蔵書B,書籍B WHERE d AND g
図2 貸出予約に対応した統合検索サービスのための"統合貸出予約"ビュー