【问题标题】:Maintaining a Relative Order of Flex Tasks in a SQL DB在 SQL DB 中维护 Flex 任务的相对顺序
【发布时间】:2016-06-20 08:50:16
【问题描述】:

我有一个任务调度应用程序,它允许人们创建两种类型的任务...

•严格 - 具有设定开始时间和持续时间的任务 •弹性任务,有持续时间,但没有具体的开始时间

了解弹性任务的运作方式也很重要 - 弹性任务会在您最近打开的时间在您的一天中不断地重新安排自己……例如,如果您今天安排的唯一任务是弹性任务,例如“Go锻炼 - 持续时间:60 分钟”,您在下午 4 点打开应用程序,如果您不单击表示您已完成任务的复选框并在下午 5 点再次打开应用程序“开始锻炼将被重新安排到下午 5 点到 6 点,这样你打算完成的事情就会不断地出现在你的面前,并试图让自己适应你生活的空白。

当用户查看他们的日程安排时,我会执行以下步骤: • 完成一系列严格的任务 •抓取所有弹性任务的数组 • 遍历每个严格的任务,计算当前被循环任务的结束时间和下一个任务开始时间之间的时间间隔有多大。 •如果存在间隙,遍历弹性任务并查看它们中的任何一个是否适合所讨论的时间间隙。如果 flex 任务足够小以适应时间间隔,则将其添加到当前循环的任务和下一个任务之间的 strictTasksArray。

只要在弹性任务方面不需要任何类型的排序,这很有效,但现在我们添加了用户将弹性任务拖放到特定相对顺序的功能,也就是如果我有任务A B C D 我将 Task D & B 拖到前面,这样它现在的 D、B、A、C 需要保存该排序,这样如果您关闭并重新打开应用程序,应用程序仍会记住尝试将任务 D 放入,然后by B, A & C .....但是考虑到排序是相对的而不是严格的,我很难想出一种有效的方法......任何想法如何在 SQLIte DB 中保存相对排序而不必更新每个每次用户拖放任务并更改相对顺序时任务的数据库记录?

【问题讨论】:

    标签: ios sql sqlite relational-database


    【解决方案1】:

    如果您曾经使用 Basic 编码,您可能还记得给代码行编号。建议以 10 为增量进行编号,这样如果稍后您必须插入一两行,您就不必重新编号所有代码,只需在前一个和前一个代码之间分配一个新数字下一行。

    因此,在您的情况下,我将为 Rank 创建一个数字字段,并为每个新的 Flex 任务分配 Rank = max(Rank) + 1024(例如)。之后,如果重新排列任务,我将只更新一个“已移动”任务的 Rank 与它的新的前一个和下一个邻居的平均 Rank。这样一来,任何排名变化都只会更新一行。当然,如果 Rank 是 int 并且我在两个任务之间用完了整数,我将不得不全部更新它们,但这应该是后面的情况,我只会以 1024 的新增量重新对它们进行排名。

    【讨论】:

      【解决方案2】:

      听起来您需要某种priorityorder_number 列来设置任务进入的顺序。只需将其设为int,并相应地加权它们。如果您需要 DBMS 使用查询来保持它们的顺序,则必须使用排序:

      SELECT task_id, task_group_id, task_name, completed, priority 
      FROM tasks WHERE user = ? and task_group_id = ? and completed = 0 ORDER BY priority ASC
      

      您可以使用 task_group 表的某种外键来实际将某些任务组合在一起(如果它们是多部分的),然后构建查询以查找所有完整或不完整的任务。分配的权重仍然是正确的,因为任务不通过 ID 相互引用。

      【讨论】:

      • 在一个用户可能有几十个或几百个任务的应用程序中,您确定每次用户实时拖放任务时运行与弹性任务一样多的更新查询是有意义的?
      • 将优先级设为小数,然后使用恰好在您插入的优先级之间的数字重新排序一项。用户必须重新排序几乎不可能的次数才能达到此限制
      • 一旦你达到极限,做 Y.B.说并做一项工作,将该组任务中的所有优先级重新计算回整数。将是一次千载难逢的大规模更新
      猜你喜欢
      • 2013-12-20
      • 2013-09-16
      • 1970-01-01
      • 2013-11-19
      • 2019-07-12
      • 2014-03-03
      • 1970-01-01
      • 2020-07-31
      • 2013-10-10
      相关资源
      最近更新 更多