Я использую CosmosDB в качестве базы данных документов, для некоторых вещей мне нужно хранить ссылку «внешний ключ», и я делаю это как строковое свойство в документе, указывающее на идентификатор «внешнего ключа». документ.

Если внешний документ будет удален, каким будет наиболее эффективный способ найти все ссылки внешнего ключа и обеспечить их удаление?

Я бы хотел, чтобы это было максимально автоматизировано, чтобы мне не приходилось слишком много «думать» об этом в проекте, мое лучшее решение в моей голове - хранить ссылки внешнего ключа в четко определенной структуре, например:

{
"foreignId": "crazy_person",
"foreignType": "person"
}

И сохраняйте эту структуру в любой форме или форме в различных документах, затем, когда «crazy_person» удаляется, я нахожу все документы, в которых определена эта структура, и если ForeignId/foreignType соответствует Crazy_person, чтобы удалить их.

Не уверен, как бы я это реализовал, поскольку приведенная выше структура может быть в любом заданном документе, например:

{
   "foreignPerson": {
     "foreignId": "crazy_person",
     "foreignType": "person"   
},
    "foreignPeople": [
{
"foreignId": "crazy_person",
"foreignType": "person"
}
]
}
1
meds 31 Окт 2019 в 01:12

1 ответ

НЕТ Концепция внешнего ключа в CosmosDB. Согласно документам,

любые отношения между документами, которые у вас есть в документах, фактически являются «слабыми ссылками» и не будут проверяться самой базой данных. Если вы хотите убедиться, что данные, на которые ссылается документ, действительно существуют, вам нужно сделать это в своем приложении или с помощью триггеров на стороне сервера или хранимых процедур в Azure Cosmos DB.

2
Sajeetharan 31 Окт 2019 в 07:32