DB設計における二つの束縛

ふと思ったのだが、DB設計におけるリレーションって以下のような切り口で二つに分割可能なんではなかろうか。

静的束縛
INSERT or UPDATE 時に二つのレコードの結合が決まる
動的束縛
SELECT 時に二つのレコードの結合が決まる

ある意味、複合主キーなやり方は、いつでもどこでも動的束縛のようでいて、実際には主キーの更新には制約がかかっており静的束縛の方が近い(むしろ宣言的束縛と呼ぶべきか)。

しかし適用期間を持つようなマスタやトランザクションへのマスタデータの埋め込みを考えると、上記のような考え方を取る方がすっきりする。ようするに、静的束縛とはIDによる結合であり、動的束縛とはWHERE句による結合である。通常、二つのレコードの結合は登録時や更新時に紐付けられるのだから、動的束縛が必要な状況というのは特殊な状況、すなわちレコードのライフサイクルの不一致を無視しなければならないような場合である。具体的に言うならば、過去のトランザクションを今のマスタで参照したいような場合がそれにあたる。