1

次のシナリオ(リレーショナルデータベースを使用)を想定します。

class Currency
{
long id;
String code;
String name;
}

class OrderGroup
{
long id;
Collection<Order> Orders;
}

class Order
{
long id;
long currency;
}

実際のシナリオでは、注文数が多くなります(数は増え続けます)。ドキュメントベースのデータベースをサポートするためにこれを変換する最適な方法は何でしょうか。通貨コードと名前を変更するオプションがあり、それが発生したときに、通貨が注文の子として追加された場合、すべての注文で自動的に更新されますか?

4

1 に答える 1

2

ドキュメント データベースでリレーショナル データベースをモデル化する場合、DDD 用語の「集計」で考え、オブジェクトの値の変更がどのように処理されるかを考えると役立ちます。たとえば、オブジェクトはEnitty または Value Object のいずれかです。通貨の変更が既存の注文に影響するようにしたい場合、通貨は値オブジェクトではなく、関係モデルのように、注文で使用される通貨オブジェクトへの参照を配置するだけです。次のようにモデル化すると、RavenDb で機能します。

OrderGroup 集計:

public class OrderGroup
{
    public int Id { get; set; }
    public IList<Order> Orders { get; set; }
}

public class Order
{
    public int Id { get; set; }
    public int Currency { get; set; }
}

通貨エンティティ:

public class Currency 
{
    public int Id { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }
}

ただし、このようにモデル化すると、関連するオブジェクトを取得/更新するために別のクエリが必要になることに注意してください。

于 2011-10-10T08:42:07.923 に答える