ER模型是实体关系模型,基本元素是实体、关系和属性,Mycat 针对ER关系表的切分规则中,使得有相互依赖的表能够按照某一个规则切分到相同的节点上,避免垮库 Join 关系查询,下面的示例为订单(order)和订单明细(order_detail),明细表依赖于订单,这总业务的切分可以设计出合适的切分规则,比如根据用户ID切分,可以抽象出父子关系的表都可以使用ER分片表。订单表(order)和订单明细表(order_detail)通过 order_id 进行数据切片,保证相同的 order_id 数据分切到同一个分片中,在进行数据插入时,Mycat 会获取 order 所在的分片,然后将 order_detail 也插入到 order 所在的分片,配置如下:
<table name="order" dataNode="dn$1-32" rule="mod-long">
<childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="order_id"/>
</table>
注意:其中 joinKey 的 order_id 是 order_detail 表的字段,parentKey 的 order_id 是 order 表的字段