Речь идет о хранении команд в базе данных вместо текстового файла или электронной таблицы. Я ищу решение, которое имитирует поведение номеров строк в текстовом редакторе.
Например, учитывая таблицу ниже со столбцом «Порядок» в качестве первичного ключа, когда я удаляю вторую строку (Порядок = 2) я бы закончил с пробелом в столбце заказа (1, 3), который нужно исправить до (1, 2)
| Order | Command | | Order | Command | | Order | Command |
|-------|--------------| |-------|--------------| |-------|--------------|
| 1 | CAM - ON | ==> | 1 | CAM - ON | ==> | 1 | CAM - ON |
| 2 | Turn left | | 3 | Take picture | | 2 | Take picture |
| 3 | Take picture |
Я уже экспериментировал с триггерами. Перед удалением записи триггер обновляет соответствующие порядковые номера других записей. У меня также есть триггеры для добавления или добавления новой записи «до» существующей.
Я знаю, что физический порядок на диске отличается и не имеет значения. Итак, я просто манипулирую столбцом «Порядок», чтобы имитировать поведение номеров строк
. То же самое отлично работает с обновлением записей. Например, если я хочу «переместить» команду «Повернуть влево» на первую позицию, реализация триггера перед обновлением для изменения порядка других записей тоже помогает. Например, установите порядок команды «Повернуть влево» на 1, и триггер сначала обновит другие записи:
| Order | Command | | Order | Command |
|-------|--------------| |-------|--------------|
| 1 | CAM - ON | ==> | 2 | CAM - ON |
| 2 | Turn left | | 1 | Turn left |
| 3 | Take picture | | 3 | Take picture |
Однако эта проблема создает проблему. Удаление или вставка записи запускает процедуру, которая обновляет записи, которая теперь запускает процедуру обновления. Это, кажется, делает вещи рекурсивными и сложными.
Я пытался отключить и включить триггер обновления из других процедур триггера, но (в postgresl) это требует изменения таблицы, что недопустимо во время запроса. .
Мой вопрос: есть ли более простое решение, которое охватывает все четыре операции CRUD? Возможно использование других типов данных для столбца заказа вместо целочисленных или совершенно других методов?