やる気がストロングZERO

やる気のストロングスタイル

DBスペシャリスト勉強メモ

候補キーを全て洗い出す問題

※推移的関数従属や部分関数従属があればそれも記載するような問題

言葉に馴染みがないので何を問われているのかがそもそもわからなかったりした。

候補キーとは

候補キーとは「主キーとなる候補」の事らしい。
「主キーになる候補が副数ある?」と混乱したが、これは普段見るテーブルは正規化が行われているからで、ここで問われるときに提示される「関係スキーマ」は正規化されていないことが多く主キーになる候補が副数あったりする。

例:
電子会議室投稿(電子会議室番号、議題、分野番号、分野名、表示順、作成者ユーザーID、投稿番号、投稿本文、投稿者ユーザーID)
※ちなみにこの関係スキーマと一緒に各項目の説明も一緒に記載されていたりする。それを見ながら従属判断をする。

以下が主キー(これが決まればデータが一意に特定できるもの)として使えそうだと導き出せた。

{電子会議室番号, 投稿番号}
「電子会議室番号」が決まれば「議題」「分野番号」「表示順」「作成者ユーザーID」が決まる。また、「分野番号」が決まることによって「分野名」が決まる(推移的従属性)
「投稿番号」が決まれば、「投稿番号」「暴行者ユーザーID」が決まる。また、「電子会議室番号、投稿番号」が決まることによって「投稿本文」が決まる

{分野名, 表示順, 投稿番号}
「分野名, 表示順」が決まることによって「電子会議室番号」が決まる。あとは上記と同じ。

うーむ、、理解できているか怪しい。。なんとなく解けるが突き詰めて定義を学ぼうとすると混乱してくる。

関数従属性

Aが決まれば自動的に決まってくる値(B)があれば、これは関数従属性があると言える A -> Bと表記する

副数の値が関数従属性に関わる場合もある。 AとBが決まればCが決まる場合 {A, B} -> Cと表記する

Aが決まれば、BとCが決まる場合 A -> {B, C}と表記する

部分関数従属性

上記の関数従属性でいう{A, B} -> Cの時、 別途B -> Dという関数従属性があるなら、これを部分関数従属といえる。 ただし、Dは他の関数従属性のキーになっている場合は部分関数従属性があるとは言えない

推移的関数従属性

上記の関数従属性でいうAが決まればBが決まり、Bが極まればCが決まる場合 A -> B -> C これを推移的関数従属性という。

システムの説明があって、テーブル設計の問題点などについての問題

細かい挙動をイメージしだすと全体像がわからなくなってしまう事が多かった。

最初に問題文を読むときに、定義されているテーブルにどういう感じでレコードが追加されていくのかをイメージしながら読み、 そのレコードのキーは何になるのかをイメージしておくと全体像を見失わないで済む。