簡體   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