Я спрашиваю об этом еще раз, потому что я не могу получить прямой ответ от других вопросов о SO.
Моя ситуация следующая: две таблицы, phones
и features
.
Состав:
телефоны
функции
Теперь features
содержат множество значений, которые только между 1 и 4 будут соответствовать определенному телефону через phone_id
.
Теперь, когда я обновляю функции, считаете ли вы, что удаление и добавление новых функций снова или обновление существующих функций будет лучше?
// редактировать:
скидки
контракт
марка
Таким образом, в основном, специальная связь телефона и контракта вместе, и захватывает информацию из обеих таблиц для вывода. Затем во время этого процесса функции каждого телефона загружаются отдельно с помощью функции.
// редактируем 2:
Ох, и только отдельные функции телефона будут удалены / обновлены за раз, а также только 1-4 функции будут удалены за раз. Кроме того, функции всегда могут быть более или менее и никогда не иметь заданного числа.
Если количество функций на телефоне будет когда-либо изменено, вы должны удалить и вставить. Для обновления вам необходимо:
Если вы просто удаляете весь список и повторно вставляете их, вы сохраняете некоторые головные боли в обслуживании.
Если последовательность ваших данных является проблемой или проблемой (данные удаляются, но перед вставкой возникает ошибка, из-за чего сценарий не завершается), тогда оберните свои запросы в транзакцию.
Возьмем следующий пример:
У меня есть блог с Posts(id, title, body)
и Categories(id, post_id, category)
. Мой первый пост «Hello World» относится к категории «мета, php и javascript». Затем через год я пересматриваю сообщение, чтобы иметь некоторую информацию о mysql (или я добавляю категорию mysql) и вынимаю javascript.
Вот что мне нужно сделать (в основном psuedocode):
//old set SELECT * FROM Categories WHERE post_id=1 foreach($categories as $category) { if(in_array($category['id'], $_POST['categories']) { //this category is in the new set and the old set, do nothing } elseif(!in_array($category['id'], $_POST['categories']) { //this category is in the old set, but not the new one, delete it $queries[] = "DELETE FROM Categories WHERE id=".$category['id']; } else { //new category, add it $queries[] = "INSERT INTO Categories()..." } } foreach($queries as $item) { //run query }
В сравнении с этим:
DELETE FROM Categories WHERE post_id=$_POST['id'] foreach($_POST['categories'] as $item) { INSERT INTO Categories() ... }
Лично я считаю, что вариант №2 лучше.
Когда вы «обновляете функции», вы делаете именно это, update
.
Необходимо использовать UPDATE. Кроме того, удаление и вставка могут выполняться в одной команде REPLACE.
http://dev.mysql.com/doc/refman/5.0/en/replace.html
Кроме того, если функции могут быть разделены (отношения многих или многих), вы можете захотеть рассмотреть третью таблицу, которая связывает только идентификаторы телефонов с идентификаторами.