How to добавить порядок сортировки в таблицу закрытия MySQL, представляющую отношения «многие ко многим»?

Это продолжение моих вопросов здесь:
Как реализовать иерархическую структуру "многие ко многим" в MySQL
и здесь:
Как записывать последовательные наборы записей в MySQL.

Короче говоря, я хочу реализовать в MySQL таблицу рецептов и еще одну таблицу инструкций. Рецепт — это последовательный ряд инструкций или других рецептов.Так, например, вы можете представить рецепт Peach_preserveи Peach_tart, в котором используется Peach_preserve, а также ряд других шагов (инструкций). Peach_preserveможно использовать для многих других рецептов.

Я прочитал эту запись в блоге Билла Карвина о замыкающих таблицахи думаю, что это решение лучше всего решает мои проблемы (моя иерархия — «многие ко многим», а шаги — последовательные). Так, например, у меня было бы:

recipe
id  name
1   Peach preserve
2   Cubed peeled peaches
3   Fresh peaches
4   Powdered sugar
5   Cook together
6   Peel and cut in chunks
7   Mix

step (or instruction)
id  desc
1   Cook together
2   Buy peaches
3   Buy sugar
4   Peel and cut in chunks
5   Mix

recipe_instruction
(Ancestor) (Descendant)
recipe_id  step_id   depth  descendant_is_instruction
3          3         0      0
3          2         1      1
4          4         0      0
4          3         1      1
6          6         0      0
6          4         1      1
2          2         0      0
2          3         1      0
2          2         2      1
2          6         1      0
2          4         2      1
(and so on...)

Я не поклонник флага потомок_is_instruction, но я не знаю, как еще это сделать. Я полагаю, что мог бы заменить его на потомок_это_лист, чтобы идентифицировать конечные элементы...

Порядок сортировки представлен таблицей, которая включает все отношения на глубине 1:

Depth=1 table
recipe_id  step_id      order
3           2            1
4           3            1
6           4            1
2           3            1
2           6            2

Я упрощаю здесь, потому что на практике я бы разделил ингредиенты и инструкции, но вы поняли идею.

Итак, это хороший способ объединить иерархическую структуру данных и понятие пошагового порядка? Что я должен сделать, чтобы улучшить/упростить?

6
задан Community 23 May 2017 в 11:47
поделиться