2012-07-04 46 views
0

我試圖設計一個wesite將允許運動隊更輕鬆地組織比賽需要指導:在設計數據庫

用戶註冊並加入一個團隊。會員可以瀏覽可用的團隊並向他們發送私人消息以組織比賽。一場比賽完成後,團隊可以張貼在彼此的頁面意見提他們的技能,體育等。這裏是我想象中的數據庫看起來像:

用戶

* UserID 
* Username 
* email 

團隊

* TeamID 
* TeamName 
* OtherInfo 

評論

* FromID 
* ToID 
* Date 
* Comments 

消息

* FromID 
* ToID 
* Content 

UserTeam(結表)

* pk (UserID, TeamID) 

我不太知道如何評論和消息建模。評論有一個from和to field,所以我不能像在多對多的情況下那樣通過使用聯結表來標準化設計。

注意:消息可以由會員或團隊發送,可以由會員或團隊收到。

+0

難道你不需要以某種方式將用戶鏈接到團隊? – Dan

+0

UserTeam(聯結表)不需要自己的PK。 '(UserID,TeamID)'將是該表的PK。 –

+0

@ a_horse_with_no_name,是的,這是我的意圖。爲了清晰起見,我會對其進行編輯 –

回答

1

不確定問題是什麼,但如果您的消息(和評論?)可以由團隊或成員發送和接收,則需要區分消息目的。添加一個tinyint或某個其他列,指示消息是否由某個人/團隊指向某個人/團隊(因此您的查詢知道使用相關表的FromIDToID)。

對於團隊規模以及您的意思是什麼?「會員可以瀏覽可用的團隊並向他們發送私人消息以組織比賽。」?所有球隊的規模是否相同,並且人們可以自由跳過團隊?如果是這樣,你需要跟蹤團隊的成員,是否需要額外的成員。您可以在Team表或UserTeam聯結表中執行此操作。

我也猜你的網站需要登錄功能。區分基本團隊成員和團隊的官方代表可能是一個好主意。所以只有官方成員(或任何人)能夠在團隊之間發送(並接收!)消息。 (如果你的意思是實現一個簡單的留言本類型的解決方案,這一點可能是沒用的。)


編輯。一個正常化的選項。

我看不出有什麼錯在你目前的架構,但你可以結合審查和信息表如下:

通信

  • 的MsgID(PK)
  • FromID(FK到用戶,NOT NULL)
  • AnswerTo(FK to MsgID,NULL)
  • 時間戳
  • 回顧/消息(TINYINT [通信是什麼類型],NOT NULL)
  • 文本(NOT NULL)

回顧/消息列也可以分化者和團隊之間的消息,所以FromID可能是FK到TeamID也是如此。

+0

@HenryHenrinson更新了我的答案。如果答案有用或無用,請隨時發表評論。 –