我正在试着为一个运动会设计一个数据库。
我想我得到了一些好东西,但我不是很确定。
情况如下。
有会议时,几家体育俱乐部将各派出一名运动员:1名或更多。运动员可以参加多个项目的比赛。有几个项目:马拉松,撑杆跳高,投掷长枪,...
每项赛事都有首轮、四分之一决赛、半决赛和决赛。每个单独的活动都有一名官员负责记录数据,无论是时间、高度还是距离。
所以基本上,这里有一种N:M关系,与运动员和项目。一名运动员可以参加多个项目,并且有多个项目,可以由多名运动员参加。
我以为俱乐部和运动员也会有同样的情况,但我只是在运动员表中添加了一个字段'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分钟的所有运动员的名字”。
或者一个运动员在一个项目中完成的轮次的列表,或者到达某一轮的所有运动员的列表……
我不太确定如何添加这个。
发布于 2009-01-03 16:27:11
将结果字段添加到participation表
发布于 2009-01-03 16:31:25
你问的问题更像是一个应用程序问题,而不是一个数据库问题。您的DB设计看起来可以满足您的需求。您现在需要做的是编写应用程序来查询数据库。几个SELECTS和JOINS,你应该没有问题!
https://stackoverflow.com/questions/409258
复制相似问题