繁体   English   中英

多对多联接表可以有两列以上吗?

[英]Can a many-to-many join table have more than two columns?

我有一些表可以从多对多表中受益。 例如团队表。

团队成员可以在团队中持有多个“职位”,所有职位都列在职位数据库表中。 以前持有的头寸也存放了这个我有一个单独的表,所以我有

  • 成员表(包含团队详细信息)
  • 职位表(包含职位)
  • member_to_positions表(成员的id和位置的id)
  • member_to_previous_positions(成员的id和位置的id)

很简单,但现在的关键是团队成员可以属于许多团队。 我已经有一个team_to_member查找表。 现在问题是如何将一个职位与团队联系起来? 一名成员可能是一个团队的团队领导,目前是另一个团队的团队电台人员和新闻官。 我如何只是提取每个成员的信息以显示他当前的位置,以及他过去的历史,包括过去的球队。 我是否需要添加一个position_to团队表并以某种方式交叉引用,或者我可以将团队添加到成员到职位表?

一切都非常令人困惑,这种正常化。

是的,多对多联结表可以具有其他属性(列)。

例如,如果有一个名为PassengerFlight表的表由PassengerID和FlightID键控,则可能会有第三列显示给定航班上给定乘客的状态。 两种不同的状态可能被“确认”和“等待列出”,每种状态都以某种方式编码。

此外,可能存在三元关系,涉及三个实体的关系,而不仅仅是两个。 这些表将有三个外键,它们是关系表的主键。

拥有一个包含列的TeamPositionMember表是完全合法的

Team_Id
Position_Code
Member_Id
Start_Date
End_Date NULLABLE

如果您愿意,还可以使用主键的代理ID列; 否则它是一个3场复合主键。 (无论如何,你会想要一个唯一性约束。)

通过这种安排,您可以拥有一组任何职位。 团队每个职位可以有零个或多个人。 一个人可以为零个或多个团队填补零个或多个职位。

编辑:

如果您想要日期,只需按上图所示进行修改,并将Start_Date添加到PK,以允许同一个人在不同时间保持相同的位置。

我的第一个想法:

为您的多对多团队/成员表提供ID列。 每个团队到成员的关系现在都有一个ID。

然后为团队成员关系创建多对多链接位置。

这样,团队可以拥有多个成员,成员可以拥有多个团队,成员可以在每个团队中拥有多个职位。

现在一切都很好干,所有连接似乎都有效。 这对其他人来说听起来不错吗?

听起来你现在需要一个多对多的职位来参加球队的比赛。

您的team_to_member表确实可以有一个额外的列position_id来描述(或者在这种情况下指向)该成员在该团队中的位置。

摆脱member_to_previous_position表。 只需使用member_to_positions并拥有以下列:

MemberToPositionID (autoincrement OK only)
MemberID
PositionID
StartDate
EndDate

然后找到当前位置,你做:

select * 
from member_to_positions 
where EndDate is null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM