ひっかかった“貸出”の主キー
設問1(1)
“貸出”の属性は、{書籍コード、利用者コード、貸出日、返却期限、返却日、貸出期間}である。
書籍の貸出及び返却の状況は下記の通り。
①同じ書籍が2冊以上ある場合は、それぞれに別の書籍コードを付与する。
②利用者コードは、利用者ごとに一意。
③当日返却もある。
④同じ利用者が同じ書籍(同一書籍コード)を何回も借りることがある。
⑤返却日に再度貸出を行うことがある。
⑥一日で同じ利用者が同じ書籍(同一書籍コード)を「貸出→返却→貸出→返却」 を行った場合、貸出管理上は一回の「貸出→返却」として管理している。
⑦書籍コード、利用者コード、貸出日、返却期限は、貸出時に値を設定。
返却日、貸出期間は、返却時に値を設定。
{書籍コード、貸出日}だけで行を一意に特定できると思ったが、
同じ日に別の利用者が同じ書籍コードを借りた場合に行を登録できなくなってしまうため、{書籍コード、利用者コード、貸出日}が正しい。
設問1(2)
第2正規形でない理由。定番問題。
・部分関数従属の例を指摘するだけ。
設問1(3)
第2正規形が設計上妥当である理由。定番問題。
・一事実複数箇所を認めるということは→更新されないから。
または、発生時点の情報を管理したいから。
・テーブル分割しない→テーブル結合処理が発生しない分、処理は速くなる。
設問2
“貸出”を“貸出管理”と“貸出履歴”に分割した場合の“貸出管理”のテーブル構成上の欠点を指摘する問題。
“貸出管理”テーブル構成は、{利用者コード、書籍コード1、貸出日1、・・・、書籍コード6、貸出日6}となっている。
図書館利用カードは不要といった記述から、返却処理の際には、各行の書籍コード1~6までを該当の書籍コードが見つかるまで検索し続けなければならない。
設問3(1)(2)
昔のDB設計の設問3は、性能調整の問題が定番だったのか。
検索業務と更新業務における“貸出”テーブルに対するアクセス競合とその解決策を述べる問題。
検索処理と更新処理を矛盾無く(直列可能性を保障して)行えるようにするためにはどのようなDBMSを選定すれば良いのかを考える。
・ロックの粒度がレコード単位等、小さくできるDBMSを選定する。
・多バージョンデータベース機能を備えたDBMSを選定する。
設問1(1)
“貸出”の属性は、{書籍コード、利用者コード、貸出日、返却期限、返却日、貸出期間}である。
書籍の貸出及び返却の状況は下記の通り。
①同じ書籍が2冊以上ある場合は、それぞれに別の書籍コードを付与する。
②利用者コードは、利用者ごとに一意。
③当日返却もある。
④同じ利用者が同じ書籍(同一書籍コード)を何回も借りることがある。
⑤返却日に再度貸出を行うことがある。
⑥一日で同じ利用者が同じ書籍(同一書籍コード)を「貸出→返却→貸出→返却」 を行った場合、貸出管理上は一回の「貸出→返却」として管理している。
⑦書籍コード、利用者コード、貸出日、返却期限は、貸出時に値を設定。
返却日、貸出期間は、返却時に値を設定。
{書籍コード、貸出日}だけで行を一意に特定できると思ったが、
同じ日に別の利用者が同じ書籍コードを借りた場合に行を登録できなくなってしまうため、{書籍コード、利用者コード、貸出日}が正しい。
設問1(2)
第2正規形でない理由。定番問題。
・部分関数従属の例を指摘するだけ。
設問1(3)
第2正規形が設計上妥当である理由。定番問題。
・一事実複数箇所を認めるということは→更新されないから。
または、発生時点の情報を管理したいから。
・テーブル分割しない→テーブル結合処理が発生しない分、処理は速くなる。
設問2
“貸出”を“貸出管理”と“貸出履歴”に分割した場合の“貸出管理”のテーブル構成上の欠点を指摘する問題。
“貸出管理”テーブル構成は、{利用者コード、書籍コード1、貸出日1、・・・、書籍コード6、貸出日6}となっている。
図書館利用カードは不要といった記述から、返却処理の際には、各行の書籍コード1~6までを該当の書籍コードが見つかるまで検索し続けなければならない。
設問3(1)(2)
昔のDB設計の設問3は、性能調整の問題が定番だったのか。
検索業務と更新業務における“貸出”テーブルに対するアクセス競合とその解決策を述べる問題。
検索処理と更新処理を矛盾無く(直列可能性を保障して)行えるようにするためにはどのようなDBMSを選定すれば良いのかを考える。
・ロックの粒度がレコード単位等、小さくできるDBMSを選定する。
・多バージョンデータベース機能を備えたDBMSを選定する。