在设计数据库时需要指导

时间:2012-07-04 11:01:42

标签: database database-design

我正在尝试设计一个让运动队更容易组织比赛的网站:

用户注册并加入团队。会员可以浏览可用的团队并向他们发送私人消息以组织比赛。比赛结束后,团队可以在彼此的页面上发表评论,提及他们的技能,体育精神等。以下是我想象的数据库:

用户

* UserID
* Username
* email

团队

* TeamID
* TeamName
* OtherInfo

查看

* FromID
* ToID
* Date
* Comments

消息

* FromID
* ToID
* Content

UserTeam (联结表)

* pk (UserID, TeamID)

我不太确定如何对评论和消息进行建模。评论有一个from和to to field,所以我不能像在多对多情况下那样通过使用联结表来规范化设计。

注意:消息可由会员和团队发送,并可由会员或团队接收。

1 个答案:

答案 0 :(得分:1)

不确定问题是什么,但如果您的消息(和评论?)可以由团队或成员发送和接收,则需要区分消息目的。添加tinyint或其他一些列,指示个人/团队是否向某个人/团队发送消息(以便您的查询知道使用相关的FromIDToID表)。

团队规模怎么样?你的意思是:“会员可以浏览可用的团队并发送私信来组织比赛。”?所有团队的规模是否相同,人们可以自由地从一个团队跳到另一个团队?如果是这样,您需要跟踪团队成员以及是否需要其他成员。您可以在Team表或UserTeam联结表中执行此操作。

我也猜测你的网站需要登录功能。区分基本团队成员和团队的官方代表可能是个好主意。因此,只有官方成员(或其他任何成员)能够在团队之间发送(和接收!)消息。 (如果你的意思是实现一个简单的留言板类型的解决方案,这一点可能毫无用处。)


编辑。标准化的选项。

我在您当前的架构中没有看到任何错误,但您可以将Review和Message表组合在一起:

<强>通信

  • MsgID(PK)
  • FromID(FK到用户,非空)
  • AnswerTo(FK to MsgID,NULL)
  • 时间戳
  • 评论/消息(tinyint [通信类型],非空)
  • 文字(非空)

审核/消息列还可以区分人员和团队之间的消息,因此FromID也可以是FK到TeamID。