94903
WebでSVGを取り扱う際、下記いずれが適切ですか？  
・SVGタグデータ毎MySQLへ保存  
・SVGファイルとして保存

それぞれメリットデメリットを知りたい。

SVGファイルのサイズ例  
968KB

環境  
PHP 7.2  
MySQL5.7
CC BY-SA 4.0
2023-05-17T18:00:36.823
94881
2023-05-19T01:23:13.363
7886
question
mysql svg
WebでSVGを取り扱う際、SVGタグデータをデータベースへ保存した方がよいか、あるいはSVGファイルとして保存した方がよいか
SVGかどうかに関係なく一般的な判断として

  * データベースと無関係に更新されるなら、データベースに含めるべきでない
  * データベースと連動して更新されるなら、データベースに含めるべきである

だけかと。SVGはXML形式ですし、MySQLには[XML関数](https://dev.mysql.com/doc/refman/8.0/ja/xml-
functions.html)が用意されているため、必要に応じてSVGをMySQL内で更新できるはずです。

ですが、質問文にはXMLという語が登場しないどころかSVGタグまで付けられていることから推測するに、前者ではないでしょうか。
CC BY-SA 4.0
2023-05-17T22:21:22.063
94882
2023-05-17T22:21:22.063
4236
94881
answer
SVG に限った話ではありませんが、懸念している内容は「SQL アンチパターン」「ファントムファイル」辺りで調べてもらうと解説記事が出てきます。(SQL
アンチパターンが書籍名になります)

かいつまんで抜き出してみると…

#### ファイルパスを保存するパターン

  * 「DB のレコード」もしくは「実際のファイル」どちらか一方のみが削除されて整合性が保たれない可能性がある (孤児のファイル = ファントムファイルが発生する)
  * (VPS などを利用する場合には) DB サーバは高価で、Amazon S3 などストレージサービスの方が安価なケースが多い

#### BLOB 形式で直接保存するパターン

  * 登録するデータサイズによっては、処理速度やバックアップの処理時間等に影響を与える可能性がある

**参考:**

  * [SQLアンチパターン ファントムファイルに立ち向かう](https://bluerabbit.hatenablog.com/entry/2015/03/29/214639)
  * [SQLアンチパターン ファントムファイル](https://qiita.com/fktnkit/items/cc811929485471897c89)
  * [ファントムファイル](https://www.souya.biz/blog/2020/06/11/%E3%83%95%E3%82%A1%E3%83%B3%E3%83%88%E3%83%A0%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB/)
CC BY-SA 4.0
2023-05-19T01:23:13.363
94903
2023-05-19T01:23:13.363
3060
94881
answer