Забудьте правильно - проблема, которую вы хотите избежать, не будет большой проблемой, а всего лишь парой операторов UPDATE в зависимости от вашей СУБД (я предполагаю, что Oracle и что вы продвигаете статью «вверх», список):
UPDATE Articles
SET sort_number = sort_number + 1
WHERE sort_number BETWEEN :new_sort_number and :current_sort_number - 1;
UPDATE Articles
SET sort_number = :new_sort_number
WHERE article_id = :article_id;
Самым большим предупреждением является то, что функциональность SET не работает одинаково во всех СУБД.
Если вы действительно хотите считать правильным , подумайте над тем, чтобы переосмыслить вопрос с точки зрения структур данных - возможно, вы спросите, как реализовать связанный список в базе данных.
В качестве альтернативы ведению столбца номер сортировки можно использовать столбец родительский идентификатор . Это, возможно, более правильно, так как сохраняет сериализацию ваших данных, но недостатком является то, что запрос данных не является красивым или эффективным (например, подумайте о CONNECT BY в Oracle).
Если вместо этого вопрос, какой лучший , возможно, вы захотите рассмотреть столбец parent ID для правильности и денормализации данных путем получения номера сортировки значение столбца, возможно из данных родительского идентификатора или из первого решения.