考虑这样的(定向)图:
此图的每个节点代表配方准备程序的步骤。要开始step 2
,step 1
必须已经完成;开始step 7
,step 5
,step 3
和step 6
必须已经完成(以及之前的每一步); step 1
,step 6
和step 8
可以立即启动 (同时 )。 step 9
是结束步骤:每个食谱中只有一个结束步骤。
每个步骤都有持续时间。
我已经以这种方式在MySQL DB中实现了这个图:
CREATE TABLE Step (
ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
RecipeID INT UNSIGNED NOT NULL,
Duration TIME, -- if NULL = immediate (duration: 00:00:00)
PRIMARY KEY (ID),
FOREIGN KEY (RecipeID) REFERENCES Recipe(ID)
);
CREATE TABLE StepSequence (
Step INT UNSIGNED NOT NULL,
PreviousStep INT UNSIGNED NOT NULL,
PRIMARY KEY (Step, PreviousStep),
FOREIGN KEY (Step) REFERENCES Step(ID),
FOREIGN KEY (PreviousStep) REFERENCES Step(ID)
);
我需要在MySQL 中使用存储的函数/过程来计算配方准备的所需的总时间。这一次(考虑到可以同时进行总是同步的步骤)具有最长时间的路径。
考虑到我无法创建递归过程,我如何以迭代方式获得该结果? (在评论中解释了阻止我使用递归过程的问题 - 接受了使代码也适用于递归过程的任何解决方法)