2005年03月10日

[ テクニカルエンジニア(データベース)/H10以前 ]

平成8年 午前 問28 メモ

 関係:人名録(氏名,社名,役職)を射影によって分解して,関係:A(氏名,社名),関係:B(氏名,役職),関係:C(社名,役職)を作った。これら三つの関係から元の関係”人名録”を復元するための方法はどれか。ここで下線の付いた項目は主キーである。

ア A とB とC との直積を作る。
イ A とB との集合和を求める。
ウ A とB とを氏名で等値結合する。
エ A とC とを社名で等値結合する。
オ B とC とを役職で自然結合する。

正解:エ

元の関係AとB、AとCのどちらに分解しても 自然結合により元の関係"人名録"を再現できるので 損失なしの分解という点ではどちらも正しいといえるが、 次のような問題がある。

ア.元の関係をAとBに分解した場合(不適切な分解)
社名→役職の関数従属性が関係間の制約となっているため、
ある人が特定の社名、役職を持たないと、
特定の社名と役職との関係を挿入できない。
あるいは複数の人が同じ社名を持っている場合は、
その人たちが同じ役職を持つように監視しなければならないという
問題がある。この分解は不適切な分解といわれる。

イ.元の関係をAとCに分解した場合(適切な分解)
社名→役職の関係従属性が関係Cの中に含まれ、あらかじめ
特定の社名と役職の関係を挿入でき、上のような問題は生じない。
この分解は適切な分解と呼ばれる。


関連記事
iTAC > テクニカルエンジニア(データベース) > 2004.01.01-2004.04.03までのログ > 理解不能です
http://www.mirai.ne.jp/~suehiro/am/h0804/db-h8.htm
http://school4.2ch.net/test/read.cgi/lic/1108469078/331-


解決記事
http://www.itac.gr.jp/dsp/bbs/log11.asp#0204210103

Posted by g@kko at 2005/03/10 20:56 | 個別記事表示 | コメントを見る (3) |
この記事をLicWikiに埋め込む:

2005年03月02日

[ テクニカルエンジニア(データベース)/H10以前 ]

H9午後I 問2 SQL俯瞰

H9午後I 問2
設問1:CREATE VIEW

CREATE VIEW 月別作業時間
( 年, 月, 所属部門コード, 契約社員No, 基準内作業時間計, 時間外作業時間計 )
AS SELECT
年, 月, 所属部門コード, 契約社員No, SUM( 基準内作業時間 ), SUM( 時間外作業時間 )
FROM 勤務実績, 社員, 作業内容
WHERE 勤務作業コード = 作業コード AND
      就業区分 = 0 AND
      勤務社員No = 社員No

GROUP BY 年, 月, 所属部門コード, 勤務社員No



設問2:副問合せ,HAVING

SELECT 所属部門コード, 部門名称, COUNT(*), MAX( 時間外作業時間計 )
FROM 月別作業時間, 部門
WHERE 年 = '97' AND
     月 = '04' AND
     所属部門コード = 部門コード AND
     時間外作業時間計 > ( SELECT AVG( 時間外作業時間計 )
       FROM 月別作業時間
       WHERE 年 = '97' AND 月 = '04' )

GROUP BY 所属部門コード, 部門名称
HAVING COUNT(*) > 5
ORDER BY 所属部門コード



設問2:GRANT

GRANT ALL ON 社員 TO USER人事

Posted by g@kko at 2005/03/02 12:55 | 個別記事表示 | コメントを見る (0) |
この記事をLicWikiに埋め込む:

2005年02月06日

[ テクニカルエンジニア(データベース)/H10以前 ]

H09午後I 問2

H9午後I 問2(ITEC 2004予想問題集 午後I 問3-3)

SQL系の問題の不足を感じ2004の問題集を持ってくる。
う~ん。本がキレイだ。まるで使っていないかのような美しさ。
(ホントは買っただけで使っていないのかな。。。よく見てみると,午前400問と3週間本(2003),記述式・事例解析の重点対策(2004)しか使った形跡がない!!そりゃ落ちるわなw)

話はそれたが,ここから本題。

設問1
 初めて見るCREATE VIEWの問題。
 元々覚えてないし,やっぱり躓く。
 (b) AS SELECT
  ASを忘れる。。。基本だろうなきっと。日頃,SQLに縁がなければ,こんなもんすな。

 (e) 年,月,所属部門コード,契約社員No
  契約社員Noだけ指定。。。あ゛ぁ・・・
  SELECT X とすると,Xは
  ・GROUP BY句で指定された列か,その列を含む計算式
  ・定数
  ・集合関数
  でなければならない。(新版データベース技術 P95より)

 散々だ・・・

設問2
 ・SELECT文全体を囲む括弧を忘れる。最近の問題は「( [解答] )」と,括弧は外に出ている問題が殆ど。
 ・集合関数AVGを・・・AVEと書く(苦笑),Excelはaverageだし,どこからどう来たんだかw

設問3(2)
 GRANTの問題はH12午後Ⅰ問3にあったんだけど,その具体的な内容について問う問題。
 私の解答は,嘘っぱちなんで割愛してw
 ・VIEWのFROM句にある全ての表に参照権限が必要 (新版データベース技術 P85⑤(ア)より)
 ・外部キーを定義する時は被参照表の主キーのREFERENCE権限が必要(新版データベース技術 P86⑤ウより)

SQLはもっとやっとかないとダメっぽいな。。

Posted by g@kko at 2005/02/06 16:05 | 個別記事表示 | コメントを見る (0) |
この記事をLicWikiに埋め込む:

2005年01月29日

[ テクニカルエンジニア(データベース)/H10以前 ]

H10午後I 問5

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社内でコントロールできない問題,つまりは不可抗力で各店のビデオテープの保有本数に変更が発生する場合を考えなければならない。)
 と,いうことで別解として良いと判断した。

Posted by g@kko at 2005/01/29 09:45 | 個別記事表示 | コメントを見る (0) |
この記事をLicWikiに埋め込む:

2005年01月28日

[ テクニカルエンジニア(データベース)/H10以前 ]

H10午後I 問5

H10午後I 問5

Commented by はぁはぁ at 2005-01-28 18:23
向こうでも書いたんだけど、反応なさそうなので…
マルチだけど許してネ。
この年の午後1問5のデータベース設計の解答をUPしてください。
3週間本('03年度に載ってたけど、'05年度には載ってるかな??)
なんで、解答に信憑性がないから心配。
問題が無かったらいいですヨ。

遅くなってすいません。
昨日の午前から仕事@出張で不在でした。

H10午後Ⅰ問5について

手元にある本
 2005 データベース予想問題集(アイテック)
 2005 データベース徹底解説本試験問題
 新版 データベース技術(アイテック)
 2004 データベース予想問題集(アイテック)
 2004 データベース記述式・事例解析の重点対策(アイテック)

には,載ってないですね。

 2003 3週間完全マスター テクニカルエンジニアデータベース
なら,手元にあるので,明日でよければ解いてみます。

Posted by g@kko at 2005/01/28 23:35 | 個別記事表示 | コメントを見る (0) |
この記事をLicWikiに埋め込む: