Justin Caveは、これが冗長データにつながる可能性があることは正しいですが、これは本当にデータベースの設計方法に依存します。
オブジェクト全体をblobにシリアル化するアプローチは、ここにいるほとんどの人が思っているほどとんでもないことではありません。実際、ここで説明したように、一部のアプリケーションでは、これがあなたができる最善の設計になる可能性があります:https : //stackoverflow.com/a/12644223/1121352。
実際、オブジェクトをシリアル化すると、少なくとも2つの利点が得られます。
1- インピーダンスの不一致を減らす:特に多くのクラスとカスタム型を使用する場合、一部のJava型はSQLで使用できません。したがって、JavaオブジェクトからSQLへのやり取りは非常に面倒であり、あいまいさを招く可能性さえあります。
2- スキーマの柔軟性が向上。実際、リレーショナルスキーマは同じ構造を共有するデータには非常に優れていますが、単一のクラス内のオブジェクトの一部が実行時の条件に応じて異なるプロパティを持つことができる場合、リレーショナルスキーマはワークフローを大幅に妨げる可能性があります。
したがって、このアプローチには確かに利点があります(少なくともこれら2つ、しかし確かに私が引用しなかった他の2つ)が、当然、支払うべき莫大なコストは、ほとんどすべてのリレーショナルスキーマの利点を失うことです。
ただし、データベースを慎重に設計すると、両方の長所を最大限に活用できます。各オブジェクトに固有の属性を使用してリレーショナルスキーマ(つまり、一意のキー列)を設定し、そのオブジェクトをBLOBに格納できます。 。このようにして、オブジェクトの属性によって定義された一意の識別子を与えられたオブジェクトの高速な取得を保証し、冗長性を削減しますが、インピーダンスの不一致を解消し、Javaオブジェクトの完全な柔軟性を保ちます。
補足説明として、一部のDBメーカーは、PostSQLやPostgreSQLのJSONデータ型など、リレーショナルモデルとオブジェクトモデルを組み合わせて、JSONをリレーショナル列と同様に直接処理できるように、SQL3とOQL(オブジェクトSQLに(制限付き)オブジェクトサポートを追加するためのクエリ言語)。
結局、これはすべて設計の問題であり、リレーショナルモデルとオブジェクトモデルの間の妥協です。
コメントを読んだ後の/ EDIT:もちろん、データを検索可能(「クエリ可能」)にする必要がある場合は、データをblobとして保存しないでください。ただし、データの一部が検索可能ではなく、何らかのメタデータである場合、特にこのメタデータが柔軟な構造を持っている場合、このデータ部分をblob内のオブジェクトとして保存することは良い解決策になりますオブジェクトからオブジェクトに変更できます。