0

現在、プロジェクト用のデータベースを選択しています。候補者はmongodbとpostgresです。ユーザーは条件付きロジックを定義する必要があります。たとえば、ユーザーは条件を(文字列として)「xが発生する」、「yが離れる」などを定義し、「xが発生した場合(yが離れるかzが来る)...」という条件に連結できます。 。

単一のjsonドキュメントでそれを行うと、リレーショナルデータベースよりもはるかに読みやすくなります。

postgresでこれを合理的にモデル化する方法はありますか?postgres 9.2がjsonをサポートすることは知っていますが、クエリ機能は不格好なようです。

mongoでは、動詞( "xoccurs")が条件間で複製されます。動詞の更新は複数の行に影響します。ここに問題がありますか?

編集:mongoドキュメントは次のようになります:

{
  "where": 
     [1,"x happens"],
     "and": 
     { "where": 
            [2,"y leaves"], 
               "or": 
            [3,"z comes"]
     }
}
4

1 に答える 1

0

わかりました。この分野では、PostgreSQLとMongoDBはかなり異なりますが、これについての考え方はかなり似ています。重要なのは、厳密な関係の考えから逃れることです。選択は、オブジェクトリレーショナルまたはドキュメント指向です。前者の方が快適なので、前者を選びます。

重要なことは、その場で定義可能なブールに条件を下げることができなければならないということです。PostgreSQLでこれを行う場合は、プログラミングを行う必要があります。トレードオフは、MongoDBで行うのが面倒なアドホックレポートを取得することです。

Postgresでできる重要なことは、モデルの微分データです。したがって、これを管理しやすくするためのPostgreSQLの重要な点は、実行時にテーブルメソッドを使用して制約をチェックすることです。PostgreSQLでテーブルメソッドを作成するには、次のようなフォームを使用します。

CREATE OR REPLACE FUNCTION method_name(table_name) RETURNS return_type ....

これは、他の例で役立つ場合があります:http: //ledgersmbdev.blogspot.com/2012/08/postgresql-or-modelling-part-2-intro-to.html(はい、それは私のブログです)。

事実、PostgreSQL上で非常に洗練された準リレーショナルモデルを構築できるので、その点でそれを除外するつもりはありません。問題は、アドホッククエリとオブジェクトのセットに関するレポートのために、リレーショナル側が必要かどうかです。そうすると、Mongoだけではカットできなくなり、MongoからPostgresにエクスポートするか、PostgreSQLで何かを行うことができます。

これはPostgreSQLが答えだと言っているのではありません。新しいクエリタイプを追加する必要がない場合は、Mongoの方が適している可能性があります。ただし、これは、Pgが提供するすべての高度な機能を実際に使用したい場合の1つであり、そのルートを使用する場合に役立ちます。

于 2012-09-05T02:58:41.963 に答える