我有一些表可以从多对多表中受益。例如团队表。
团队成员可以在团队中持有多个“职位”,所有职位都列在职位数据库表中。之前持有的仓位也存放了,我有一个单独的表,所以我有
很简单,但现在问题在于团队成员可以属于许多团队。 我已经有一个team_to_member查找表。 现在问题是如何将一个职位与团队联系起来?一名成员可能是一个团队的团队领导,目前是另一个团队的团队电台人员和新闻官。我如何只是提取每个成员的信息以显示他当前的位置,以及他过去的历史,包括过去的球队。 我是否需要添加一个position_to团队表并以某种方式交叉引用,或者我可以将团队添加到成员到职位表?
这非常令人困惑,这种正常化。
答案 0 :(得分:6)
是的,多对多联结表可以有其他属性(列)。
例如,如果有一个名为PassengerFlight表的表由PassengerID和FlightID键入,则可能会有第三列显示给定航班上给定乘客的状态。两种不同的状态可能是“确认”和“等待列出”,每种状态都以某种方式编码。
此外,可能存在三元关系,涉及三个实体的关系,而不仅仅是两个。这些表将有三个外键,它们是关系表的主键。
答案 1 :(得分:5)
拥有一个包含
列的TeamPositionMember表是完全合法的Team_Id
Position_Code
Member_Id
Start_Date
End_Date NULLABLE
如果需要,可以使用主键的代理ID列;否则它是一个3场复合主键。 (无论如何,你会想要一个唯一性约束。)
通过这种安排,您可以拥有一组任何职位。团队每个职位可以有零个或多个人。一个人可以为零个或多个团队填补零个或多个职位。
编辑:
如果您想要日期,只需按上图所示进行修改,并将Start_Date添加到PK,以允许同一个人在不同时间保持相同的位置。
答案 2 :(得分:4)
我的第一个念头:
为您的多对多团队/成员表提供ID列。每个团队到成员的关系现在都有一个ID。
然后为团队成员关系创建多对多链接位置。
这样,团队可以拥有多个成员,成员可以拥有多个团队,成员可以在每个团队中拥有多个职位。
现在一切都很好而干,所有连接起来似乎都有效。这对其他人来说听起来不错吗?
答案 3 :(得分:0)
听起来你现在需要一个多对多的职位来参加球队。
答案 4 :(得分:0)
你的team_to_member表确实可以有一个额外的列position_id来描述(或者在这种情况下指向)该成员在该团队中的位置。
答案 5 :(得分:0)
摆脱member_to_previous_position
表。只需使用member_to_positions
并拥有以下列:
MemberToPositionID (autoincrement OK only)
MemberID
PositionID
StartDate
EndDate
然后找到当前位置,你可以:
select *
from member_to_positions
where EndDate is null