ファントムファイル

画像データなどをデータベースに格納せず、格納先のみを保存して、画像データなどを外部に保存するのは以下の様な問題がある、という指摘。

  • データベース上のファイルを削除しても外部ファイルは自動的に消えないという問題。
  • トランザクション分離がサポートされていないので、外部ファイルについてはダーティーリードが起きてしまうという問題
  • トランザクションがサポートされていないので、ロールバックされないことによる、一貫性の欠如
  • オンラインバックアップができない
  • SQLアクセス権の設定ができない
  • 参照パスはSQLデータ型でないので、正当なパスかどうかの判断がされない

ただし、一方で、以下の様なメリットが有るという

  • データベースの容量が減らせる。それによりバックアップ時間が減る
  • 画像ファイルがOS上にあると、データベースにアクセスしなくてもプレビューなどの表示ができ、編集が楽になる

なので、常に2つの設計を検討しましょうとのこと。それはそのとおりだ。
とくに物理的な配置などを考えなくてはならず、通常のデータとは完全に切り離したテーブルで作成したほうが良いと思う。とくに、画像程度ならともかく、動画などはデータ量も大きく、完全に分けたほうが良い。
また、本書にも指摘されているが、OracleにおけるBFILEなどDBMSの外部におくことを前提としたデータ型もある。いろいろな選択肢から、選べば良い。
使用するアプリケーションのインターフェースの使い勝手などから選ぶべきであろう。