【问题标题】:How should I handle incomplete history in my Baseball Pitchers Database我应该如何处理我的棒球投手数据库中的不完整历史记录
【发布时间】:2012-03-21 17:47:38
【问题描述】:

我正在使用一个相当简单的数据库应用程序来跟踪 MLB 棒球投手。目前,我有两张桌子:

  1. 投手 => 名称:字符串,...
  2. starts => start_date:date, pitch_count:integer, strikes:integer, balls:integer, era:float, run:integer, win:integer

如果我有所有投手的历史开始,使用这种配置为每个投手开发报告将相当简单。

我的问题是当您没有完整的历史开始信息时,处理以下两种情况的最佳方法是什么:

  1. 情况 1 - 您没有历史开始详细信息,但您有历史摘要信息:每年和生命周期的开始、获胜、投球等。这是一个已经退役的投手的情况。

  2. 情况 2 - 您有一些历史开始细节以及情况 1 中描述的历史摘要信息。

处理此问题的最佳方法是什么:

我应该在开始稳定中创建虚拟条目以表示摘要信息,还是应该创建第三个表格来保存摘要信息并在每次开始后为活跃玩家简单地更新该表格,或者是否有其他替代最佳实践.

【问题讨论】:

    标签: database ruby-on-rails-3 database-design


    【解决方案1】:

    据我所知,您有 3 种可能性:

    • 仅当您不保留摘要信息在另一个表中时 让个人开始
    • 保留摘要信息,包括 在单独的表格中汇总个人开始的信息
    • 有一种特殊类型的开始记录来表示摘要信息 旨在在您运行摘要查询时生成正确的结果 总体上开始表

    我认为第二个最好。只是为了澄清它,这个想法是当您只有摘要信息时,您将其放入摘要表中,但您还将从您拥有的各个开始生成的摘要信息放入此表中。它打破了规范化,因为一些摘要信息完全依赖于现有的开始记录,但它会更有效,特别是如果您必须经常输出摘要信息。但是,它要求您在每次添加或更改开始记录时更新汇总信息。您需要在事务中进行 2 项更改以确保一致性。

    【讨论】:

    • 詹姆斯 - 感谢您的回复。问题 - 为什么你更喜欢第二个选项而不是第三个选项 - 只是好奇?再次感谢。
    • 第一个问题是在创建或读取记录时,您必须使用两个表。第二个意味着,当您阅读单个开始时,您可以使用一个表格,而当您阅读摘要时,您可以使用另一个表格,而且它可以节省您重新计算摘要的时间。第三个不会为您预先计算摘要,但会给您带来一个问题,即确保正确处理开始表中的两种不同类型的记录:您正在使用一个表来保存两种不同类型的信息,这可能会导致错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2011-10-01
    • 2011-04-23
    • 2018-01-04
    • 2015-04-10
    • 2013-09-02
    相关资源
    最近更新 更多