2013-02-18 145 views
0

我在製作一個測驗程序。在測驗中,我有很多參與者,但另一方面參與者可以輸入很多測驗(隨着時間的推移)。所以我用鏈接表克服了這種多對多的關係。到目前爲止,我可以理解..現在爲我的困難:參與者可以是一個組或一個單一的球員。通過多個錶鏈接多對多關係的查詢

所以測驗有一個參與者(一個鏈接表),這參與者要麼其中有幾個人,或該參與者是球員,只有一個單人組。

table Quiz : PrimaryKey = quiz_id, (name, date,...) 
table QuizParticipant : PrimaryKey = quiz_participant_id, quiz_id 
table ParticipantGroup : PrimaryKey = quiz_participant_id, group_id 
table participantPlayer : PrimaryKey = quiz_participant_id, person_id 

這個問題對我來說是:我怎麼查詢測驗的所有參與者通過quiz_id,最好按類型(組或播放器)對它們進行排序?

訣竅,谷歌這個東西是有用的,以及:)

回答

0

這是一個有趣的設計決定。你繼續的方式可以塑造你的整個應用程序。

我的建議是記錄每次參加參與者的參與者類型。這將是「GROUP」或「PLAYER」,並將定義ParticipantID是指GroupID還是PlayerID。這最終將導致最乾淨的數據庫設計和應用程序邏輯。

所以,你的表是這樣的:

測驗(QuizID,QuizName) QuizParticipation(ParticipationID,參與方,ParticipantID) 集團(組ID,組名) GroupMembers(組ID,PlayerID) 播放器(PlayerID,名稱)

您可能需要進行自定義約束,以確保無法在QuizParticipation表的ParticipantID和ParticipationType組合字段中創建重複項,或仔細管理主鍵的生成。

0

我的建議是你的測驗始終鏈接到組(多對多)和治療單球員一組1.所以,你的組連接到播放器(也多對多)

0

如果一個人可以屬於多個組和一組可以有很多人,這是另一種多對多的關係。由於您知道如何創建這些鏈接表,請爲此關係創建一個。