「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年12月10日改訂)。

MENU

データサイエンスとデータベース(03/X)

 データベースの理論的な部分を

を基に学んでいく。

今日のまとめ

  • データベースには、信頼性を担保すべく

     ①ドメイン制約

     ②主キー制約

     ③参照整合的制約

     ④関数従属性による制約

    といった制約が求められる。
  • テーブルからデータを検索するための演算として、

     ①和

     ②積

     ③差

     ④直積

     ⑤射影

     ⑥選択

     ⑦結合

     ⑧商

    といった概念がある。

2. 関係データベースの基本

2.3 整合的制約

 データベースには信頼性が肝要である。関係モデルでは信頼性低下を予防するために整合的制約を課している。主な整合的制約として、

  • ドメイン制約:タプルが取る各属性の値はその属性のドメインの要素でなければならない。
  • 主キー制約:タプルを一意に特定するために、

     (1)主キー属性の値が同じであるようなタプルの複数入力を阻止する。

     (2)主キー属性に空値(\mathrm{NULL})を含む不完全なタプルの入力を阻止する。
  • 参照整合的制約:関係スキーマに外部キーが指定されているならば、その外部キーは、空値でなければ、別の関係スキーマの主キー属性の値でなければならない*1
  • 関数従属性による制約:2つの属性の間で片方の値を決定するともう一方の値が一意に決まる。

がある。

2.4 関係代数

2.4.1 テーブルからのデータ検索

 \mathrm{Codd}はテーブルから必要なデータを検索するための基礎理論として、関係代数および関係論理という2つのデータ操作言語を提案した。ここでは関係代数を説明する。
 関係データベースの検索言語が他にあったとして、それが関係代数または関係論理と少なくとも同等な検索能力を持つとき、関係完備であるという。たとえば\mathrm{SQL}は関係完備である。
 関係代数ではテーブルから必要なデータを検索するために8つの演算が定義されている。1つまたは2つのテーブルを入力とし、1つのテーブルを出力するのが関係代数の演算である。
 \mathrm{Codd}はそれぞれ4つの演算からなる2つのグループで関係代数の理論を構成した。第一のグループは、通常の集合演算をタプルの集合としてのリレーションに適用するものである。もう1つが関係データベースのテーブルに向けて\mathrm{Codd}が独自に定義した演算である。

   (1) 和(\mathrm{union})
   (2) 積(\mathrm{intersection})
   (3) 差(\mathrm{set\ difference})
   (4) 直積(\mathrm{direct\ product})
   (5) 射影(\mathrm{projection})
   (6) 選択(\mathrm{selection})
   (7) 結合(\mathrm{join})
   (8) 商(\mathrm{division})
2.4.2 関係代数の集合演算

 具体的に集合演算を定義する。同一の関係スキーマを持つ2つのテーブルT,T^{\prime}を考える。これらに対して和、積、差および直積を


\begin{aligned}
T\cup T^{\prime}&=\left\{t|t\in T\lor t^{\prime}\in T^{\prime}\right\},\\
T\cap T^{\prime}&=\left\{t|t\in T\land t^{\prime}\in T^{\prime}\right\},\\
T\setminus T^{\prime}&=\left\{t|t\in T\land t^{\prime}\notin T^{\prime}\right\},\\
T\times T^{\prime}&=\left\{(t,t^{\prime})|t\in T, t^{\prime}\in T^{\prime}\right\}
\end{aligned}

で定義する。

2.4.3 関係代数の独自演算

 次に関係代数独自の演算について定義する。
 射影は1つのテーブルから縦方向へデータを切り出し、検索に必要な属性の列をつなげて新たなテーブルを作るもので、入力テーブルTの関係スキーマR_T(A_1,\cdots,A_n)とし、検索したいm個の属性をA_{k_1},\cdots,A_{k_m},m\leq n,1\leq k_1,\lt\cdots\ltk_m\leq nとするとき、テーブルTに対して、属性列X=(A_{k_1},\cdots,A_{k_m})への射影を


\begin{aligned}
\pi_{X}(T)=\left\{(A_{k_1},\cdots,A_{k_m})|(A_{k_1},\cdots,A_{k_m})\in R_T(A_1,\cdots,A_n)\right\}
\end{aligned}

と定義する。
 選択は1つの入力テーブルを行の方向に切って、不要なタプルを切り捨て残りのタプルを貼り合わせる。その結果、必要なタプルのみから構成されるテーブルを出力するものである。必要なタプルを選ぶために選択条件式を用いる。選択条件式は入力テーブルの2属性A_i,A_jの値を比較する式で演算子\sim(=,\neq,\lt,\leq,\gt,\geq)とすれば、


\begin{aligned}
F=(A_i\theta A_j)
\end{aligned}

と書ける。更に論理演算子の否定\neg,\land,\lorを組み合わせ、より詳細な条件式も構成できる。
 入力テーブルTからの選択条件式Fによる選択演算を適用した結果、得られる出力テーブルを


\begin{aligned}
\sigma_F(T)
\end{aligned}

と書く。
 結合は2つの入力テーブルからより大きな1つのテーブルを出力する演算である。2つの入力テーブルT,T^{\prime}に結合条件式F=(A_i\theta A_j^{\prime})による結合演算を適用して得られたテーブルをT\Join_{F}T^{\prime}で表す。これをT,T^{\prime}の結合条件式Fによる結合という。すなわち


\begin{aligned}
T\Join_{F}T^{\prime}=\sigma_F(T\times T^{\prime})
\end{aligned}

である。
 は直積演算した結果を元に戻すものである。2つのテーブルT,T^{\prime}がそれらの関係スキーマR_T,R_{T^{\prime}}に含まれる全属性について、A_{R_{T^{\prime}}}\subset A_{R_{T}}が成り立つとする。T,T^{\prime}に対する商演算を適用した結果をT\div T^{\prime}と書き、TT^{\prime}で割った商という。
 商演算は他の演算を組み合わせることで表現できる。


\begin{aligned}
T\div T^{\prime}=\pi_P(T)\setminus\pi_P\left(\left(\pi_P\left(T\right)\times T^{\prime}\right)\setminus T\right)
\end{aligned}

2.4.4 実テーブルと導出テーブル、ビューテーブル

 一般に関係データベースは複数のテーブルから構成される。そのデータベースを直接構成するテーブルを実テーブルと呼ぶ。一方で関係代数の演算による出力を導出テーブルという。関係代数を適切に用いて複数の実テーブルからユーザーが必要とする部分のみを導出したテーブルをビューテーブルという。

*1:すなわち外部キーに指定されている列の値は、それを主キーとしている関係スキーマ内の主キー内に必ず存在していなければならないということである。

プライバシーポリシー お問い合わせ