Загальна потреба при використанні бази даних - це доступ до записів по порядку. Наприклад, якщо у мене є блог, я хочу мати змогу змінити порядок своїх публікацій в довільному порядку. Ці записи часто мають багато стосунків, тому, здається, реляційна база даних має сенс.
Поширене рішення, яке я бачив, - це додати цілий стовпець 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.