データベースで1:1のリレーションシップはいつ使うのか

ちょっと気になって調べたところ、Stackoverflowに質問が。

Is there ever a time where using a database 1:1 relationship makes sense?

ベストアンサーのコメントを見ると、

A 1:1 relationship typically indicates that you have partitioned a
larger entity for some reason. Often it is because of performance
reasons in the physical schema, but it can happen in the logic side as
well if a large chunk of the data is expected to be “unknown” at the
same time (in which case you have a 1:0 or 1:1, but no more).

訳)
1:1のリレーションシップは一般に大きな実体をなんらの理由で分割したことを示している。しばしばそれは物理スキーマのパフォーマンスが原因であるが、大きなデータの固まりが同時には”未定”になるべき場合はロジックの側でも起こりうる。(その場合1:0か1:1以外にはならない)

例も書いてありますが、まあ拾い読みしていくと以下のような感じかなと。

  • パフォーマンス
    • 行ロック
  • DB容量
    • BLOB
    • ごく一部のレコードしかフィールドを持たない
  • セキュリティ

一つのオブジェクトを分割して保存していることには変わりないですが、特定のカラムが頻繁に更新されて、多くがNULLになる場合には考えてみてもいいかもしれません。

Author: _fp

Software Engineer Place: Tokyo, Japan Skills: C, Javascript, Objective-C, Perl, Clojure, Java, PythonErlang, Haskell, OpenGL Twitter: _fp