我们是否应该将单向的一对多关系分解为 JoinTable
Should we break One to Many Relation which is unidirectional into a JoinTable
我目前正在开发一个有 2 个 Table 的应用程序。用户和团队。用户将 UserId 作为 PK 和 UserPassword。
团队 table 将 TeamId 作为 PK 和 TeamName。
最初我只有一个 table,其中有 UserId、UserPassword 和 TeamId,但有人向我指出当前的设计未规范化。因此,我不得不将 table 分解为用户、团队以及名为 User_Team 的加入 Table,其中包含作为来自用户 table 的 PK 的 UserId 和作为来自团队 [=] 的 PK 的 TeamId 28=].
约束条件
一个用户只能在 1 个团队中,1 个团队可以有多个用户。
所以根据我的理解,这是一个从团队到用户端的OneToMany。
我将 UserId 和 TeamId 一起作为复合键,并在 JoinTable(User_Team) 中使其唯一,这样 1 个用户就不能在多个团队中。
我的问题是,是否有必要将 table 单独拆分为团队 table。我不能将所有 3 个字段都放在一个 table 中吗?有人能解释一下它是如何不规范化的吗?另外让我知道在这种情况下是否需要 JoinTable。
不,OneToMany 关系不需要 JoinTable。只需在您的用户 table 上添加一个 teamId
字段,您就可以开始了。
根据经验:
- OneToOne: 有一个table
- OneToMany:两个 table,"many" 一侧(
User
为您的情况)有一个外键
- ManyToMany:有一个 JoinTable
我目前正在开发一个有 2 个 Table 的应用程序。用户和团队。用户将 UserId 作为 PK 和 UserPassword。
团队 table 将 TeamId 作为 PK 和 TeamName。
最初我只有一个 table,其中有 UserId、UserPassword 和 TeamId,但有人向我指出当前的设计未规范化。因此,我不得不将 table 分解为用户、团队以及名为 User_Team 的加入 Table,其中包含作为来自用户 table 的 PK 的 UserId 和作为来自团队 [=] 的 PK 的 TeamId 28=].
约束条件 一个用户只能在 1 个团队中,1 个团队可以有多个用户。
所以根据我的理解,这是一个从团队到用户端的OneToMany。
我将 UserId 和 TeamId 一起作为复合键,并在 JoinTable(User_Team) 中使其唯一,这样 1 个用户就不能在多个团队中。
我的问题是,是否有必要将 table 单独拆分为团队 table。我不能将所有 3 个字段都放在一个 table 中吗?有人能解释一下它是如何不规范化的吗?另外让我知道在这种情况下是否需要 JoinTable。
不,OneToMany 关系不需要 JoinTable。只需在您的用户 table 上添加一个 teamId
字段,您就可以开始了。
根据经验:
- OneToOne: 有一个table
- OneToMany:两个 table,"many" 一侧(
User
为您的情况)有一个外键 - ManyToMany:有一个 JoinTable