0

我正在寻找存储此信息的最佳方式。并非每门课程都有到期日。

到目前为止我发现的最简单的方法是:

tblEmployee
-----------
ID (pk)
Expiry1
Expiry2

tblCourseCatalog
----------------
CourseID(pk)
Name

对于每一门课程,都会创建tblCourseCatalog一个新课程来匹配。ExpirytblEmployeetblCourseCatalog.CourseID

我试图拥有:

tblCourseExpiryDates
--------------------
EmployeeID (pk) 1:1 with tblEmployee.ID
FirstAid
UnderWaterBasketWeaving

每当向 中添加新课程时,都会添加tblCourseCatalog一个新列以tblCourseExpiryDates进行匹配。尝试查询某些信息时,这变得很棘手。我目前的方式(Expiryin tblEmployee)是否改变了很多事情tblCourseExpiryDatestblCourseCatalog.CourseID=2对我来说,如果( UnderWaterBasketWeaving) 没有过期,拥有 Expiry2 列是一种浪费。

4

1 回答 1

0

存储此类内容的标准规范化方法是创建一个表,其中每一行只查看一个课程员工组合,保存特定于该组合的任何数据,通常称为 EmployeeCourse(或 CourseEmployee)

EmployeeID
CourseID
ExpiryDate

您只将记录放在此表中您实际具有有效日期的位置。对于没有日期的课程,没有员工会获得记录。如果给定的员工从未完成过课程,他们将不会被记录。如果要删除日期,可以删除记录,或者只删除日期但保留记录(我可能会删除它)。如果您想添加一门新课程,您只需将一条记录放入课程表中即可完成 - 您无需更改任何其他内容。

当您需要查找记录时,您需要通过外部连接连接到表,这样您就可以获取主表中没有 CourseEmployee 记录的任何记录。

这种标准化数据的缺点是,它确实使得在一行输出中获取员工的所有到期日期列表变得更加困难——这就是数据透视表的用武之地(我不确定它们在访问中是如何工作的)。

如果您想了解更多相关信息,请查看数据库规范化。

于 2018-03-15T00:32:29.510 回答