2

我正在为客户创建一个划船报告和统计系统,目前我的结构类似于以下内容:

-----------------------------------------------------------------------------
| ID | Team     | Coaches    | Rowers     | Event     | Position | Time     |
-----------------------------------------------------------------------------
| 18 | TeamName | CoachName1 | RowerName1 | EventName | 1        | 01:32:34 |
|    |          | CoachName2 | RowerName2 |           |          |          |
|    |          |            | RowerName3 |           |          |          |
|    |          |            | RowerName4 |           |          |          |
-----------------------------------------------------------------------------

这是一个示例数据行,但我想将其扩展到 Rowers 表和 Coaches 表等,但我不知道如何最好地将其链接回 Entries 表,这就是它。

有没有人有什么智慧之言可以和我分享?

更新

一个团队可以有任意数量的教练和赛艇运动员,一个赛艇运动员可以在多个团队中(团队 A、B、C 等),一个团队可以有多个教练。

4

5 回答 5

2

我会为团队、教练、赛艇运动员(如果您想要扩展到不止一种运动类型,可能是运动员)和赛事设置单独的表格。

团队

团队ID

教练员

教练ID

赛艇运动员

划船者ID

活动

EventID TeamID RowerID

还有许多其他问题将进一步定义关系,例如:什么定义了条目(事件)?是一组赛艇运动员和一名教练的 PER 比赛吗?每个赛事每组赛艇运动员有多位教练?有团队吗?什么组成了一个团队?

我会问这样的问题...

于 2009-08-10T17:22:46.433 回答
1

一种链接表?然后我如何将多个赛艇运动员和教练映射到一个团队?

这是我的建议(基于Optimal Solutions 的回答):

团队
TeamID团队
名称

教练
CoachID教练
姓名


划船者RowerID
RowerName

事件
EventID
位置
时间

  1. 如果您想要预定义的团队:

CoachTeamLink(和 之间Coachs的链接Teams
TeamID
CoachID

RowerTeamLink(和之间Rowers的链接Teams
TeamID
RowerID

EventTeamLink(和之间Events的链接Teams
TeamID
EventID

  1. 或者,如果您不这样做:

EventCoachLink(和之间Events的链接Coachs
EventID
CoachID

EventRowerLink(和之间Events的链接Rowers
EventID
RowerID

于 2009-08-11T18:15:59.317 回答
0

您说您发布的是“条目表”,但该表没有多大意义,至少在(一行,没有双关语)=(一个事实或事物)方面没有多大意义。

表中的行之一是 (NULL,NULL,NULL,RowerName3,NULL,NULL,NULL)。这意味着什么?CoachName2 的教练是干什么用的?等等。

或者这可能是您的 Entries 表的“一行”?如果是这样,它就不是一个好的 SQL 表,因为您在单个行列交集中有行者列表(例如),并且“行者列表”不是数据类型的好选择。

如果只看一些数据,就不可能说如何规范化数据库。您需要知道数据在它所建模的业务中的含义和代表什么。

也就是说,在我看来,您至少需要单独的表格

团队 教练 赛艇 活动

然后您需要表示业务场景的各个方面,例如“一个赛艇运动员只属于一个团队”、“一个团队至少有一个教练,没有教练教练超过一个团队”。

我不知道条目是什么,但也许你也需要一个条目表。也许如果我知道划船会更有意义。

于 2009-08-10T17:31:14.590 回答
0

我将有以下表格:

团队:ID、TeamName 教练:ID、CoachName、TeamID 划船者:ID、RowerName、TeamID

然后您的事件表将填充如下:

事件:ID、TeamID、CoachID、RowerID、EventName、位置、时间

如果您想在查询中显示非规范化数据,您将构建如下内容:

SELECT E.ID, T.TeamName, C.CoachName, R.RowerName, E.EventName, E.Position, E.Time
FROM Event E
INNER JOIN Team T
ON E.TeamID = T.ID
INNER JOIN Coach C
ON E.CoachID = C.ID
INNER JOIN Rower R
ON E.RowerID = R.ID
于 2009-08-10T17:31:49.317 回答
0

我会尝试这样的事情::

团队
  ID
  姓名


赛艇运动员
  ID
  姓名
  team_id 参考团队 (id)

教练员
  ID
  姓名
  team_id REFERENCES 团队 (id)

事件
  ID
  姓名
  起始时间
  长度

event_teams
  event_id 引用事件 (id)
  team_id 引用团队 (id)
  位置
于 2010-03-22T19:19:09.277 回答