鍍金池/ 問答/PHP  數據庫/ 數據庫 表設計

數據庫 表設計

a b c d 4個人

a將任務轉辦給b.

b將任務轉辦給c.

c將任務轉辦給d.
...

a 看到的記錄. a->b->c->d.
....

數據表應該如何設計呢?

回答
編輯回答
醉淸風

可以建個1對多關系的兩張表啊,任務表(task_id,..)和任務轉辦表(id, task_id, user_id, parent_id, next_id,..),parent_id為0的就是第一個接手記錄,next_id為0的就是最后個接手的記錄。查這個任務的所有關系鏈按照id升序就是了。查指定人的下級關系鏈找轉辦表主鍵id大于這個人所在記錄的主鍵id的就行了。

2018年5月11日 14:27
編輯回答
紓惘

因為MySQL 不太支持存儲有順序的列表類型, 當然如果把任務隊列a->b->c->d看成字符串另說。
有沒有考慮過給任務額外增加一些屬性,比如計數,時間戳等。因為任務本身應該有一定時效性。

沒理解錯的話,其實就是當某一個用戶開始接手這個任務之后,后續(xù)任務對其可見。

比如一項任務執(zhí)行順序是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。

2018年3月14日 21:20
編輯回答
貓小柒

弄個任務轉辦記錄表,一個任務可以對應多條轉辦記錄,根據任務ID查詢出對應的所有的轉辦記錄,根據時間排序升序,就能得到 a->b->c->d的效果了

2018年8月31日 03:15