Я хочу представлять список "привет" , "привет" , "до свидания" , "хороший день", "howdy" (с этим порядком) в таблице SQL:
pk | i | val
------------
1 | 0 | hi
0 | 2 | hello
2 | 3 | goodbye
3 | 4 | good day
5 | 6 | howdy
'pk' является столбцом первичного ключа. Не обращайте внимания на его значения.
'i' - это "индекс", который определяет этот порядок значений в столбце "val". Он используется только для установления порядка, и значения в противном случае несущественны.
Проблема, с которой я столкнулась, заключается в введении значений в список при сохранении порядка. Например, если я хочу вставить "эй", и я хочу, чтобы он появился между "привет" и "до свидания" , тогда мне нужно переместить значения "i" "до свидания" и "хороший день" (но предпочтительно не "howdy" ), чтобы освободить место для новой записи.
Итак, существует ли стандартный шаблон SQL для операции сдвига, но только сдвиг необходимых элементов? (Заметим, что простая "таблица UPDATE SET я = я + 1 WHERE я >= 3" не работает, поскольку она нарушает ограничение уникальности на "i", а также без необходимости обновляет строку "howdy".)
Или, есть ли лучший способ представить упорядоченный список? Я предполагаю, что вы можете сделать "i" значение с плавающей запятой и выбрать значения между ними, но тогда вы должны иметь отдельную операцию перебалансировки, если такое значение не существует.
Или существует ли какой-то стандартный алгоритм для создания строковых значений между произвольными другими строками, если я должен был сделать "i" varchar?
Или я должен просто представлять его как связанный список? Я избегал этого, потому что я хотел бы также сделать SELECT.. ORDER BY, чтобы получить все элементы в порядке.