Este es un seguimiento de mis preguntas aquí:
How to implement a many-to-many hierarchical structure in MySQL
y aquí:
How to record sequential collections of records in MySQL.¿Cómo agregar un orden de clasificación a una tabla de cierre MySQL que representa una relación muchos a muchos?
En resumen, quiero implementar en MySQL una tabla de recetas y otra de instrucciones. Una receta es una serie secuencial de instrucciones u otras recetas. Entonces, por ejemplo, podría imaginarse una receta Peach_preserve
, y una Peach_tart
que usa el Peach_preserve
, más una serie de otros pasos (instrucciones). Peach_preserve
podría usarse para muchas otras recetas.
Leo this blog post by Bill Karwin about closure tables, y creo que esta solución responde mejor a mis desafíos (mi jerarquía es many-to-many y los pasos son secuenciales). Así, por ejemplo, me gustaría tener:
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...)
no soy un fan de la bandera descendant_is_instruction
, pero no sé qué otra manera de hacer eso. Supongo que podría reemplazarlo con un descendant_is_leaf
para identificar los elementos terminales ...
El orden es un género representado por una tabla que incorpora todas las relaciones a una profundidad de 1:
Depth=1 table
recipe_id step_id order
3 2 1
4 3 1
6 4 1
2 3 1
2 6 2
estoy simplificando aquí porque en la práctica separaría ingredientes e instrucciones, pero entiendes la idea.
Entonces, ¿es una buena manera de combinar una estructura de datos jerárquica y una noción de orden por pasos? ¿Algo que debería hacer para mejorar/simplificar?
En ese sentido, los campos 'description' /' name' son redundantes entre sí. ¿Qué tal tener una mesa con el árbol de recetas y el otro solo los nombres? – Yuval
@Yuval, no veo el nombre de la receta ni la descripción de la instrucción que utiliza la receta como redundante. El primero describe "qué" es el ingrediente resultante (por ejemplo, "chocolate derretido"), el "cómo" más tarde se usa el resultado (por ejemplo, "dibujar arte en un plato con chocolate derretido"). Yumm. –