时间表数据库架构

时间:2012-05-16 19:47:50

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

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

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

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

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

这是逻辑架构设计。

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

PROJECT

PK_PROJECT_ID, NAME

PROJECT_ACTIVITIES

PK_PA_ID, 描述, FK_ACTIVITY_ID, FK_PROJECT_ID

活动

PK_ACTIVITY_ID,
说明

TIME_SHEET

PKID,
EMP_ID,
FK_PK_PA_ID,
DATE,
HOURS

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

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

2 个答案:

答案 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之间(不重叠)。