之前创建了两张表:orders 及 order_info,其中 order_info 中的字段 order_id 关联到 orders 表中的 id。
可以说,order_info 表是 orders 表的子表,orders 表是 order_info 表的父表。
在进行分库分表操作时,需要将有关联关系的父表和子表放在同一个分片中,避免关联查询时找不到子表或父表记录的问题出现。
修改配置文件
设置子表分片策略
根据子表中对应父表的外键,设置子表的分片策略
spring.shardingsphere.sharding.tables.orders_info.database-strategy.inline.sharding-column=order_id
spring.shardingsphere.sharding.tables.orders_info.database-strategy.inline.algorithm-expression=ds${order_id%2}
设置子表主键生成策略
与主表相同,这里也同样使用雪花算法来生成子表的主键id。
spring.shardingsphere.sharding.tables.orders_info.key-generator.column=id
spring.shardingsphere.sharding.tables.orders_info.key-generator.type=SNOWFLAKE
程序在创建子表数据时,会首先查询对应父表记录存储的数据库节点,然后将子表数据保存在与父表相同的数据库节点中。