第三章 数据模型详解

3.1 关系

  聚合的有用之处:可以把经常访问的数据存放在一起。

  考虑客户和其全部订单之间的关系:有些应用在访问客户数据时想要随时查询订单的历史纪录,如果把客户和其订单记录放到一个聚合,就很方便;有一些程序想分别处理订单,所以建模时,把订单放在单独的聚合里。这种情况下,订单和客户在两个聚合中,但是可以把客户ID存入订单的聚合中,这样二者就惯量了。

  如果连个聚合之间有了关系,那么如何更新其数据:面向聚合的数据库以聚合为单元,因此,它只能保证单一聚合内部内容的原子性。如果一次更新多个聚合,那就必须设法应对中途发生的错误。对于关系型数据库,同时更改多条记录,可以放在同一个事务中。

  面向聚合数据库在操作多个聚合时显得相当笨拙(所以尽量只操作一个聚合。

  如果待处理的数据中存在大量关系,那么更应该选用关系型数据库!!!

  虽说面向聚合的数据库处理复杂且的关系时效果不好,但是,关系型的数据库对这一问题的表现也不尽如人意。因为查询时要用很多的JOIN。效率很低。

3.2 图数据库

  NOSQL:用面向聚合的模型来描述一些具备简单关联的大型记录组。

  图数据库与其他NoSQL不同:它是为解决关系型数据库的另外一项缺点而设计的-相互关系比较复杂的一小组记录。其中,宝行有连接节点(node)的边(edge)。其与面向聚合DB的明显区别是:重视数据之间的关系。这种数据库一般不运行在集群上,二十在单一的服务器上。

3.3 无模式数据库

  NoSQL数据库的共同点是: 无模式。关系型数据库必须定义模式:用一种预定义的结构说明有哪些表格,有哪些列,每一列存放那种类型的数据。

  无模式的数据库,灵活,可以开发过程,修改数据库存储的东西。

  无模式数据库更容易处理“格式不一致的数据”,也就是那种每条记录都拥有不同字段的数据。