2012年 春期 応用情報技術者試験 問6

複数の図書館の検索システムの統合

隣接するA市とB市は、半年後に合併を控えており、様々な情報システムの統合を計画している。両市が運営する図書館システムについて、統合を検討した結果、両図書館の貸出し可能な蔵書が確認できる統合検索サービスを実現することにした。その設計は、システム開発会社のC君が担当することになった。

A市とB市の現在の図書館システムのテーブル構造を表1と表2に示す。表1と表2において、下線は主キーを表す。

表1 A市図書館システムのテーブル構造
テーブル名列名
蔵書A蔵書番号、書籍番号
書籍A書籍番号、書籍名、著者名、出版社名、ISBN番号
利用者A利用者番号、利用者氏名、利用者住所、利用者電話番号
貸出記録A蔵書番号、利用者番号、貸出日、返却期限、返却日
注記 同じ本が複数冊ある場合、"書籍番号"は同じだが"蔵書番号"は1冊ごとに異なる。
表2 B市図書館システムのテーブル構造
テーブル名列名
蔵書B蔵書番号、ISBN番号
書籍BISBN番号、書籍名、著者名、出版社名
利用者B利用者番号、利用者氏名、利用者住所、利用者電話番号
貸出記録B利用者番号、貸出日、蔵書番号、返却期限、返却日
注記 同じ本が複数冊ある場合、"ISBN番号"は同じだが"蔵書番号"は1冊ごとに異なる。

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に示す。ただし、"貸出状況"の列には"貸出中"、"貸出可"又は"予約済"(貸出中ではないが、予約されていて借りられない状態)のいずれかが格納されているものとする。貸出予約は、"貸出状況"の値が"貸出可"となっている蔵書を、"予約済"に変更する処理である。

表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 貸出予約に対応した統合検索サービスのための"統合貸出予約"ビュー

出典:平成24年度 春期 応用情報技術者試験 午後 問6