首页 > 解决方案 > 我们是否应该将单向的一对多关系分解为 JoinTable

问题描述

我目前正在开发一个有 2 个表的应用程序。用户和团队。用户有 UserId 作为 PK 和 UserPassword。

Team 表有 TeamId 作为 PK 和 TeamName。

最初我只有一个表,其中有 UserId、UserPassword 和 TeamId,但有人向我指出当前的设计没有标准化。因此,我不得不将表分解为 User、Team 以及一个名为 User_Team 的 Join Table,其中包含 User 表中的 UserId 作为 PK 和 TeamId 作为 Team 表中的 PK。

约束 一个用户只能在 1 个团队中,而 1 个团队可以有多个用户。

因此,据我了解,这是从团队到用户端的 OneToMany。

我已将 UserId 和 TeamId 一起作为复合键,并使其在 JoinTable(User_Team) 中唯一,因此 1 个用户不能在多个团队中。

我的疑问是是否有必要将表单独分解为 Team 表。我不能只在一个表中包含所有 3 个字段。有人可以解释一下它是如何不规范化的。也让我知道在这种情况下是否需要 JoinTable。

标签: sqldatabasehibernatedatabase-designdatabase-diagram

解决方案


不,OneToMany 关系不需要 JoinTable。只需teamId在您的用户表上有一个字段,您就可以开始了。

根据经验:

  • OneToOne : 有一张桌子
  • OneToMany:两个表,“多”侧(User对于您的情况)有一个外键
  • ManyToMany : 有一个 JoinTable

推荐阅读