画像ファイルのデータベースへの格納方法 ファントムファイル【SQLアンチパターン】
Sal
sql データベースは外部リソースを管理することはできない。1. データベース自体の容量を減らすことができる。1. データベースのバックアップ自体は短時間で完了する。1. ファイルが外部リソースとして管理されているため、編集が楽になる

画像ファイルのデータベースへの格納方法 ファントムファイル【SQLアンチパターン】

  1. 画像ファイルのデータベースへの格納方法
  2. 画像ファイルの管理の一例
  3. ファントム・ファイル構造のメリット
  4. ファントム・ファイル構造の欠点
  5. 対応策:BLOB型を使え
  6. 備考
## 画像ファイルのデータベースへの格納方法
データベースは外部リソースを管理することはできない
## 画像ファイルの管理の一例
あなたはwebサイトの管理人です。 webサイトでは画像を表示する機能があり、その画像はデータベースには格納していません。 データベースには画像のパスだけを格納し、そのパスに画像を保存しています。 **ある時事件が起きます。** データベースと画像を保存しているサーバーラックが倒れてしまい、データが消し飛んでしまいました。 しかしDBAはこのような事態も想定しています。 DBAはOracleに標準搭載されていたバックアップを使ってwebサイトのほとんどの機能を回復させることができました。 90%の機能が回復しましたが、webサイトの画像は表示されないままです。 DBAに確認すると、「データベースに格納されているデータについては保証できたが、外部リソースとなった画像については責任は取れない」とのこと。 あなたはwebサイトの画像を全て修復しなければならなくなりました。
## ファントム・ファイル構造のメリット
> データベースには画像のパスだけを格納し、そのパスに画像を保存しています。 データベースにおけるこの画像の管理方法は賛否両論です。 この方法は「ファントムファイル」という名前がつけられています メリットとしては以下の点が挙げられます。 1. データベース自体の容量を減らすことができる 1. データベースのバックアップ自体は短時間で完了する 1. ファイルが外部リソースとして管理されているため、編集が楽になる
## ファントム・ファイル構造の欠点
以下の全ての欠点を克服できる場合、ファントムファイル構造を使用して良い。 1. 画像を読み込むときに、データベースだけでなく外部リソースを読み込む手順が発生する 1. 行を削除したときに、画像ファイルは削除されず「孤児」になる 1. 画像の変更のタイミングと、データベースのコミットのタイミングにズレが発生する 1. ロールバックが効かない(最大の欠点) 1. バックアップが効かない 1. SQLの権限によって、画像へのアクセスを制限できない
## 対応策:BLOB型を使え

CREATE TABLE screen_shots {
    bug_id  UNSINED INT NOT NULL,
    img_id  UNSINED INT NOT NULL,
    img     BLOB
    caption VARCHAR(100)
}
上記のようにデータベースに保存することで、これまで示した欠点を全て克服できる。 ポイントは、画像についての説明と画像のテーブルを別にすることで管理のしやすさを実現することである
## 備考
title:画像ファイルのデータベースへの格納方法 ファントムファイル【SQLアンチパターン】 description:データベースは外部リソースを管理することはできない。1. データベース自体の容量を減らすことができる。1. データベースのバックアップ自体は短時間で完了する。1. ファイルが外部リソースとして管理されているため、編集が楽になる img:https://www.oreilly.co.jp/books/images/picture_large978-4-87311-589-4.jpeg category_script:page_name.startswith("30")