如何为面向文档的数据库(如ravendb或mongodb)重新建模现有数据模型

时间:2011-10-10 08:29:11

标签: database-design mongodb ravendb document-oriented-db

假设以下场景(使用关系数据库),

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

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

class Order
{
long id;
long currency;
}

在实际情况下会有大量的订单(数量不断增加)。将此转换为支持基于文档的数据库的最佳方法是什么?有一个选项可以更改货币代码和名称,如果货币被添加为订单子项,它会在所有订单中自动更新吗?

1 个答案:

答案 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; }
}

但请注意,对此进行建模时,您需要单独的查询来获取/更新相关对象。