知識ベース方法論

関数従属性のお話.とくに第三正規形のアルゴリズムについて.このあたりの厳密な定義を説明していた.情報の授業と同じような説明なのだが,例えばこんな感じ.


(\forall t1, t2 \in R)(t1[B1, ... , Bm] = t2[ B1, ... , Bm,] \to t1[ C1, ... , Cm] = t2[C1, ... , Cm] )


これは,関数従属性の定義なのだけど*1,こんなこと,実際に使うときに知っていなければならないかというと,そんなことはなかったりする.厳密な定義はデータベースを研究する人に任せておけばいいと思うのだけれどなぁ.そういう意味では知識でやるのはやや難しすぎないか.
ちなみに,上記の意味はデータベースのインスタンス集合Rの任意の要素t1, t2についてそれぞれの属性B1, ... , Bmの値が決まるとt1とt2のタプルが決まるならば,それぞれの属性C1, ... , Cmも同じ値になるような関係というもの.
といっても,何か難しそうだが,そんなことはない.たとえば郵便番号と都道府県名,市町村名の3つの属性があるリレーションを考えた場合,

t1[郵便番号] = t2[郵便番号] → t1[都道府県名, 市町村名] = t2[都道府県名, 市町村名]

は自明である.なぜなら,郵便番号は基本的に一意であるし,かりに複数の住所に郵便番号が付けられていたと仮定しても,都道府県名と市町村名にまたがって郵便番号が付けられることはあり得ないとすれば,上記の式は成り立つ.つまり,t1とt2が仮に違うインスタンス(タプル)であったとしても,郵便番号が同じであれば,都道府県名と市町村名が同じだということを示している.
逆の関係は成り立たない

t1[都道府県名, 市町村名] = t2[都道府県名, 市町村名] → t1[郵便番号] = t2[郵便番号]

なぜなら,市町村が同じであるからといって,郵便番号が同じであるとは限らないからである.

で,お話は極小被覆(minimal cover)や情報無損失分解のお話に続くのだが,正直言って,ここで述べているアルゴリズムは余り大したものではない.
むしろ極小被覆の求め方の方が重要だと思った.

*1:これは情報の授業「データベース論」のものです