Лучшая практика обновления записей БД - PullRequest
3 голосов
/ 07 марта 2009

Скажем, вы получили 100 записей и отобразили их на странице. Пользователь обновляет только 2 записи на странице. Теперь вы хотите обновить только две записи, а не другую 98.

Лучше ли иметь одну отправку на странице, затем каким-то образом узнать, какие 2 обновлены, а затем отправить только эти две в базу данных для обновления?

Как выглядит "как-то"?

Или у вас будет кнопка обновления-отправки для каждой строки, и она будет обновлять только запись, к которой она привязана?

Ответы [ 5 ]

1 голос
/ 07 марта 2009

Конечно, есть разные способы сделать это. В общем, вы можете избежать некоторых проблем и обработки на стороне сервера, используя Javascript для сбора данных POST только для тех записей, которые были изменены. Две мысли о том, как это может работать:

1) Пройдите по маршруту ajax и выполните live -редактирование. Таким образом, записи представлены в таблице и представляются недоступными для редактирования. Когда пользователь щелкает конкретную строку, эта строка становится редактируемой с помощью Javascript для создания соответствующей HTML-формы на лету. Затем используйте кнопку отправки или какой-либо другой обработчик (скажем, перемещение фокуса на другую строку таблицы), который будет запускать POST, который обновляет БД (асинхронно через предпочитаемый метод ajax). К счастью, основные платформы Javascript могут сильно помочь в этой области.

2) Флажки - всякий раз, когда строка редактируется, ее флажок становится установленным. Когда кнопка отправки нажата, используйте javascript, чтобы опубликовать данные POST, захватывая все подряд, чей флажок отмечен. Пользователь может снять флажок, чтобы отменить изменения в этой строке перед отправкой.

0 голосов
/ 07 марта 2009

Вы можете использовать JavaScript, чтобы пометить каждое поле как измененное, когда пользователь меняет поле ввода. Создайте скрытые поля с идентификатором строки, которую вы обновляете, и грязным флагом. (как is_dirty_ $ id) В JavaScript создайте обработчик onChange, который устанавливает скрытое поле как грязное. когда любой вход изменяется.

Кроме того, вы можете создавать скрытые поля для каждого отображаемого реального поля. скрытое поле будет содержать начальные значения. проверьте каждое поле на стороне сервера, чтобы определить, что изменилось.

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

0 голосов
/ 07 марта 2009

Ajax, используя jQuery или какую-либо другую библиотеку JavaScript, и поместите и обновите кнопку в каждой строке.

0 голосов
/ 07 марта 2009

Существует много ответов на этот вопрос, и в некоторой степени они зависят от ваших инструментов разработки и «ощущения» сайта.

Если бы вы реализовывали вызовы Ajax для построчного обновления, то логически было бы правильно иметь кнопку на строку и затем обновлять ее вызовом Ajax при изменении строки.

Это также просто сценарий, для которого были разработаны отключенные наборы данных, и ADO.net очень хорошо справляется с этим.

Итак, как всегда, ответ «Это зависит!»

0 голосов
/ 07 марта 2009

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

На ум приходит 3 способа отслеживания изменений:

JavaScript: добавьте функцию onChange () к элементам управления, которые обновляют скрытое поле. Если это скрытое значение, обновите связанную запись. Требует JS в браузере и не сообщает, какие поля обновлять, какие записи.

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

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

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