Как правильно сохранить новые данные с использованием рабочей копии - PullRequest
1 голос
/ 18 апреля 2020

В моем приложении каждый пользователь может добавить новую книгу . Есть возможность добавить фото книги . Все поля в форме являются обязательными, но если пользователь захочет завершить sh эту форму позже, он может сохранить половину формы как рабочую копию . Интересно, как мне нужно создать функцию рабочая копия , которая будет сохранять только новые фотографии книг и удалять старые.

Entities:
-Book
*Id [PK]
*Title
*Author
*Description
*PagesCount

-BookPhotos
*Id [PK]
*BookId [FK]
*BookPhoto [string base64]

У меня есть пара идей, но мне нужно выберите одну (или, возможно, найдите другую) с наилучшей оптимизацией:

  1. Каждый раз удаляйте все фотографии, которые связаны с отредактированным объектом Book.
  2. Попробуйте найти одно и то же значение в поле BookPhoto [base64] и редактируйте только это поле в базе данных.
  3. Редактируйте каждую запись в таблице (в соответствии с новыми данными BookPhoto), чтобы BookPhoto [base64] не существовал в данных запроса на редактирование.

По моему мнению:

  1. Интересно, не будет ли база данных злиться на меня, если я буду удалять и вставлять новые данные в таблицу при каждом запросе. Будут ли какие-либо проблемы с этим подходом? Что если это сделают сотни или тысячи людей?
  2. Звучит хорошо, но что, если данные редактирования не будут содержать старого значения BookPhoto? Затем мне нужно удалить каждую запись из таблицы, которой не было в данных редактирования (рабочей копии) запроса.
  3. Я думаю, что будет много проблем с редактированием и сравнением. Например, что если в данных запроса будет меньше фотографий, чем в таблице. Какой из них будет редактироваться.

Если у кого-то есть идеи, как сделать это правильно, я буду благодарен.

С наилучшими пожеланиями:)

1 Ответ

0 голосов
/ 20 апреля 2020

Сравнить BookPhotos.Id

Выберите BookPhotos Книги рабочего набора из базы данных. Для каждой фотографии БД:

  1. Если идентификатор находится в рабочем наборе, то обновите байты (строка base64 в вашем случае)
  2. Если идентификатор не находится в рабочем наборе, затем удалите фотография

Для каждого рабочего набора фотографий:

  1. Если идентификатор отсутствует в БД, вставьте это фото как новое

В качестве альтернативы веб-запрос может указать, какие записи являются новыми, измененными и удаленными, вместо того, чтобы просто указывать новое состояние модели. Затем вы просто выполняете эти действия с БД.

В этом заключается то, что вы доверяете клиенту. Если он говорит добавить уже существующий элемент (первичный ключ) или изменить / удалить элемент, который не существует, конечно, операция БД не будет выполнена. Вы сами решаете, как ответить клиенту в этом случае, и если вы откатите все операции как одну транзакцию или разрешите совершить то, что сработало.

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