看板 Database 關於我們 聯絡資訊
就資料庫的部分回一下 原先的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