このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

図のテキスト表現と図の翻訳

図のテキスト表現

符号化ERA図 {
 実体
   学生;
 属性
   学年:学生→int;

 符号化
   番号:学生→int;
}

符号化ER図 {
 実体
  学生, コース;
 関連
  履修(学生, コース);

 符号化
  <氏名, 生年月日>:学生→string×date,
  コース名:コース→string;
}

符号化ER図 {
 実体
  学生, コース;
 関連
  履修(学生, コース);

 符号化
  番号:学生→int,
  コース名:コース→string;
}

/* 属性と符号化 /

符号化ERA図 {
 実体
   学生;
 属性
   氏名:学生→string,
   生年月日:学生→date;

 符号化
   番号:学生→int;
}

符号化ERA図 {
 実体
   学生;
 属性
   番号:学生→int;

 符号化
   <氏名, 生年月日>:学生→string;
}

/* 単項関係を含むER図 */

ER図 {
 実体 学生;
 関連 2年生(学生);
}

ER図 {
 実体 学生;
 関連 女子(学生);
}

ER図 {
 実体 学生;
 関連 特待(学生);
}
禁止事項

X⊆Y となるX, Yを異なる実体として図に入れてはならない。

  1. 女子学生⊆学生
  2. 2年生⊆学生
  3. 教員=教官
  4. 教授⊆教員
  5. 特待生⊆学生

単項関係として関連ノードとして持つのはいい。単項関係(=単項述語)は、次の形で定式化される。

  1. 単項関係テーブル(例:$特待生(→$学生))
  2. 単項述語カラム(例:カラム 特待生:$(学生+特待生)→bool

ここで、テーブル名(→外部キー参照先テーブル, ...)

派生図の作り方

追加
  1. 実体の直積を付け加えてよい。
  2. 関連の直積を付け加えてよい。
  3. 関連の結合を付け加えてよい。
  4. 符号化と属性で定義可能な部分実体を単項関連として付け加えてよい。例:女子学生、2年生学生
置換
  1. 条件を満たすなら、符号化と属性を交換してもよい。
  2. 属性を関連に置き換えてよい。
  3. 条件を満たすなら、関連を属性に置き換えてよい。

ER図からTC図へ

  1. 実体ノードはテーブルノードへ
  2. 関連ノードもテーブルノードへ
  3. 関連の脚を外部キーカラムに
  4. 符号化を主キーカラムに

TC図のカラムは主キーカラムか外部キーカラムで、それ以外のカラムは存在しない。


ERA図からTC図へ

属性の扱いがいくつかあるので、一意的には決まらない。

  • 属性も独立したテーブルにする。属性テーブルへの翻訳。
  • 属性の始域である実体に対して属性による拡張を行う。実体テーブルの属性拡張への翻訳。

派生と従属性制約

  • 単項関連制約 P isDefinable "P is definable by condition"
  • 属性制約 a isCompOf(b, g) "a is the composite of b and g"
  • 非単項関連制約 R isCompOf(S, T, B) "R is the composite of S and T via B"
  • 実体の直積制約 X isProdOf(A, B) "X is the product of A and B"
  • 関連の直積制約 R isProdOf(S, T) "R is the product of S and T"

基本となっているのは、モノイド圏Relかモノイド多圏MRelRel, MRelの部分圏/部分多圏を生成系でどう定義するか? という問題。

Relを直接定義するには、ER2図が適切。ER2図は、関連が2項関連に限定するもの。しかし、モノイド積、モノイド単位、対角を持ち、モノイド積と対角から射影を作れる。単項関係は、モノイド単位からの射だから、片方のカラムが自明な関連テーブルにエンコードされる。