WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

MySQLWorkBenchで依存リレーションシップを設定すると、子テーブルにある親テーブルの外部キーが主キーの一部となる

   

なぜ?
※同様の質問がStackOverflowにある

Why is the foreign key part of the primary key in an identifying relationship?

この振る舞いに違和感を感じて依存リレーションシップについて再考したところ、自分の認識が誤っていることに気がついた。

誤った依存リレーションシップへの認識

下記のような認識を持っていた。

「1対多」のリレーションシップにおける親エンティティと子エンティティにおいて、親エンティティが存在しなければ子エンティティは作成できない。

= 子エンティティのテーブルには親エンティティの外部キーがあってそれがNOT NULL制約である。

正しい依存リレーションシップへの認識

依存リレーションシップとは、子テーブルの外部キーの一部に親テーブルの主キーが組み込まれた形となり、親テーブルなしでは成り立たない関係である。
非依存リレーションシップとは、親テーブルの主キーと子テーブルの外部キーでリレーションシップを構築するが、子テーブルに外部キーとは独立した主キーを持っている関係である。

MySQL WorkbenchでER図を作成する方法 ‹ 技術の犬小屋

上記で腑に落ちた。

No, identifying relationship is about identification, not existence.

Why is the foreign key part of the primary key in an identifying relationship?

StackOverflowでもあるとおり、依存リレーションシップは関連の同一性を着目するものであって、存在を意識するものではない。

 - MySQL , , , ,