データベースにおける推移依存関係とは

正規化を確実にするための推移的依存関係の回避

データベースにおける推移的な依存関係は、 機能的な依存関係を引き起こす同じテーブル内の値間の間接的な関係です。 第3正規形(3NF)の正規化基準を達成するには、推移的な依存関係をなくす必要があります。

その性質上、推移的な依存関係は、それらの間に機能的な依存関係を持つ3つ以上の属性(またはデータベース列)を必要とします。つまり、表の列Aは中間列Cを介して列Bに依存します。

これがどのように機能するか見てみましょう。

一過性の依存関係の例

作家

Author_ID 著者 Author_Nationality
Auth_001 オルソン・スコットカード エンダーのゲーム アメリカ
Auth_001 オルソン・スコットカード エンダーのゲーム アメリカ
Auth_002 マーガレットアトウッド おばあちゃんの物語 カナダ

上記のAUTHORSの例では、

しかし、この表には推移的な依存性が導入されています。

推移的な依存関係の回避

Third Normal Formを確実にするには、推移的な依存関係を削除しましょう。

まず、AuthorsテーブルからBookカラムを削除し、別のBooksテーブルを作成します。

書籍

Book_ID Author_ID
Book_001 エンダーのゲーム Auth_001
Book_001 心の子供たち Auth_001
Book_002 おばあちゃんの物語 Auth_002

作家

Author_ID 著者 Author_Nationality
Auth_001 オルソン・スコットカード アメリカ
Auth_002 マーガレットアトウッド カナダ

これで解決しましたか? 今、依存関係を調べてみましょう:

BOOKSテーブル

著者表

このデータを正規化するために3番目のテーブルを追加する必要があります。

Country_ID
Coun_001 アメリカ
Coun_002 カナダ

作家

Author_ID 著者 Country_ID
Auth_001 オルソン・スコットカード Coun_001
Auth_002 マーガレットアトウッド Coun_002

今度はテーブル間をリンクするために外部キーを使用する3つのテーブルがあります:

推移的な依存関係が悪いデータベース設計である理由

3NFを確実にするために過渡的な依存関係を避けることの価値は何ですか? 私たちの最初のテーブルをもう一度考えて、それが作る問題を見てみましょう:

作家

Author_ID 著者 Author_Nationality
Auth_001 オルソン・スコットカード エンダーのゲーム アメリカ
Auth_001 オルソン・スコットカード 心の子供たち アメリカ
Auth_002 マーガレットアトウッド おばあちゃんの物語 カナダ

このような設計は、データの異常や矛盾を引き起こす可能性があります。たとえば、

これは、 正規化が過渡的な依存関係を回避し、データを保護し、一貫性を保証する理由の一部です。