
推移的依存関係とは、ソフトウェアコンポーネント間の間接的な依存関係です。この種の依存関係は、ソフトウェアが直接依存するコンポーネントからの 推移的な関係によって維持されます。
コンピュータプログラム
コンピュータプログラムにおいて、直接的な依存関係とは、ライブラリ、API、またはプログラム自体が直接参照するソフトウェアコンポーネントの機能を指します。推移的な依存関係とは、プログラムが直接的または間接的に参照する別のコンポーネントによって誘発される依存関係を指します。例えば、関数の呼び出しは、ログファイルへのメッセージ書き込みのI/Olog()を管理するライブラリへの推移的な依存関係を誘発する場合があります。
依存関係と推移的依存関係は、コンピュータプログラムのアセンブル方法や実行方法に応じて、異なるタイミングで解決される場合があります。例えば、コンパイラには依存関係を解決するリンクフェーズがあります。場合によっては、ビルドシステムによって推移的依存関係の管理が可能な場合もあります。[要出典]
同様に、コンピュータがサービスを使用する場合、コンピュータプログラムは、プログラムの実行前に起動する必要があるサービスに依存することがあります。このような場合の推移的な依存関係とは、直接依存するサービスが依存する他のサービスを指します。例えば、WebブラウザはWeb URLをIPアドレスに変換するためにドメイン名解決サービスに依存します。DNSはリモートネームサーバーにアクセスするためにネットワークサービスに依存します。Linuxブートシステムであるsystemdは、起動するモジュールの依存関係を宣言する一連の設定に基づいています。つまり、起動時にsystemdはすべての推移的な依存関係を分析し、各モジュールの起動順序を決定します。
データベース管理システム
次の文が成り立つようなエンティティ A、B、C が存在するとします。
- A→Bの直接依存関係が存在します。
- B→A関係はありません。
- B→C直接依存関係が存在します。
すると、関数従属性A → C は推移的従属性になります(推移性の公理に従います)。
リレーショナルデータベースの正規化において、第三正規形の重要な特徴の一つは、特定の種類の推移的依存関係を除外することです。リレーショナルモデルの発明者であるEF Coddは、 1971年に推移的依存関係と第三正規形の概念を導入しました。[1]
例
推移的な依存関係は次の関係で発生します。
| 本 | ジャンル | 著者 | 著者の国籍 |
|---|---|---|---|
| 海底二万里 | SF | ジュール・ヴェルヌ | フランス語 |
| 地底旅行 | SF | ジュール・ヴェルヌ | フランス語 |
| 草の葉 | 詩 | ウォルト・ホイットマン | アメリカ人 |
| アンナ・カレーニナ | 文学小説 | レフ・トルストイ | ロシア |
| 告白 | 自伝的物語 | レフ・トルストイ | ロシア |
関数依存関係「{書籍名} → {著者の国籍}」が成立します。つまり、書籍名が分かれば著者の国籍も分かります。さらに、
- {書籍} → {著者}
- {著者}は→{書籍}
- {著者} → {著者の国籍}
したがって、{Book} → {Author nationality} は推移的な依存関係です。
注記
- ^ Codd, EF「データベース・リレーショナル・モデルのさらなる正規化」(Courant Computer Science Symposia Series 6「データベース・システム」、ニューヨーク市、1971年5月24日~25日発表)IBM Research Report RJ909(1971年8月31日)。Randall J. Rustin編『データベース・システム:Courant Computer Science Symposia Series 6』、Prentice-Hall、1972年に再掲載。第3正規形と推移的依存関係については45~51ページを参照。