我有一个专门用于存储赛马时间的数据库。目前,我有一个Race
表和一个RaceTimes
表。每个都有5个分数次和5次分裂次。 RaceTime
表还包含Race
外键。
例如:
RaceTime
表:
RaceTime_id (primary key)
Race_id (foreign key)
TimeValue (time stored in 100th of seconds)
PointOfTime (i.e. 1/4 mile, 1/2 mile, etc.)
Which (where which is an integer between 1 and 5)
鉴于每场比赛有五次和五次分组,这种方法为每场比赛产生10 RaceTime
个记录。或者,我可以创建一个数据库结构,包括:Fraction1,Fraction2 .... Fraction5和Split1,Split2 ...... Split5。在这种方法下,Race
记录与RaceTime
记录之间将存在1对1匹配,而RaceTime
表将具有更少的行。
我的阅读和研究使我相信第一种方法更可取。我相信这些数据更加规范化。我想我有一些暂停因为表格大小不同,但也许只是在长桌或宽桌之间进行权衡。
那就是说,我希望得到那些更精通这些事情的人的意见,我只是一个喜欢玩马的会计师。感谢您的投入。
答案 0 :(得分:3)
你是对的 - 第一种方法更好。第二种方法的缺点:
然而,第二种方法具有更好的性能,但现代应用程序使用缓存来“记住”非规范化数据。所以这个优势是微不足道的。
答案 1 :(得分:1)
这在很大程度上取决于您在桌面上执行的查询类型。如果您在代码示例指示时对表进行规范化,则最终必须执行JOIN
和一些额外处理以检索给定种族的数据。如果您的数据库索引良好,这不应该太慢,但这是一些额外的工作。
但是,如果您确信将会有五个,不多也不少,对任何给定的种族进行分割/分数,对其进行非规范化(Split1...Split5
方式)将使您获得稍微更好的性能,但是如果你不得不(比如说)增加第六次分裂,那就是巨大的痛苦。
你的电话;只有你能知道什么是最适合你的应用程序。