Я знаю, что это противоречит принципам реляционной базы данных, но позвольте мне описать ситуацию.
У меня есть страница, на которой пользователь разместит несколько элементов.
________________
| -Item1 |
| -Item2 |
| -Item3 |
| -Item4 |
|________________|
Эти предметы должны оставаться в том порядке, который пользователь дает им. Однако этот заказ может быть изменен произвольным числом раз пользователем.
________________
| -Item1 |
| -Item4 |
| -Item2 |
| -Item3 |
|________________|
Подход 1
Моя первоначальная мысль заключалась в том, чтобы дать элементам индекс, который будет представлять их место в списке
Page Item
----------- ---------------
FK | pid FK | pid
| name PK | iid
| index
| content
С помощью этого решения вы можете выбрать элементы where pid = Page.pid
и order by index
, что удобно. Однако каждый раз, когда вы меняете заказ, вы должны меняться где угодно между одним другим пунктом (наилучшим случаем) и всеми другими элементами (наихудший случай).
Подход 2
Я также подумал о создании "связанного списка", например структуры данных, где каждый элемент указывает на следующий элемент в списке.
Page Item
----------- ---------------
FK | pid FK | pid
| name PK | iid
| next
| content
Это потенциально может привести к снижению стоимости заказа, но нам придется полагаться на программирование переднего конца, чтобы извлечь заказ.
Есть ли подход, о котором я не думал? Пожалуйста, дайте мне знать.