Скажем, у меня есть таблица Product
в базе данных торгового сайта, чтобы хранить описание, цену и т.д. продуктов магазина. Каков наиболее эффективный способ сделать мой клиент в состоянии переупорядочить эти продукты?
Я создаю столбец Order
(целое число) для использования для сортировки записей, но это дает мне некоторые головные боли относительно производительности из-за примитивных методов, которые я использую, чтобы изменить порядок каждой записи после того, который мне действительно нужно изменить. Пример:
Id Order
5 3
8 1
26 2
32 5
120 4
Теперь, что я могу сделать, чтобы изменить порядок записи с ID=26
на 3?
Я создал процедуру, которая проверяет, есть ли запись в целевом порядке (3) и обновляет порядок строки (ID = 26), если нет. Если есть запись в целевом порядке, процедура выполняет сама посылка этого идентификатора строки с помощью target order + 1
в качестве параметров.
Это приводит к обновлению каждой отдельной записи после той, которую я хочу изменить, чтобы освободить место:
Id Order
5 4
8 1
26 3
32 6
120 5
Итак, что мог бы сделать более умный человек?
- Я использую SQL Server 2008 R2.
Edit:
Мне нужно, чтобы столбец заказа элемента был достаточным для сортировки без участия вторичных ключей. Только столбец заказа должен указать уникальное место для своей записи.
В дополнение ко всему, интересно, могу ли я реализовать что-то вроде связанного списка: столбец "Следующий" вместо столбца "Заказ", чтобы сохранить следующий идентификатор элементов. Но я не знаю, как написать запрос, который извлекает записи с правильным порядком. Если кто-то имеет представление об этом подходе, пожалуйста, поделитесь.