时间表应用程序的数据库设计问题

时间:2011-02-08 11:01:19

标签: database-design relationships

我在Asp.Net MVC中有一个时间表应用程序,但问题应该是通用数据库设计:

我有许多相关的表,Customer,Project,Task,Employee,TimeSegment。现在,我希望能够将任务与员工关联为“资源”。对于每个资源,我希望能够获得有关为特定任务分配给员工的工作百分比的信息。但我无法绕过它。据我所知,它不能简单地是Task和Employee之间的多对多关系,因为我在哪里放置百分比字段呢?如果我把它放在员工身上,它将如何与特定任务相关?

这似乎是一个简单的问题,但我无法弄清楚,我应该提到我的数据库技能相当简陋。所以任何帮助都将不胜感激!

编辑: 好的,你们中的一些人回答了一些关于使用Employee_Id和Task_Id以及WorkPercentage为“资源”创建单独表的变体。但是,每次添加任务时,我应该手动更新Employee_Id和Task_Id吗?因为我首先将这些答案理解为我应该在Employee和Task之间添加多对多关系,然后在联结表(EmployeeTask)中添加WorkPercentage字段。我试过了,但是当我尝试添加一个员工时,我立即遇到了问题,该员工需要一份EmployeeTasks列表并抱怨不可为空的字段没有空值。但那不是我应该怎么做的呢?而是使用每个字段值手动更新的单独表格??

如果可能的话,请详细说明如何处理您提出的解决方案(即就任何关系而言)。谢谢!

3 个答案:

答案 0 :(得分:0)

也许是一个名为“Resources”的新表,其中包含id_employee,id_task和work_percentage的列?

您尝试建模的每件事物都可以使用多个表格。

答案 1 :(得分:0)

您的意思是“跟踪已将多少任务分配给员工A”?

如果是这样,您可以创建一个包含task_id,employee_id和工作百分比的新表。

处理它的最简洁方法是:每次创建新任务时,添加100%分配给无人的记录(例如,员工ID为0)。然后,每当有人被分配时,为该员工创建一个新记录,并为他们刚刚给出的%,并更新原始记录以取消该数量。

通过这种方式,您还可以轻松跟踪任何资源不足的任务。

答案 2 :(得分:0)

您可能需要一个表,比如ProjectResources,只记录哪些员工是每个项目的资源。然后可能是ProjectTasks的表,您可以在其中记录项目密钥,任务密钥,资源密钥以及您需要的任何其他详细信息。

就个人而言,我发现按时间而不是百分比估算和跟踪任务更有用。最后,我想知道“任务'n'已经完成,需要3个小时”,而不仅仅是“任务'n'已完成。”