数据库 表设计

a b c d 4个人

a将任务转办给b.

b将任务转办给c.

c将任务转办给d.
...

a 看到的记录. a->b->c->d.
....

数据表应该如何设计呢?

阅读 2.7k
3 个回答

因为MySQL 不太支持存储有顺序的列表类型, 当然如果把任务队列a->b->c->d看成字符串另说。
有没有考虑过给任务额外增加一些属性,比如计数,时间戳等。因为任务本身应该有一定时效性。

没理解错的话,其实就是当某一个用户开始接手这个任务之后,后续任务对其可见

比如一项任务执行顺序是a-b-c-d-b,那可以有:

user task order
a    task1   0
b    task1   1
c    task1   2
d    task1   3
b    task1   4
b    task2   0
d    task2   1
...  ...     ...

比如要查询b的记录,那么就是b接手之后的所有任务都是对b可见的
SQL查询可以是:其中table1 就是存储上述数据的一个表。子查询得到的结果就是找到该用户最早接手的任务对应的序号,这里是2

SELECT table1.user 
FROM table1 
WHERE table1.order >= 
    (SELECT table1.order 
     FROM table1 
     WHERE table1.user = 'a'
     AND table1.task = 'task1' 
     ORDER BY table1.order 
     LIMIT 1) 
AND table1.task = 'task1'
ORDER BY table1.order;

最后得到有顺序的b->c->d->b

可以建个1对多关系的两张表啊,任务表(task_id,..)和任务转办表(id, task_id, user_id, parent_id, next_id,..),parent_id为0的就是第一个接手记录,next_id为0的就是最后个接手的记录。查这个任务的所有关系链按照id升序就是了。查指定人的下级关系链找转办表主键id大于这个人所在记录的主键id的就行了。

弄个任务转办记录表,一个任务可以对应多条转办记录,根据任务ID查询出对应的所有的转办记录,根据时间排序升序,就能得到 a->b->c->d的效果了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题