リレーショナルデータベース

増永教授のDB特論⑦
「 SQL とバッグ意味論 ―重複タップルの部分削除―」

 

1. はじめに

 リレーショナルデータモデルの始祖コッド(E.F. Codd)はリレーション(relation)とは集合(set)であると定義しました.ここに,集合とは数学における「集合」を意味し,集合論の始祖カントール(G. Cantor)は「集合とは異なる元(element)の集まり」と定義しました.したがって,リレーションに重複したタップル(tuple)は出現しません.また,それが故にリレーションには必ず「キー」が定義できます.
 一方,国際標準リレーショナルデータベース言語 SQL (以下,SQL) で定義されるテーブル (table,表) は集合ではありません・・・・.テーブルでは重複したタップルの出現が許されるからです.したがって,テーブルでは必ずしもキーを定義できるわけではありません.
 テーブルは一般的にはバッグ(bag),数学ではマルチ集合(multiset)と呼ばれます.リレーションとテーブルの違いは,フォーマルには,リレーショナルデータモデルは集合意味論 (set semantics) に則り,SQL はバッグ意味論(bag semantics)に則った体系であると説明できます.意味論が違うので,当然のことながらリレーショナルデータモデルと実践のためのSQLではいろいろと違いが出てきます.本稿では,リレーションに対するデータ操作では起こり得ませんが,テーブルのデータ操作で発生する「重複タップルの部分削除」(partial delete of duplicate tuples)に焦点を当てて,少しく蘊蓄うんちくを傾けてみたいと思います.
 
続きを読む

増永教授のDB特論⑤「3NF 分解と関数従属性保存」

1. はじめに

 リレーショナルデータベース(RDB)を設計するにあたり,「リレーションは第 3 正規形(3NF)にしましょう」とはよく言われることです.リレーションの正規化理論によると,3NF への分解が情報無損失であることは間違いのないことですが,その際,関数従属性は保存されるのか,されないのか?このことについて,どうも不確かな認識が流布しているのではないか?と思われる事例に遭遇したので,この記事を書く気になりました.

続きを読む

増永教授のDB特論④「候補キーの見つけ方」

1. はじめに

 SQL でテーブルを定義するときに PRIMARY KEY や UNIQUE を指定すると思いますが,皆さんはリレーション(スキーマ)のキー(key)を一体どのようにして見つけていますか?
 そもそも,「キーとはタップルの一意識別能力を有する属性の組」であることは,リレーショナルデータモデルを学んだ人ならばデータベースのイロハといった事項でしょうが,具体的にリレーション(スキーマ)と所与の関数従属性の集合が指定されたときに,キーを求めなさいと言われると,結構難儀する場合もあるのではないか,と思います.
 本稿では,次に示す 3 つの問題について改めて論じてみます.

  • 候補キーを 1 つ見つける.
  • 候補キーをすべて見つける.
  • 候補キーの数の上限は?

続きを読む