gpt4 book ai didi

database - 最佳实践 : Storing a workflow state of an item in a database?

转载 作者:太空狗 更新时间:2023-10-30 01:42:54 27 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

10 个月前关闭。




Improve this question




我有一个关于最佳实践的问题,即如何在数据库中存储复杂的工作流状态以处理任务。我一直在网上寻找无济于事,所以我想我会问社区他们认为什么是最好的。

这个问题来自我在上一个问题中给出的同一个“BoxItem”示例。这个“BoxItem”正在我的系统中被跟踪,因为在它上面执行了各种任务。任务可能会在几天内进行,并且需要人工交互,因此必须保留 BoxItem 的状态。谁完成了任务(如果适用)以及任务何时完成也必须被跟踪。

起初,我通过为每个需要完成的人工交互任务向“BoxItems”表添加三个字段来解决这个问题:

IsTaskNameComplete

日期任务名称完成

用户任务名称完成

这在工作流程简单时有效......但现在它已经发展成为一个复杂的过程(流程中有 > 10 种可能的人工交互......其中大约一半是可选的,并且可能会或可能不会为 BoxItem 完成,这导致我开始为那些可选任务添加“DoTaskName”字段),我发现应该是一个简单的表现在有 40 个左右的字段完全用于保留此状态信息。

我发现自己在问是否有更好的方法来做到这一点......但我不知所措。

我的第一个想法是制作一个通用的“BoxItemTasks”表,它定义了可以在给定盒子上完成的任务,但我仍然需要单独保存日期和用户信息,所以它并没有真正帮助。

我的第二个想法是,也许这无关紧要,如果这张表有 40 个或更多字段专门用于状态保留,我不应该担心……也许我只是偏执了。但感觉要保留很多信息。

无论如何,对于第三种选择可能是什么,或者上述两种选择中的一种是否真的合理,我感到茫然。我可以看到这个工作流程在 future 可能会变得更加复杂,对于每个新任务,我将需要添加 3-4 个字段来支持它的跟踪......感觉它正在失控。

在这个情况下,你会怎么做?

我应该注意,这是对现有系统的维护,一个没有 ORM 构建的系统,所以我不能把它交给 ORM 来处理。

编辑:

Kev,你是在说做这样的事情吗:

盒子物品

(PK) BoxItemID

(其他无关内容)

BoxItemActions

(PK) BoxItemID

(PK) BoxItemTaskID

完成了

完成日期

用户完成

BoxItemTasks

(PK) 任务类型

描述(如果有必要)

嗯……那会起作用……这代表需要改变我目前执行 SQL 查询的方式以查看哪些项目处于什么状态,但从长远来看,这样的事情看起来会更好(无需进行像序列化想法所代表的基本设计更改......不过如果我有时间,我想按照我的想法来做。)。

所以这就是你提到的 Kin,还是我不同意?

编辑:啊,我也看到你的想法和“最后行动”来确定当前状态......我喜欢它!我认为这可能对我有用......我可能需要稍微改变一下(因为在某些时候任务会同时发生),但这个想法似乎是个好主意!

编辑最终版:总而言之,如果将来有人用同样的问题来查找这个问题......听起来序列化方法会很有用,如果您的系统将信息预加载到某些可查询的界面中(即不直接调用数据库本身,就像我正在使用的临时系统所做的那样),但如果你没有,附加表的想法似乎应该很好用!谢谢大家的回复!

最佳答案

如果我理解正确,我会添加 BoxItemTasks 表(只是一个枚举表,对吗?),然后是一个 BoxItemActions 表,其中包含指向 BoxItems 和 BoxItemTasks 的外键,表示它是什么类型的任务。如果您想让特定任务只能在特定框项目上执行一次,只需将 (Items + Tasks) 列对作为 BoxItemActions 的主键即可。

(你把它布置得比我好得多,并且感谢正确解释我所说的。你写的正是我所描绘的。)

至于确定当前状态,您可以在 BoxItemActions 上编写一个触发器来更新单列 BoxItems.LastAction。对于并发操作,您的触发器可能只有特殊情况来决定哪个操作最近一次。

关于database - 最佳实践 : Storing a workflow state of an item in a database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/116762/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com