DB设计问题

时间:2011-08-15 08:16:48

标签: sql-server sql-server-2005 sql-server-2008 database-design data-structures

要求:经理会将目标分配给他的下属,下属会报告这些目标。

要求详细说明:经理将创建项目并提供开始日期结束日期。经理将在项目中添加下属,并在活动列表中的项目中添加活动。经理将为他们的下属分配目标并选择报告的频率。频率可以每年,每月,每季度,每周。下属将报告这些指定的目标。

经理分配目标

  • 开始日期: 2011年1月1日(项目开始日期)
  • 结束日期:2011年12月31日(项目结束日期)
  • 频率:每月(报告频率,其他值为 每年,每周,每周)

活动:

  • 在计算机上安装操作系统
  • 在服务器计算机上安装SQL Server

指定目标:

  • 在机器上安装操作系统:100

  • 在服务器计算机上安装SQL Server:10

位置:

  • 伦敦
  • 纽约
  • 巴黎

现在会有 12个报告(每个月一个),这些位置的下属必须每月报告一次。分配的目标是每个月。

我对这一切的设计感到困惑。

Q1 - 我应该提前为每个月份和位置生成报告并保存在数据库中吗?当用户登录系统报告时,他将看到12个报告(因为频率是每月,如果频率是每周一次,那么52个报告)并打开报告来报告他的活动。

Q2 - 我应该只在一个表中保存已分配的目标,在另一个表中保存位置,在第三个表中报告频率,以及在特定月份和特定位置的指定目标的下属报告时保存此数据到其他一些表并链接这些数据。

Q3 - 还有其他想法吗?

Q4 - 管理员还可以更改报告频率。如果下属报告目标然后如何改变这一切,我应该如何处理呢?

感谢。

注意: 如果这个问题不适合Stackoverflow,请将此(或告诉我)移动到合适的stackexchange站点。

2 个答案:

答案 0 :(得分:0)

Kashif,您需要在表格下方

1- 项目 ---列:(开始日期,结束日期,报告频率)等

2- ProjectDetails 列:(ProjectId,LocationId)等

3- 地点

4- SubOrdinates

5- 活动

5- 任务 ---列:(ProjectDetailId,SubordinateId,ActivityId)等

6- 报告 - 列:(ProjectDetailId,SubordinateId,ReportDate,Year,Month,Week,ReportData)

在下属向Manager报告之前,Reports表将没有数据。当他报告时,将在此表中输入一个条目。

您可以根据Projects.ReportFrequency为用户在登录系统时生成报告列表。你需要一个智能逻辑。

答案 1 :(得分:0)

Q1:我会将“报告频率”存储为Target的一个属性。报告将记录在数据库中,如果,何时以及由下属生成。确保/执行其交付不在单纯的数据库结构范围内。

Q2:什么是位置属性:Project,ProjectAttribute,Target或其他?把它存放在那里。您可能还有一个单独的Locations表,特别是如果有特定于位置的属性。

问题3:有些问题:属性和目标之间是否存在关联?有一个经理,还是几个经理?如果只有一个,那么我认为你不需要为他/她建模;如果有几个,那么你必须确定并构建经理和下属之间的关系。 (经理可以是另一个经理的下属吗?)下属按经理分配给项目,并由经理在这些项目中分配目标。是否可以在没有任何当前分配的目标的情况下为项目分配(关联)下属?反过来怎么样?

问题4:按照Q1的规定,在提交时记录报告,如果管理员没有达到预期的时间表,则让管理员咀嚼下属。问题:如果管理员更改报告频率,您是否需要跟踪任何给定时间点的频率? (可能不是,但你永远不知道。)