【问题标题】:How to design this one to many database?如何设计这个一对多的数据库?
【发布时间】:2018-08-06 19:15:35
【问题描述】:

我一直在阅读“一对多”数据库,但我很难理解在我的案例中实施解决方案的最佳方法。

我想要一个 MySQL 数据库来记录哪些员工在工作中阅读了某些培训手册。

所以我有一张员工表。我有一张讲义表。

我想记录员工是否点击说他们已经阅读了讲义。

我的 Employee 表有 ID、Name、Email。

我的讲义表有 ID、标题

我最好在 Employee 表中添加一个字段,该字段将包含“分发 ID”列表,以显示他们已阅读哪些分发?

我需要能够轻松搜索以显示有多少百分比的员工阅读了特定的讲义,我认为我的方法会使这变得非常困难?

我不能在 Employee 表上设置单独的字段,例如 Handout1、Handout2 等,因为会定期添加新的讲义。

我确定这一定是一个常见问题,所以想知道是否有人可以指导我找到最佳解决方案?

谢谢

【问题讨论】:

  • associative entities/junction tables/bridge tables(名字很多)
  • @Ben 感谢您的提醒。现在只是阅读它。干杯:-)

标签: mysql one-to-many


【解决方案1】:

我认为您需要一个桥接表来记录员工和分发记录之间的关系。像这样的:

Employee_Handout (ID, EmployeeID, HandoutID)

每次发布​​新的讲义时,您都会在讲义表中插入一条记录。然后,当给定员工阅读该讲义时,您将在Employee_Handout 表中插入一条新记录。您可能不需要保留非读取,因为它们很容易被检测为桥表中不存在。

此列的主键可能是(EmployeeID, HandoutID),假设您只需要一条与阅读给定讲义的员工相关的记录。这也意味着给定的员工/讲义关系只能保留一次。

【讨论】:

  • 他需要一个UNIQUE(EmployeeID, HandoudID),所以没有重复。
  • @LukasS 最好将(EmployeeID, HandoutID) 设为主键。
  • 我还是会选择 INT PK,这样更容易。通常我所做的只是将连接的多个列进行哈希处理,这些列应该保持唯一并将其用作 PK。
  • @TimBiegeleisen 感谢您的出色回答。感谢您花时间回答我的问题。谢谢:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 2013-07-09
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多