Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【DB】1対1のリレーションにおける主キー/ 外部キー設定

結論

DB設計の論理データモデル設計では、1対1のリレーションの主キー/外部キー関係は
基本的にインスタンス生成順で決定する。

主キーと外部キー

DB設計において論理データモデル構築の際、1対多のリレーションを持つ一組のエンティティが
E-R図中に出現した時は、基本的に1側のエンティティの主キーに対して、多側のエンティティが
外部キーを持つことが多い。

一方で、1対1のエンティティの組が構築されることもあり、それらの主キー/ 外部キーの関係はどうなるのかという話。

主体はどちらか

f:id:rennnosukesann:20180210184722p:plain:w300

例えば、オンラインショッピングサイトを運用するシステムでは
先ず最初にユーザありきで注文処理が発生する。

ユーザが購買候補としてストックした商品リストを「カート」というテーブルのレコードとして保持するのであれば、 カートは一つあればよく、特別なことがない限りユーザとカート間で1対1の関係が構築されればよい。

このとき、先にインスタンスとして先に生成されるのはユーザである。

なので、上記の法則に則って外部キーを設定するのであれば、
ユーザエンティティが主キーとしてユーザIDを保持していた場合、
カートエンティティは外部キーとしてユーザIDを参照する。

インスタンスが先にできるということは、エンティティ間の関係において主役となりうるというのは、 直感的には正しいような気もする。
上記の例でも、ユーザがいなければカートの情報は意味を持たない。

ただ、このへんは業務用権に依存すると思う(主体とすべきインスタンスを後で生成する)ので、柔軟に対応していきたい。