DBに保存するためにデータをシリアル化することについて、 php.netで興味深いコメントを見つけました。
次のように述べています。
お願いします!お願いします!お願いします!データをシリアライズしてデータベースに配置しないでください。シリアル化はそのように使用できますが、それではリレーショナル データベースの要点と、データベース エンジンに固有のデータ型が失われています。これを行うと、データベース内のデータは移植できなくなり、読み取りにくくなり、クエリが複雑になる可能性があります。アプリケーションを他の言語に移植できるようにしたい場合、たとえば、Java を使用することが理にかなっているアプリケーションの一部に Java を使用したい場合、シリアライゼーションはお尻の痛みになります。サードパーティの仲介ツールを使用して挿入するデータを操作することなく、データベース内のデータを常にクエリおよび変更できる必要があります。
私はキャリアの中で何度もこれに遭遇しました。これにより、コードの保守が困難になり、コードの移植性の問題が生じ、データを他の RDMS システムや新しいスキーマなどに移行することがより難しくなります。また、不利な点も追加されます。シリアル化したフィールドの 1 つに基づいてデータベースを検索するのが面倒になるという問題です。
serialize() が役に立たないと言っているわけではありません。そうではありません...たとえば、データ集約型の操作の結果を含むキャッシュ ファイルを使用するのに適した場所です。他にもたくさんあります... シリアライズを乱用しないでください。
これがDBの目的でデータをシリアル化することについての標準的な見方であるかどうかを知りたい. 時々使用するのが良い習慣なのか、それとも避けるべきなのかを意味します。
たとえば、私は最近、serialize を自分で使用するように指示されました。
この場合、MySQL テーブルに保存する必要があったデータは次のとおりです。
- 車のブランド。
- 車のモデル。
- 車バージョン。
- 車情報。
車の情報は、バージョンのすべてのプロパティを表す配列であったため、大量の可変プロパティ (100 プロパティ未満) でした。この配列は、シリアル化される配列でした。
serialize を使用するために与えられた主な理由は次のとおりです。
フィールド数が多いため、各プロパティまたは複数のテーブルに対してフィールドを作成するのではなく、パフォーマンスを向上させるためにデータをシリアル化することをお勧めします。
個人的には、この最後の断言よりも php.net の解説に同意しますが、これについては私の意見よりも具体的な意見を述べたいと思います。