/note/tech

それでも外部キー制約は必要ない / #fk_night でしゃべってきました

要約:

■ 1. 概要

  • 「外部キーNight 2026」にて、osyoyu氏が外部キー制約不要論を主張
  • 主張の軸は運用上の障壁という観点にとどまらず、整合性を守る仕組みとしての根本的な力不足にある
  • システム全体を考えると、不変条件はアプリケーション層で実装すべきであり、その結果として外部キー制約の出番がなくなるとする

■ 2. リレーショナルモデルの限界

  • DDL(CREATE TABLE)の表現力には本質的な限界がある
  • 表現困難なルールの例:
    • ユーザーが住所登録を保留したままnullで登録完了できるが、住所がnullのユーザーは商品注文不可というルール
    • 外部決済システム(Stripe等)との連携時はRDBMSの制約が無力になる
  • 複雑な不変条件を守るには、トランザクション、ロック、非同期検証といったアプリケーション層での実装が必要

■ 3. RDBMSに対する見方

  • 「MySQLはKVS」という表現に70%同意する立場をとる
  • RDBMSは「行を保存し特定条件下で高速クエリできるストレージ」と捉えるべきとする

■ 4. ACID特性への選択的な期待

  • A(原子性)・D(持続性)には期待する
  • C(一貫性)は別の仕組みで守るべきとする
  • I(独立性)は実務上SERIALIZABLEで運用されていないとする

■ 5. 型システムの活用

  • 強力な型システムを持つ言語(RustやTypeScript)では、users.idとorders.idに異なる型を付与することでIDの取り違えを防止できる

■ 6. 結論

  • 外部キー制約の益がない証明は困難であることを認めつつも、害が発生しない条件は想像以上に狭いと結論づける
  • 激しく変化するアプリケーションほど、その傾向が顕著になるとする