在 ERD 中包含历史表有什么好处?

What are the benefits of having history tables in an ERD?

我试图在数据库中模拟赛马,并收到了两个可供选择的 ERD。我不是,数据库设计专家,希望有人能为我列出备选方案 A 与备选方案 B 的 advantages/disadvantages。这是一个绝对优于另一个的情况,还是在某些情况下更可取(那些情况是什么)在其他情况下 B 更好。

从我经验不足的角度来看,似乎查询备选方案B会更容易。

对比

工业数据库中往往有很多历史记录(日志记录、审计、跟踪等)table。通常,这类 table 比其他任何东西都多。

Real-world 应用程序往往需要此信息。通常需要进行审计(谁做了什么、何时、如何以及为什么等)。通常需要一个 'undo' 函数,它需要历史数据来理清事情。有时需要分析过往业绩等。

我注意到商业数据库经常没有删除数据。记录只是改变状态(例如通过设置 'Historical' 标志)。我还注意到商业和工业数据库往往有大量 table,其中许多不再使用或不再需要(但没有人有时间清除)。

也许值得一提的是,越早开始收集历史数据,当您需要它时,您拥有的就越多。

我想这就是 multi-terabyte 磁盘热销的原因。

我建议您在陷入危机之前尽早考虑如何归档(或删除)旧数据。

另一点要提到的是,数据保护法可能要求您及时(彻底)删除一些数据。

辩论者提出了一些您当然应该考虑的好点。

根据您对我的问题的答复,我建议采用以下结构(您会发现它与 "B" 非常相似)。我几乎是凭空拉出 Horse 和 Jockey 桌子的字段 - 如果它们不符合您的需求,显然您会忽略它们并存储您需要的任何东西。

Horse
    ID    primary key (in each table)
    Name
    Age
    Gender
    etc.

Jockey
    ID
    Name
    Height
    Weight
    etc.

Race
    ID
    Post_Time
    Distance
    etc.

Starter
    ID
    Race_ID    foreign key to Race
    Horse_ID   foreign key to Horse
    Jockey_ID  foreign key to Jockey
    Gate
    Finish_Position
    etc.

在这种结构下,比赛是在特定时间发生并涉及特定马匹和骑手的事件。这有意义吗?