2014-09-03 95 views
0

关注这三个表:这个循环是多余的吗?

  • 事件,包括,例如,柏林马拉松
  • 结果的各种详细信息,包括各个领域,包括用户的比赛时间和FK一个事件,并
  • 目标,用户想要运行的事件FK,他们想要运行它的时间,最终FK到达用户实现目标的比赛。

显然,用户实现目标的比赛事件必须是目标事件。但并非所有目标都已实现 - 有些可能永远不会实现。

这是不好的设计?任何人都可以提出一种更好的建模方法吗?我在django项目中使用sqlite。

+1

循环?循环在哪里? – paxdiablo 2014-09-03 23:30:59

+0

目标有两种不同的方式进入事件,创建一个关系循环。 – Brian 2014-09-04 01:47:16

+0

所以这个数据库不*存储关于错过目标的信息? – 2014-09-04 07:16:48

回答

0

您的活动表格正常。

但是你的目标表设计搞砸了拟议的事件和实际实现的事件。

我认为结果表可以与目标表合并成一个新的结果表。

由于一个用户可能想要运行多个事件。在您的新结果表格中,它应该如下所示:

UserID EventID TimeProposed ActualTimeUsed Achieved 
1  1  1 hour  1.1 hour  No 
1  2  1.5 hour 1.2 hour  Yes 

因此,您提到的循环被删除,因为每行只有一个事件。 (用户ID和EventID仍然是FK到其他两个表)。

Achived列可以使用查询更新以决定ActualTimeUsed < = TimeProposed。

+0

不幸的是,没有办法根据实际的比赛结果来检查达到的状态。这仍然会造成不一致的可能性。 – Brian 2014-09-04 18:05:26

+0

由于您的“已完成”列是查询生成的字段。我修改了我的答案。 – 2014-09-04 18:54:28