作者rushcat (嗯)
看板Database
标题Re: [SQL ] 如何设计排班表
时间Sat May 29 00:16:39 2010
就资料库的部分回一下
原先的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