Мне было интересно, можно ли / хорошо поддерживать отсортированный список в базе данных.
См. Ответ @Conrad Frix, чтобы узнать, что это действительно возможно (используя оконную функцию ROW_NUMBER()
- это еще один подход, который имеет преимущество, заключающееся в том, что он является стандартным SQL и поддерживается в SQL Server).Обратите внимание, что это добавляет столбец к таблице (атрибут relvar, если хотите), который не является «отсортированным списком», но, кажется, является тем, что вам требуется.
Это хорошая идея?Ясно, что если это требование к вашему приложению / предприятию, тогда действительно целесообразно поддерживать значения в базе данных.
Каждый раз, когда я вставляю, база данных может вставить ее в правильное положение
Обратите внимание, что если у вас есть 100 строк с уникальными значениями атрибута priority
1-100, и вам нужно INSERT
значение, скажем, priority = 55
, существующие значения 55-100 должны бытьувеличивается на единицу, и база данных не сделает этого за вас, если вы не написали процедурный код в объекте базы данных для этого (например, триггер).Если вам нужно управлять только INSERT
с (а не UPDATE
с или DELETE
с), тогда, возможно, лучшим подходом будет начать с более крупных пробелов, например, ваши первые 100 строк могут иметь значения priority
1000, 20003000, ... 100000.Теперь тот же самый INSERT
, что и раньше, может идти между 54000 и 55000, присваивая ему атрибут priority = 54500
без необходимости переназначения каких-либо значений.