2

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

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

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

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

这是逻辑模式设计。

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

项目

PK_PROJECT_ID,名称

PROJECT_ACTIVITIES

PK_PA_ID、描述、FK_ACTIVITY_ID、FK_PROJECT_ID

活动

PK_ACTIVITY_ID,
描述

时间表

PKID、
EMP_ID、
FK_PK_PA_ID、
日期、
小时

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

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

4

2 回答 2

0

我假设一个Activity只能指一个Project

如果是这样,你真的不需要Project_Activity表,只需将表的外键放在Project表中即可Activity

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

于 2012-05-16T19:58:17.003 回答
0

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

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

PKID,
EMP_ID,
FK_PK_PA_ID,
STARTDATE,
ENDDATE

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

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

于 2012-05-16T20:03:24.607 回答