H10午後I 問5 3週間本(2003)P443~
設問1(1)
候補キー(若しくは主キー)の一部であるタイトル番号に対して非キー属性のタイトル名,貸出開始日付,旧作指定日付,ジャンル,新旧区分が関数従属すること(部分関数従属性が存在すること)を文字数内で表現できていれば良いかと。
候補キー(若しくは主キー)に全ての非キー属性が完全関数従属しない。という表現でも問題ない。
※ここでは,テーブルの主キーが問題内に明示してあるので,候補キー(若しくは主キー)の列{店番号,タイトル番号}を明記する必要はないと思われる。むしろ非キー属性の方を示すべきではないだろうか。
設問1(2)
店保有タイトル(店番号,タイトル番号,初期本数,現本数)
タイトル(タイトル番号,タイトル名,貸出開始日付,旧作指定日付,ジャンル,新旧区分)
※表現の都合,関係スキーマで表したがテーブル構造で示すこと。
設問2(1)
返却時の処理を考える。問題文での返却処理はふたつ
・『返却時は,返却されたビデオテープのバーコードを読み取り,返却年月日を記録する。』
・『返却予定年月日を過ぎて返却されたときは,遅延料金を徴収する。』
どちらかに問題がある。と,いうことだ。
記事の都合,後者から考える(w
『遅延料金は,遅延日数に1日当たりの遅延料金(新作と旧作で異なる)を乗じた額である。』
から,脊髄反射的に思いつくのは,
『貸出(遅延)期間中に新旧区分が変わった場合どうなるのか。』
と,いうことである。
問題文中では,この処理は明記されていないが,新作で精算しようが,按分しようが,「貸出年月日」と「返却年月日」及び「旧作指定日付」で解決できそうだ。
前者の場合,
バーコードで貸出返却の返却年月日を記録する。ということだが,
バーコードの情報(タイトル番号,タイトル内通番)(図1より)では,貸出返却の行が一意に特定できない。これがC氏が指摘した問題である。
ここらへんの内容をうまく文字数内で表現できれば問題ないと思う。
余談だが,会員カードがあれば一意に特定できるのか?ということだが,貸出期間中に同一会員に同一タイトルを複数本貸出をしていなければ可能である。
設問2(2)
タイトル内通番
※問題文中の用語を使うこと。
貸出年月日~返却年月日の間に1本のビデオ{タイトル番号,タイトル内通番}は1人の会員{店番号,会員番号}にしか貸し出すことはできない。(物理的に)
また,{タイトル番号,タイトル内通番}毎に貸出回数がカウントできるため,③の問題点にも対応できる。
設問3
タイトル貸出推移(タイトル番号,年月日,貸出残本数) もしくは
タイトル貸出推移(タイトル番号,年月日,全本数,貸出残本数)
※表現の都合,関係スキーマで表したがテーブル構造で示すこと。
図3,図5からボトムアップしてみると
タイトル情報(タイトル番号,初期本数,貸出開始)
タイトル貸出状況推移(タイトル番号,年月日,貸出残本数,全本数,貸出済本数)
タイトル情報の「初期本数」は全店の「タイトル.初期本数」の合計であり,時間経過で変更される情報でないため,わざわざテーブルを追加する必要はないと思われる。
タイトル貸出状況推移の方は,
貸出残本数 = 全本数 - 貸出済本数
で,求められるため,冗長のように見える。
ここで考慮すべき点は,時系列性の保持である。
『新作の期間は,各店のビデオテープの保有本数を変更しない』
『図3 新作ビデオタイトル貸出状況推移の表示例』
から,新作だけを対象としていて,新作期間は「全本数」=全店の「タイトル.初期本数」の合計であることが伺える。
このことから,「全本数」は保持しなくて良いと判断もできる。
が,実際は事故は付き物で,会員による紛失(トンズラ)などによる全本数の減も考慮すべきではないか。 と思う。(A社内でコントロールできない問題,つまりは不可抗力で各店のビデオテープの保有本数に変更が発生する場合を考えなければならない。)
と,いうことで別解として良いと判断した。