web-dev-qa-db-ja.com

(オブジェクトをリレーショナルデータベースに格納することの欠点?

storing PHPオブジェクト に関するこの質問についての直接のコメントで、私はおそらくそうするのは良い考えではないと述べました。

私の推論は、MySQLは明示的にリレーショナルDBMSであり、それを最適化するものではないため、強制的に別のものにすることは意味がないということです。

私はそれがSQLの能力を厳しく制限すると思います-異なるテーブルからのデータを組み合わせるなどのすべてのアクションはアプリケーション層に移動されます-そしてそれはパフォーマンスのかなり重大な損失につながると思います-全体オブジェクトは毎回フェッチする必要があります。

その質問のOPは、先生がオブジェクト全体をMySQLに保存することをまだ推奨していると言っていました-そして、stackoverflowでこれについて複数の質問があるので、私はそれらがそれを行う唯一の人ではないと想定しています-ので、私は確かに、このアプローチの利点は何ですか。また、このアプローチの欠点を正しく識別できた場合は。

NoSQL /オブジェクトDBMSの利点についてではなく、リレーショナルデータベースを使用してオブジェクトを格納することについて(誤って)質問していることに注意してください。

4
tim

提供する利点が必要な場合は、オブジェクトをデータベースレコードに格納します。そのための有効な使用例があります。そうでなければ、オブジェクトデータベースやオブジェクトリレーショナルデータベースなどはありません。

いつリレーショナルデータベースにオブジェクトを格納しますか?

  1. データがスキーマレスの場合。つまり、オブジェクトには任意のフィールドを含めることができます。オブジェクトを保存するということは、そのオブジェクトに好きなものを置くことができるということです

  2. 任意の種類のオブジェクトグラフを保存する場合。

  3. リレーショナルデータベースの検索および結合機能が、オブジェクトを格納する柔軟性にとって二次的に重要な場合。

SQL Serverでは、シリアル化されたオブジェクトをJSON形式またはXML形式で格納し、それらに対してファーストクラスのSQLクエリを実行できます。これらの機能は、次の場合に使用すると主張しています。

  • データがまばらであるか、データの構造がわからない、またはデータの構造が将来大きく変わる可能性があります。
  • データはエンティティ間の参照ではなく包含階層を表し、再帰的である場合があります。
  • データにクエリを実行するか、その構造に基づいてデータの一部を更新します。
3
Robert Harvey