0

我正在为我的办公室创建一个数据库。我们有大约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

这些类列在它们自己的表中,每个类列都从中提取。qual date refresher 将是查询中基于上次更新日期的计算列。
有没有办法将一个人有资格参加的所有课程放在一个列中,并在另一列中为每个特定课程重新获得资格的相关日期?

4

2 回答 2

0

我认为,如果每个主题都有一张表格,并在每个主题下注册人名并注明日期,那将不会那么混乱。

此外,它可能有助于整理表格中的不完整信息,例如通过考试的确切日期,你可以做月份和年份,或者只是年份?如果 lee 的方式是 2 年,那可能更有意义 - 也使 qulified 计算更容易。

如果您按主题进行搜索,该查询可能会起作用吗?或者谁有资格在今年和明年做什么科目。

顺便说一句,这不是你会在这里问的问题 - 但希望答案有所帮助。

于 2013-04-08T15:54:31.347 回答
0

在设计数据库时,每当您发现自己添加了名称如Class1,的列时Class2Class3您应该立即停下来考虑将这些列放在一个单独的子表中是否更有意义,该子表称为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'). 呸。

所以,省去一些麻烦(真的很麻烦)并创建一个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
...
于 2013-04-08T16:23:14.967 回答