日期:2014-05-17  浏览次数:20440 次

一个任务管理软件数据库设计问题
有一个任务表(Tasks)

和三个对象表——用户表(Users)、部门表(Departments)和生产线表(ProductLines)

一个生产线包含多个部门,一个部门包含多个用户

发布一个任务时,要求有一个或多个对象来作为“接受人”。

场景1:接受人是一个用户;
场景2:接受人是一个部门;
场景3:接受人是一个生产线;
场景4:接受人是一个部门+若干用户(此时要求显示该部门名称和若干用户姓名);
场景5:接受人是若干用户;
场景6:接受人是若干部门;
场景7:接受人是若干部门+若干用户(此时要求显示若干部门名称和若干用户姓名);
场景8:接受人是一个部门中的大部分用户(此时要求显示为一个部门,而不显示这些用户);
场景9:接受人是一个生产线中的大部分部门(此时要求显示为一个生产线,而不显示这些部门);

请问该如何设计这个“任务和接受人映射表”?

------解决方案--------------------
不管任务是下个个人,还是部门,最终都是给人的,所以任务和人之间应该是多对多的关系,那也就是需要一张关系表来存放啦:

create table R_TASK_USER
(
RID       int identity(1,1) not null primary key,
TASK_ID   int,
USER_ID   int
)