データの重複をなくし、データの論理的不整合を防ぐように設計すること。
| 社員番号 | ID | 名前 | 性別 | 住所 | 電話番号 |
|---|---|---|---|---|---|
| 1 | 1001 | 山田太郎 | 男 | 東京都千代田区 | 03-1234-5678 |
| 2 | 1002 | 田中花子 | 女 | 東京都渋谷区 | 03-2345-6789 |
| 3 | 1003 | 鈴木次郎 | 男 | 東京都新宿区 | 03-3456-7890 |
| 4 | 1004 | 佐藤三郎 | 男 | 東京都港区 | 03-4567-8901 |
| 5 | 1005 | 高橋四郎 | 男 | 東京都目黒区 | 03-5678-9012 |
主キー:{社員番号, ID}
候補キー:{社員番号, ID}, {電話番号}
スーパーキー:{社員番号, ID}, {社員番号, ID, 名前}, {社員番号, ID, 氏名, 性別} etc...
非正規系
| 伝票番号 | 製品番号 | 製品名 |
|---|---|---|
| 1 | A001 A002 A003 |
リンゴ ミカン バナナ |
| 2 | A004 A005 A006 |
ブドウ ナシ イチゴ |
1NF
| 伝票番号 | 製品番号 | 製品名 |
|---|---|---|
| 1 | A001 | リンゴ |
| 1 | A002 | ミカン |
| 1 | A003 | バナナ |
| 2 | A004 | ブドウ |
| 2 | A005 | ナシ |
| 2 | A006 | イチゴ |
2NF前
| 伝票番号 | 製品番号 | 製品名 |
|---|---|---|
| 1 | A001 | リンゴ |
| 1 | A002 | ミカン |
| 1 | A003 | バナナ |
| 2 | A004 | ブドウ |
| 2 | A005 | ナシ |
| 2 | A006 | イチゴ |
候補キーである{伝票番号, 製品番号}と非キー属性である製品名が部分関数従属している。
2NF 売上明細テーブル
| 伝票番号 | 製品番号 |
|---|---|
| 1 | A001 |
| 1 | A002 |
| 1 | A003 |
| 2 | A004 |
| 2 | A005 |
| 2 | A006 |
商品テーブル
| 製品番号 | 製品名 |
|---|---|
| A001 | リンゴ |
| A002 | ミカン |
| A003 | バナナ |
| A004 | ブドウ |
| A005 | ナシ |
| A006 | イチゴ |
部分関数従属は候補キーが複合キーの場合にのみ発生するので、候補キーが単一属性である場合は発生しない。
3NF前
| 伝票番号 | 製品番号 | 顧客番号 | 顧客名 |
|---|---|---|---|
| 1 | A001 | B1 | リンゴ商事 |
| 1 | A002 | B1 | ミカン商事 |
| 1 | A003 | B1 | バナナ商事 |
| 2 | A004 | C1 | ブドウ商事 |
| 2 | A005 | C1 | ナシ商事 |
| 2 | A006 | C1 | イチゴ商事 |
主キーが{伝票番号, 製品番号}の時、{伝票番号, 顧客番号}→{顧客番号}→{顧客名}と推移的従属している。
3NF 売上明細テーブル
| 伝票番号 | 製品番号 |
|---|---|
| 1 | A001 |
| 1 | A002 |
| 1 | A003 |
| 2 | A004 |
| 2 | A005 |
| 2 | A006 |
顧客テーブル
| 顧客番号 | 顧客名 |
|---|---|
| B1 | リンゴ商事 |
| B1 | ミカン商事 |
| B1 | バナナ商事 |
| C1 | ブドウ商事 |
| C1 | ナシ商事 |
| C1 | イチゴ商事 |
BCNF前
| 名前 | 科目 | 担任 |
|---|---|---|
| ボブ | 数学 | 山田 |
| トム | 数学 | 佐藤 |
| ジョン | 数学 | 鈴木 |
| ジョン | 英語 | 安藤 |
主キーが{名前, 科目}の時、{担任}→{科目}の関数従属性があり、決定項(A→BのAのこと)がスーパーキーではない。
BCNF 受講テーブル
| 名前 | 科目 |
|---|---|
| ボブ | 数学 |
| トム | 数学 |
| ジョン | 数学 |
| ジョン | 英語 |
担任テーブル
| 担任 | 科目 |
|---|---|
| 山田 | 数学 |
| 佐藤 | 数学 |
| 鈴木 | 数学 |
| 安藤 | 英語 |
{名前, 科目}→{担任}の情報が失われたため、ジョンの数学の担任が誰か分からなくなった。
4NF前
| 名前 | 趣味 | 好物 |
|---|---|---|
| 田中 | 野球 | ラーメン |
| 鈴木 | サッカー | 寿司 |
| 佐藤 | バスケ | カレー |
主キーが{名前, 趣味, 好物}であるとき、{名前}→{趣味}→{好物}と複数の属性が決まる。
4NF 趣味テーブル
| 名前 | 趣味 |
|---|---|
| 田中 | 野球 |
| 鈴木 | サッカー |
| 佐藤 | バスケ |
好物テーブル
| 名前 | 好物 |
|---|---|
| 田中 | ラーメン |
| 鈴木 | 寿司 |
| 佐藤 | カレー |
5NF前
| 店舗 | 在庫商品 | 製造元 |
|---|---|---|
| 東京 | TV | A社 |
| 東京 | TV | B社 |
| 東京 | PC | A社 |
| 神奈川 | TV | A社 |
{店舗}→{在庫商品}, {店舗}→{製造元}, {在庫商品}→{製造元}と複数に分解できる。
5NF 在庫テーブル
| 店舗 | 在庫商品 |
|---|---|
| 東京 | TV |
| 東京 | TV |
| 東京 | PC |
| 神奈川 | TV |
仕入れ先テーブル
| 店舗 | 仕入先 |
|---|---|
| 東京 | A社 |
| 東京 | B社 |
| 東京 | A社 |
| 神奈川 | A社 |
メーカーテーブル
| 店舗 | 製造元 |
|---|---|
| 東京 | A社 |
| 東京 | B社 |
| 東京 | A社 |
| 神奈川 | A社 |
BCNF以降の理解が浅いのでちょっと自信がない。。。