データの重複をなくし、データの論理的不整合を防ぐように設計すること。
社員番号 | 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以降の理解が浅いのでちょっと自信がない。。。