- リレーションが 2NF にあり、推移的な部分依存関係が含まれていない場合、リレーションは 3NF になります。
- 3NF はデータの重複を減らすために使用されます。データの整合性を確保するためにも使用されます。
- 非素数属性に推移的な依存関係がない場合、関係は第 3 正規形でなければなりません。
自明でない関数の依存関係 X → Y ごとに次の条件の少なくとも 1 つを保持する場合、関係は第 3 正規形になります。
- Xはスーパーキーです。
- Y はプライム属性です。つまり、Y の各要素は何らかの候補キーの一部です。
例:
キャッチアンドトライJava
EMPLOYEE_DETAIL テーブル:
EMP_ID | EMP_NAME | EMP_ZIP | EMP_STATE | EMP_CITY |
---|---|---|---|---|
222 | ハリー | 201010 | 上 | ノイダ |
333 | ステファン | 02228 | 私たち | ボストン |
444 | そして | 60007 | 私たち | シカゴ |
555 | キャサリン | 06389 | イギリス | ノリッジ |
666 | ジョン | 462007 | MP | ボパール |
上の表のスーパーキー:
{EMP_ID}, {EMP_ID, EMP_NAME}, {EMP_ID, EMP_NAME, EMP_ZIP}....so on
候補キー: {EMP_ID}
非プライム属性: 指定されたテーブルでは、EMP_ID を除くすべての属性が非素数です。
マドゥバラ
ここで、EMP_STATE と EMP_CITY は EMP_ZIP に依存し、EMP_ZIP は EMP_ID に依存します。非プライム属性 (EMP_STATE、EMP_CITY) はスーパー キー (EMP_ID) に推移的に依存します。これは第 3 正規形の規則に違反します。
そのため、EMP_ZIP を主キーとして、EMP_CITY と EMP_STATE を新しいテーブルに移動する必要があります。
従業員テーブル:
EMP_ID | EMP_NAME | EMP_ZIP |
---|---|---|
222 | ハリー | 201010 |
333 | ステファン | 02228 |
444 | そして | 60007 |
555 | キャサリン | 06389 |
666 | ジョン | 462007 |
EMPLOYEE_ZIP テーブル:
EMP_ZIP | EMP_STATE | EMP_CITY |
---|---|---|
201010 | 上 | ノイダ |
02228 | 私たち | ボストン |
60007 | 私たち | シカゴ |
06389 | イギリス | ノリッチ |
462007 | MP | ボパール |