参照完整性-在创建新文档之前检查引用的文档是否存在

时间:2019-02-05 18:01:31

标签: azure-cosmosdb

可以说我们有参考文件:

{
   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. 如果存在(从应用程序中可以看出),请在车队中创建新车

无效,因为理论上可以在1到2之间删除车辆定义。

我能想到的可能解决方案是:

  1. 制定一条业务规则,即不能删除参考文档(没关系,但如果可能的话,我想避免这样做)。

  2. 从理论上讲,将参考文档(车辆定义)和车队中的实际车辆放在同一分区中可以解决此问题,因为存储过程是按分区进行事务处理的,但这实际上意味着将所有车辆都放在同一分区中,这是不可行的

我也不喜欢。

还有其他选择吗?

PS。 请不要在示例中过多关注域(车队管理)。我只是为了说明在创建新文档时可以删除引用文档的情况。 无论示例中的领域如何,这都是一个广泛的理论问题。

0 个答案:

没有答案
相关问题