Общей потребностью при использовании базы данных является доступ к записям по порядку. Например, если у меня есть блог, я хочу изменить порядок своих сообщений в блоге в произвольном порядке. Эти записи часто имеют много связей, поэтому реляционная база данных, кажется, имеет смысл.
Общее решение, которое я видел, состоит в том, чтобы добавить целочисленный столбец order
:
CREATE TABLE AS your_table (id, title, sort_order)
AS VALUES
(0, 'Lorem ipsum', 3),
(1, 'Dolor sit', 2),
(2, 'Amet, consect', 0),
(3, 'Elit fusce', 1);
Затем мы можем отсортировать строки, order
чтобы получить их в правильном порядке.
Однако это кажется неуклюжим
- Если я хочу переместить запись 0 в начало, я должен изменить порядок каждой записи
- Если я хочу вставить новую запись в середине, я должен изменить порядок каждой записи после нее
- Если я хочу удалить запись, я должен изменить порядок каждой записи после нее
Легко представить такие ситуации, как:
- Две записи имеют одинаковые
order
order
Между записями есть пробелы
Это может произойти довольно легко по ряду причин.
Такой подход используют такие приложения, как Joomla:
Вы можете утверждать, что интерфейс здесь плохой, и что вместо того, чтобы люди непосредственно редактировали числа, им следует использовать стрелки или перетаскивание - и вы, вероятно, были бы правы. Но за кулисами происходит то же самое.
Некоторые люди предлагают использовать десятичную для сохранения порядка, так что вы можете использовать «2.5» для вставки записи между записями в порядке 2 и 3. И хотя это немного помогает, возможно, это даже более грязно, потому что вы можете в конечном итоге с странные десятичные дроби (где вы остановитесь? 2,75? 2,875? 2,8125?)
Есть ли лучший способ хранить заказ в таблице?
orders
и ddl.