【问题标题】:Timesheet Database schema时间表数据库架构
【发布时间】:2012-05-16 19:47:49
【问题描述】:

我的公司正在使用一个旧的时间表应用程序,我将在 asp.net 中重写它。

还有其他表可以链接到新的 Timesheet 表,例如员工表,但我主要关心的是 Project 和 Project_Activity 表。

在当前系统中,有一个单独的项目和一个活动表,它们分别链接到时间表表,用户必须花费大量时间来选择他们为特定项目工作的活动代码。

我想出了一个新主意;在开始这个项目之前,项目经理必须填写一个项目模板并将所有活动代码与一个项目链接起来。这样用户只需选择项目,它会自动为他们带来关联代码。

这是逻辑架构设计。

我想知道这种设计是否可行?是否可以将 Project_Activity 表与时间表链接?

项目

PK_PROJECT_ID, 姓名

PROJECT_ACTIVITIES

PK_PA_ID, 描述, FK_ACTIVITY_ID, FK_PROJECT_ID

活动

PK_ACTIVITY_ID,
说明

TIME_SHEET

PKID,
EMP_ID,
FK_PK_PA_ID,
日期,
小时

    PROJECT -->  PROJECT_ACTIVITIES <-- ACTIVITIES
                    |
                    |
                    |____TIME_SHEET

注意:时间表表有许多其他字段不属于此问题。

【问题讨论】:

标签: sql database vb.net database-design schema


【解决方案1】:

我假设Activity 只能引用一个Project

如果是这样,您实际上并不需要Project_Activity 表,只需将Project 表的外键放在Activity 表中即可。

如果一个Activity 可以引用多个Project,那么你的架构很好,你已经有效地分解了ProjectActivity 之间的多对多关系。 :)

【讨论】:

  • 活动表中的PK_ACTIVITY_ID(活动代码)可以在不同的项目中使用。
  • 啊,好吧,那么你的设计非常好:)除了我猜的那些列名:)
  • 只是想确认 PK_PA_ID 应该设置为 TimeSheet 表中的外键而不是 FK_PROJECT_ID?
  • 如果 Timesheets 引用活动和项目,那么它应该是 PK_PA_ID 作为外键。但是,如果时间表仅与项目相关并且每个项目只有一个时间表,则使用 FK_PROJECT_ID
  • 会有多个用户在一个项目上工作,他们都将填写自己的时间表。一个时间表可以有多个项目,因此在时间表页面上,所有项目都会有一个列表,单击选定的项目将显示该项目的所有活动列表。第一个列表可以从 project_activities 表(不同的项目)中填充,第二个列表也可以使用 group by 子句从同一个表中填充。好听吗?
【解决方案2】:

一般来说,架构是可以的。我不会使用您的命名约定,因为我发现它很难阅读。使用完整的单词没有坏处,但这是一个旁白。

我要更改的是时间表表。改为这样做:

PKID,
EMP_ID,
FK_PK_PA_ID,
STARTDATE,
ENDDATE

这将使您能够更轻松地查询在给定时间内谁在做什么。您还可以允许记录具有 NULL ENDDATE 以显示当前正在处理的活动。

我会添加一个触发器以确保对于相同的 EMP_ID,记录的 STARTDATE 和 ENDDATE 永远不会介于其他记录的 STARTDATE 和 ENDDATE 之间(没有重叠)。

【讨论】:

  • 嗨,我使用这些命名约定是为了便于阅读。时间表表有许多其他字段不属于我的问题。
  • 开始和结束日期将从 Project_Activity 表中提取。有可能两个人在同一个项目中从事相同的活动。此时间表应用程序与普通应用程序完全不同,因为一个项目需要 2-3 年才能完成,并且该项目将有 100 个活动。
  • @user1263981 注意我说的是同一个EMP_ID
猜你喜欢
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多