【问题标题】:How to re-model the existing data model for a document oriented db like ravendb or mongodb如何为面向文档的数据库(如 ravendb 或 mongodb)重新建模现有数据模型
【发布时间】:2011-10-10 16:42:07
【问题描述】:
假设以下场景(使用关系数据库),
class Currency
{
long id;
String code;
String name;
}
class OrderGroup
{
long id;
Collection<Order> Orders;
}
class Order
{
long id;
long currency;
}
在实际场景中,会有大量订单(数量不断增加)。将其转换为支持基于文档的数据库的最佳方法是什么?有一个更改货币代码和名称的选项,如果将货币添加为订单的子项,它会在所有订单中自动更新吗?
【问题讨论】:
标签:
database-design
mongodb
ravendb
document-oriented-db
【解决方案1】:
在文档数据库中对关系数据库进行建模时,如果您考虑 DDD 术语“Aggregates”并考虑如何处理对象值的更改,这会有所帮助,例如该对象是Enitty or a 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; }
}
但是请注意,像这样对其进行建模,您需要单独的查询来获取/更新相关对象。