Как обновить сохраненные ссылки в БД Cosmos Document? - PullRequest
0 голосов
/ 02 января 2019

Я очень плохо знаком с базами данных на основе документов и использую базу данных Cosmos Document Azure в своем приложении Springboot.

У меня есть такая структура данных:

User:
{
    "firstname": "Bob",
    "password": "asdf",
    "roles": [
        {
            "rights": [
                {
                    "name": "RIGHT_READ"
                },
                {
                    "name": "RIGHT_WRITE"
                }
            ],
            "name": "ROLE_ADMIN",
            "id": "0d5299e0-836c-494d-9299-e0836c294d55"
        }
    ],
    "id": "0a9030f1-30f8-4d23-9030-f130f85d23e7",
    "email": "email@mail.com",
    "username": "admin",
    "lastname": "Martin"
}

Role:
{
    "rights": [
        {
            "name": "RIGHT_READ"
        },
        {
            "name": "RIGHT_WRITE"
        }
    ],
    "name": "ROLE_ADMIN",
    "id": "0d5299e0-836c-494d-9299-e0836c294d55"
}

Пользовательхранит все роли, которые ему назначены.В этом случае пользователь сохраняет роль ROLE_ADMIN, которая содержит несколько прав.

Если я сейчас обновляю роль ROLE_ADMIN, например, добавляя право и сохраняя его снова в базе данных с помощью documentClient.replaceDocument(docLink, role, null);, ссылка на эту сущность, которая хранится у пользователя, не обновляется.Пользователь по-прежнему содержит роль с двумя правами вместо трех.

Нужно ли обновлять все ссылки вручную или я что-то упустил?

1 Ответ

0 голосов
/ 02 января 2019

CosmosDB - это нереляционная база данных.Если вы используете его в качестве реляционной базы данных, вам придется делать все каскадные обновления вручную, так как сам CosmosDB не знает, что вы ссылаетесь на другой документ из базы данных.Каждый документ не зависит от другого.

На основании этого примера у вас также возникает проблема целостности данных.Вы сохраняете права как для объекта роли, так и для объекта пользователя.Вместо этого вам следует сохранить права на объект роли, а затем просто использовать идентификатор роли в объекте пользователя и запросить права на основе идентификатора роли.Таким образом, вы обновляете только роли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...