访问DB一个ID,多个类和相关日期

时间:2013-04-08 15:43:03

标签: ms-access database-design

我正在为我的办公室创建一个数据库。我们有大约200名员工。每位员工在被录用后2年内必须完成12门课程中的至少1门课程(每门课程的完成/资格日期不同,有些人已经在这里工作20年,有些人只有1年)才能获得资格。有些人已完成多门课程。每个课程都必须定期刷新(每个刷新周期不同,并根据最后的复习日期)。我在表的布局上遇到了麻烦。这是我的想法,但我想看看是否有一种不那么繁忙的方式来布局数据。我希望能够运行一个查询,告诉我哪个人已经完成了什么类(所以它必须查看所有3个类列)。我也想知道他们的资格何时失效,或者即将到来。到目前为止,我已经创建了一个员工数据表,如下表所示。

ID Name    Class1    Class2    Class3  QualDt-Cl1 QualDt-Cl2 QualDt-Cl3  LstRequal1 ...
1  Bob      Art      Spanish           3/17/1989   9/12/2010              3/8/2012
2  Sally    Math                       8/31/2012
3  George   Physics            History 2/6/2005               7/6/1996
4  Casey    History                    6/8/2000 
5  Joe      English  Sports    Physics 12/10/1993  10/15/2001 4/22/2006

这些类列在他们自己的表中,每个类列都从中拉出来。根据最后的复习日期,合格日期复习将是查询中的计算列 有没有办法将一个人有资格的所有课程放在一个专栏中,并在另一栏中为每个特定的课程重新定位相关的日期?

2 个答案:

答案 0 :(得分:0)

我认为如果每个科目都有一张桌子,并且在每个科目下注明人名,并且日期已经过去,那就不那么令人困惑了。

也可能有助于将表格从不合格的信息中删除,例如考试通过的确切日期,你可以做一个月,一年或者只是一年?如果李的方式是2年可能更有意义 - 也使得计算更容易。

如果您搜索每个主题,查询会有效吗?或谁有资格做本年度和下一年的主题。

顺便提一下,这不是一个问题,但希望答案有所帮助。

答案 1 :(得分:0)

在设计数据库时,每当您发现自己添加名称为Class1Class2Class3的列时,您应该立即停下来思考是否更有意义名为Classes的单独子表中的列,其中包含与父项的链接(关系)。这有几个原因,包括:

  1. 当有人选择第四门课时会发生什么?说“永远不会发生”会忽略这样一个事实:“从来就不是非常长时间”,我们都不能预测未来。

  2. 当检查某人是否参加了课程时,你真的需要检查(Class1 IS NULL) OR (Class2 IS NULL) OR (Class3 IS NULL)并且真的单调乏味,这也意味着如果你必须添加Class4,然后必须更正所有SQL代码。

  3. 同样,如果你想找一个服用“心肺复苏术”的人,你必须寻找(Class1 = 'CPR') OR (Class2 = 'CPR') OR (Class3 = 'CPR')的人。呸。

  4. 所以,省去一些麻烦(真的很麻烦)并创建一个Classes表:

    ID
    ClassName
    QualDate
    (etc. )
    

    ...其中ID是主表中的ID号(所谓的“外键”)。从您的示例数据中,您的Classes表格如下所示:

    ID  ClassName   QualDate
    1   Art         3/17/1989
    1   Spanish     9/12/2010
    2   Math        8/31/2012
    3   Physics     2/6/2005
    3   History     7/6/1996
    ...