就資料庫的部分回一下
原先的Date Table 可以改成Schedule
-- Schedule
Schedule_Id, BaseDate, Staff_Id, WorkType_Id
條件一的前半段 預先排班 就直接將資料塞進Schedule即可
另外可以建立一個Table存放個人偏好班別
-- PreferSetting
Staff_Id, PreferType, Prefer_Id
(W=Work, K=Weekend) 在寫排程程式的時候 加入此表設定考量
至於其它條件 看起來都跟資料庫設計無關...
還是說你希望將整個排程控制都寫在MySQL裡!? (Stored Procedure!?)
: 然後依照現實上的需要,有額外的過濾條件
: (這部分我想這應該是會用在 where 或 having 的條件):
: 條件一:每個人都可以特別選擇某幾天(假設三天)一定要休假(例如連假之類的),
: 或一定要上某種類的班,不過這個可供設定的欄位
: 我不知道該設計在哪個表比較好
: 條件二:假設A是早班,B是正常班,C是午班,D是晚班
: 不能上完晚班,隔天接著又上早班、正常班或午班,以免太累
: 也就是說,D的隔天不是休假,就是D
: 其他三種班可以隨便排
: 條件三:每個人上的各種班別盡量要平均
: (例如22天內,ABCD四種班至少都要上到5天,這樣是20天,
: 另外2天可以隨便一種班)
: 條件四:班別或休假希望能盡量排成連續日
: 條件五:某些星期可以有不同的權重分數,這欄位我在資料表有設計了 weight
: 例如星期六和日大家一定都不想上班,要和朋友出去玩
: 為了讓大家都能踴躍排星期六日的班,所以六日的權重最高
: 例如 權重 星期
: 4 六日
: 3 五一
: 2 四二
: 1 三
: 好方便主管日後打考評分數
: 依此類推,worktype 那個表的四種班別也有權重設計
: 條件六:不能連續上班超過六天(違反勞動基準法?)
: 條件七:因為6個人,每個人要上班22天,有6x22=132個人/班可以用
: 但是一個月30天,每天4班,只有120個班可以用
: 所以勢必有132-120=12個人/班,要和別人一起上班
: 也就是必須有12個班(或以上)是2個人一起上班
: 條件八:希望至少每個人都能排到1至2天的週末(六日),以盡公平
: 寫了這麼多條件,真的是很複雜
: 也可以知道這絕對不是作業 = = 應該沒人會出這麼困難的作業吧
: 希望有在研究 排班問題 的高手可以賜教
: 謝謝~
--
◢ █◣ ◢◢◣ ◢◣◥████
◢███◣ ◢ ◣ █╴█╴█ ████
███▉█ ◢█◢ ◣◢ ██ ≡███≡ ◥█
███▉█ ◢▉█ ◢██ ███ ◢██ ◢██ ███ ◥█﹋█◤ ◎ █
█▇▇▇◤ █▉█ █▇▇ █▇▏ ▉▇▇ █▉█ ██ ▉▉█▏▏/ ◢█
██▇▏◣ █▇█ ▇▇█ ██▏ ███ █▇█▎██ █▉▉█▏▏█ rushcat
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.193.86.169