Наиболее эффективный подход к обновлению таблицы «один ко многим» - PullRequest
2 голосов
/ 03 октября 2011

Предположим, у меня есть таблица с именем bookLibrary, в которой уникальный идентификатор книги связан с несколькими библиотеками (по их уникальному идентификатору). Если вы получаете обновление для книги в виде массива библиотек, в которых находится книга, то какой из этих методов наиболее эффективен для обновления таблицы bookLibrary.

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

Альтернативным подходом было бы выбрать все строки для книги и взглянуть на каждую строку, то есть (1) строка все еще действительна (находится ли книга в библиотеке x), (2) какие строки необходимо вставить (новые книги были добавлены для книги x) и (3) какие строки остаются неизменными.

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

1 Ответ

1 голос
/ 03 октября 2011

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

Таким образом, чтобы ответить на ваш вопрос, вам нужно выполнить профилирование, чтобы увидеть, как подходы складываются. Многое будет зависеть от количества строк, количества столбцов в строках, задействованного sql и, возможно, от того, как операторы sql отправляются на сервер.

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

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