运动会数据库设计(在MySQL中)

时间:2009-01-03 16:00:47

标签: mysql

我正在尝试为运动会设计一个数据库。

我觉得我有一些好东西,但我不太确定。

情况如下。

有会议,几个体育俱乐部将分别派出一些运动员:1人或以上。 运动员可以参加一个以上的活动。 有几个事件:马拉松,杆子弹,矛投掷,......

每场比赛都有第一轮,四分之一决赛,半决赛和决赛。 每个单独的活动都有一名官员负责记录数据,无论是时间,高度还是距离。

所以基本上,这里有与运动员和赛事的N:M关系。 1运动员可以参加很多比赛,有很多比赛,可以由一名运动员输入。

我认为俱乐部和运动员会有同样的事情,但我只是在运动员牌桌上放了一个'club_id'字段来指代来自哪个俱乐部。

我拥有的是:

Table Clubs:
club_id int primary key auto_increment not null,
club_name varchar(50) not null

Table Athletes:
athlete_id int primary key auto_increment not null,
athlete_name varchar(40) not null,
athlete_club int not null,
index (athlete_club),
foreign key (athlete_club) references Clubs(club_id)

Table Events:
event_id int primary key auto_increment not null, (if there's a new round, it's a new event too)
event_name varchar(40) not null,
official_id int not null,
round enum('FIRST','QUARTER','HALF','FINAL')

Table Participations:
athlete_id int not null,
event_id int not null,
primary key (athlete_id,event_id),
index (athlete_id),
index (event_id),
foreign key (athlete_id) references Athletes(athlete_id),
foreign key (event_id) references Events(event_id)

我认为基本上就是这样。 缺少的是将系列连接到结果的方法。 所以我认为应该有另一种N:M关系,因为运动员可以进入决赛或者介于两者之间的某个位置,但是他们每轮比赛都需要记下来。

因此,例如,我需要能够进行一个查询,这个查询基本上给了我'所有运动员的名字,在某一轮中某个赛事的时间比5分钟更快'

或者一名运动员在一次比赛中所做的回合列表,或所有参加某一轮比赛的运动员名单......

我不太确定如何添加它。

2 个答案:

答案 0 :(得分:2)

将结果字段添加到参与表

答案 1 :(得分:1)

您的要求更多的是应用程序问题,而不是数据库问题。您的数据库设计看起来很适合您的需求。您现在需要做的是编写应用程序以查询数据库。一些SELECTS和JOINS,你应该没有问题!