假设以下场景(使用关系数据库),
class Currency
{
long id;
String code;
String name;
}
class OrderGroup
{
long id;
Collection<Order> Orders;
}
class Order
{
long id;
long currency;
}
在实际情况下会有大量的订单(数量不断增加)。将此转换为支持基于文档的数据库的最佳方法是什么?有一个选项可以更改货币代码和名称,如果货币被添加为订单子项,它会在所有订单中自动更新吗?
答案 0 :(得分:2)
在对文档数据库中的关系数据库建模时,如果您在DDD术语“Aggregates”中进行思考,并考虑如何处理更改对象的值,例如,该对象是Enitty or a Value Object,因此在这种情况下,如果您希望更改货币影响现有订单,则货币不是值对象,您只需对Order中使用的Currency对象进行引用,就像关系模型一样。像这样的模型将在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; }
}
但请注意,对此进行建模时,您需要单独的查询来获取/更新相关对象。