Dies ist ein Follow-up auf meine Fragen hier:
How to implement a many-to-many hierarchical structure in MySQL
und hier:
How to record sequential collections of records in MySQL.Wie wird eine Sortierreihenfolge zu einer MySQL-Verschlusstabelle hinzugefügt, die eine Viele-zu-Viele-Beziehung darstellt?
Kurz gesagt, ich möchte in MySQL eine Tabelle von Rezepten und eine andere Anleitung implementieren. Ein Rezept ist eine sequentielle Reihe von Anweisungen oder andere Rezepte. So könnten Sie zum Beispiel ein Rezept vorstellen, und ein Peach_tart
, das die , plus eine Reihe anderer Schritte (Anweisungen) verwendet. Peach_preserve
könnte für viele andere Rezepte verwendet werden.
Ich lese this blog post by Bill Karwin about closure tables, und ich denke, dass diese Lösung meine Herausforderungen am besten anspricht (meine Hierarchie ist viele-zu-viele und die Schritte sind sequenziell). So zum Beispiel hätte ich:
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...)
Ich bin kein Fan der descendant_is_instruction
Flagge, aber ich weiß nicht, wie sonst, das zu tun. Ich nehme ich es mit einem descendant_is_leaf
ersetzen könnte Terminal Elemente zu identifizieren ...
Die Sortierreihenfolge durch eine Tabelle dargestellt wird, die in einer Tiefe von 1 alle Beziehungen umfasst:
Depth=1 table
recipe_id step_id order
3 2 1
4 3 1
6 4 1
2 3 1
2 6 2
Ich vereinfacht hier, weil ich in der Praxis Zutaten und Anweisungen trennen würde, aber Sie bekommen die Idee.
Also, ist das ein guter Weg, um sowohl eine hierarchische Datenstruktur als auch eine Vorstellung von Schrittfolge zu kombinieren? Alles, was ich tun sollte, um zu verbessern/zu vereinfachen?
In diesem Sinne sind die Felder 'description' /' name' redundant in Bezug aufeinander. Wie wäre es, wenn ein Tisch den Baum der Rezepte und der andere nur die Namen hätte? – Yuval
@Yuval, ich sehe den Rezeptnamen und die Anweisungsbeschreibung nicht, die das Rezept als redundant verwendet. Das erstere beschreibt "was" der resultierende Inhaltsstoff ist (zum Beispiel "geschmolzene Schokolade"), das spätere "Wie" wird das Ergebnis verwendet (z. B. "Kunst auf Teller mit geschmolzener Schokolade"). Yumm. –