可以说我们有参考文件:
{
id: "1",
type: "car",
make: "Nissan",
model: "Some Nissan Model"
partitionKey: "vehicleDefinitions"
},
{
id: "2",
type: "truck",
make: "Scania",
model: "Some Scania Model"
partitionKey: "vehicleDefinitions"
}
...
现在,我们在一个车队中创建新车,例如:
{
id: "1",
type: "fleetVehicle",
partitionKey: "fleet_17_vehicles",
vehicleDefinitionRefId: 2, //this references Scania truck definition above
year: 2019,
tiresChangeDate: ...
...
}
很明显,我们的参考数据(车辆定义)在一个分区中,而实际车队的实际车辆都在其各自的分区中,这些分区根据fleetId
定义为复合钥匙。
问题是:在向车队添加新车辆时,如何(从原子上)确保未删除车辆定义记录?
按以下方式签入客户端应用程序:
无效,因为理论上可以在1到2之间删除车辆定义。
我能想到的可能解决方案是:
制定一条业务规则,即不能删除参考文档(没关系,但如果可能的话,我想避免这样做)。
从理论上讲,将参考文档(车辆定义)和车队中的实际车辆放在同一分区中可以解决此问题,因为存储过程是按分区进行事务处理的,但这实际上意味着将所有车辆都放在同一分区中,这是不可行的
我也不喜欢。
还有其他选择吗?
PS。 请不要在示例中过多关注域(车队管理)。我只是为了说明在创建新文档时可以删除引用文档的情况。 无论示例中的领域如何,这都是一个广泛的理论问题。