我的公司正在使用旧的时间表应用程序,我将在asp.net中重写它。
还有其他表可以链接到新的Timesheet表,例如employee表,但我主要关注的是Project和Project_Activity表。
在当前系统中,有一个项目和一个活动表,它们分别链接到时间表表格,用户必须花费大量时间选择他们为特定项目工作的活动代码。
我想出了新的想法;在开始此项目之前,项目经理必须填写项目模板并将所有活动代码链接到一个项目。这样,用户只需选择项目,它就会自动为它们带来相关代码。
这是逻辑架构设计。
我想知道这个设计是否可行?是否可以将Project_Activity表与时间表链接?
PK_PROJECT_ID, NAME
PK_PA_ID, 描述, FK_ACTIVITY_ID, FK_PROJECT_ID
PK_ACTIVITY_ID,
说明
PKID,
EMP_ID,
FK_PK_PA_ID,
DATE,
HOURS
PROJECT --> PROJECT_ACTIVITIES <-- ACTIVITIES
|
|
|____TIME_SHEET
注意:时间表表格中有许多其他字段不属于此问题。
答案 0 :(得分:0)
我假设Activity
只能引用一个Project
?
如果是这样,您实际上并不需要Project_Activity
表,只需将外键放入Project
表中的Activity
表。
如果Activity
可以引用多个Project
,那么您的架构很好,您已经有效地分解了Project
和{{1}之间的多对多关系}。 :)
答案 1 :(得分:0)
一般情况下架构都可以。我不会使用你的命名约定,因为我觉得很难阅读。使用完整的单词没有坏处,但这是暂时的。
我要改变的是Timesheet表。这样做:
PKID,
EMP_ID,
FK_PK_PA_ID,
STARTDATE,
ENDDATE
这样您就可以更轻松地查询在给定时间内谁在做什么。您还可以允许记录具有NULL ENDDATE以显示当前正在处理的活动。
我会添加一个触发器,以确保对于相同的EMP_ID,记录的STARTDATE和ENDDATE永远不会介于其他记录的STARTDATE和ENDDATE之间(不重叠)。