
推移的依存関係は、ソフトウェア コンポーネント間の間接的な依存関係です。この種の依存関係は、ソフトウェアが直接依存するコンポーネントからの 推移的な関係によって保持されます。
コンピュータプログラム
コンピュータ プログラムでは、直接的な依存関係とは、ライブラリ、API、またはプログラム自体によって直接参照されるソフトウェア コンポーネントの機能です。推移的な依存関係とは、プログラムによって直接的または間接的に参照される別のコンポーネントによって誘発される依存関係です。たとえば、関数の呼び出しによって、ログ ファイルにメッセージを書き込むI/O をlog()管理するライブラリへの推移的な依存関係が誘発される場合があります。
依存関係と推移的依存関係は、コンピュータ プログラムがどのようにアセンブルおよび/または実行されるかに応じて、異なるタイミングで解決できます。たとえば、コンパイラには依存関係を解決するリンク フェーズがあります。ビルド システムでは推移的依存関係の管理も許可されることがあります。[引用が必要]
同様に、コンピュータがサービスを使用する場合、コンピュータ プログラムは、プログラムを実行する前に開始する必要があるサービスに依存することがあります。このような場合の推移的な依存関係とは、直接依存しているサービスが依存している他のサービスです。たとえば、Web ブラウザは、 Web URLをIP アドレスに変換するためにドメイン名解決サービスに依存します。DNS は、リモート ネーム サーバーにアクセスするためにネットワーク サービスに依存します。Linux ブート システムsystemd は、開始するモジュールの依存関係を宣言する一連の構成に基づいています。ブート時に、 systemd はすべての推移的な依存関係を分析して、開始する各モジュールの実行順序を決定します。
データベース管理システム
エンティティ A、B、C が存在し、次のステートメントが成り立つとします。
- A → B 直接依存関係が存在します。
- B→A関係はありません。
- B → C 直接依存関係が存在します。
すると、関数従属性 A → C は推移的従属性になります(推移性の公理に従います)。
データベース正規化において、第3正規形の重要な特徴の1つは、特定の種類の推移的依存関係を除外することです。リレーショナルモデルの発明者であるEF Coddは、1971年に推移的依存関係と第3正規形の概念を導入しました。[1]
例
推移的な依存関係は次の関係で発生します。
機能的依存関係 {書籍} → {著者の国籍} が出現します。つまり、書籍がわかれば、著者の国籍がわかります。さらに、
- {書籍} → {著者}
- {著者} は → {書籍} ではない
- {著者} → {著者の国籍}
したがって、{書籍} → {著者の国籍} は推移的な依存関係です。
注記
- ^ Codd, EF 「データベースリレーショナルモデルのさらなる正規化」 (Courant Computer Science Symposia Series 6、「データベースシステム」、ニューヨーク市、1971 年 5 月 24 日~25 日発表) IBM 研究レポート RJ909 (1971 年 8 月 31 日)。Randall J. Rustin (編)、『データベースシステム: Courant Computer Science Symposia Series 6』に再掲載。Prentice-Hall、1972 年。第 3 正規形と推移的依存関係については、45 ~ 51 ページを参照してください。
