Hatena::ブログ(Diary)

winplusの日記 このページをアンテナに追加 RSSフィード

2007-03-11

7NF

404 Not Foundに7NFの資料が公開されている。なるほど。上のは間違い。

まず、「存在」も「もの」になっている。「存在」のテーブルは「ID」1カラムのみ。

{売上関連:[売上関連ID]、売上ID、顧客ID、商品ID、日付ID}
├{売上:[売上ID]}
├{顧客:[顧客ID]、顧客名}
├{商品:[商品ID]、商品名、単価}
└{日付:[日付ID]、日付}

つぎに「属性」を分解する。

{売上関連:[売上関連ID]、売上ID、顧客関連ID、商品関連ID、日付ID}
├{売上:[売上ID]}
├{顧客関連:[顧客関連ID]、顧客ID、顧客名ID}
│ ├{顧客:[顧客ID]}
│ └{顧客名:[顧客名ID]、顧客名}
├{商品関連:[商品関連ID]、商品ID、商品名ID、単価ID}
│ ├{商品:[商品ID]}
│ ├{商品名:[商品名ID]、商品名}
│ └{単価:[単価ID]、単価}
└{日付:[日付ID]、日付}

さらに、「関連」は「存在」と「属性」をひとつづつ取り上げる。

{売上顧客関連:[売上顧客関連ID]、売上ID、顧客ID}
├{売上:[売上ID]}
└{顧客:[顧客ID]}
{顧客顧客名関連:[顧客顧客名関連ID]、顧客ID、顧客名ID}
├{顧客:[顧客ID]}
└{顧客名:[顧客名ID]、顧客名}
{売上商品関連:[売上関連ID]、売上ID、商品ID}
├{売上:[売上ID]}
└{商品:[商品ID]}
{商品商品名関連:[商品商品名関連ID]、商品ID、商品名ID}
├{商品:[商品ID]}
└{商品名:[商品名ID]、商品名}
{商品単価関連:[商品単価関連ID]、商品ID、単価ID}
├{商品:[商品ID]}
└{単価:[単価ID]、単価}
{売上日付関連:[売上日付関連ID]、売上ID、日付ID}
├{売上:[売上ID]}
└{日付:[日付ID]、日付}

結局こんな感じかなあ。

  • 「存在」のテーブルは、「ID」1カラムのみ。
  • 「属性」のテーブルは、すべて「ID」と「属性値」の2カラム。
  • 「関連」のテーブルは、すべて「ID」と関連する2つの「ID」の3カラム。

ところで、404 Not Foundには、下のようにある。

天上界にある「リソース」間を繋ぐ関係というものは存在しないのか?......
そのメタ関係テーブルは、突き詰めるとそれらが指す関係テーブルのさらに先にある
具象リソースへのポインタであるため、それらの実体(リソース)を直接指すようにす
ることで、従来の天上界の関係テーブルへと解消することが可能だ.....

だとすると、むしろこうなのか?

{売上顧客名関連:[売上顧客名関連ID]、売上ID、顧客名ID}
├{売上:[売上ID]}
└{顧客名:[顧客名ID]、顧客名}
{売上商品名関連:[売上商品名関連ID]、売上ID、商品名ID}
├{売上:[売上ID]}
└{商品名:[商品名ID]、商品名}
{売上単価関連:[売上単価関連ID]、売上ID、単価ID}
├{売上:[売上ID]}
└{単価:[単価ID]、単価}
{売上日付関連:[売上日付関連ID]、売上ID、日付ID}
├{売上:[売上ID]}
└{日付:[日付ID]、日付}
  • 「存在」のテーブルは、「ID」1カラムのみ。
  • 「属性」のテーブルは、すべて「ID」と「属性値」の2カラム。
  • 「関連」のテーブルは、すべて「ID」と存在の「ID」と属性の「ID」の3カラム。

合っているのか?

トラックバック - http://d.hatena.ne.jp/winplus/20070311/1173576253