0

我们有 10 年的存档体育数据,分布在不同的数据库中。

试图将所有数据整合到一个数据库中。由于我们将处理 10 倍的记录数量,因此我现在正尝试重新设计架构以避免潜在的性能损失。

一项更改需要将团队名册表拆分为 2 个表;一个是存储固定数据的球员表:playerID、firstName、lastName、birthDate 等,另一个是存储有关球员可变数据的新花名册表:yearInSchool、jerseyNumber、位置、身高、体重等。这将除其他外,允许我们创建球员统计数据的职业生涯 4 年汇总视图。

很公平,有道理,但话又说回来,当我查看统计查询时,例如,球员汇总得分统计数据时,除了得分和日程表之外,我还必须加入球员名单表,才能获得所有需要的信息。

我正在考虑非规范化的地方是玩家的名字和姓氏。如果我将球员的名字和姓氏存储在名册表中,那么我可以在统计查询等式中省略球员表,我假设这将是一个巨大的性能提升,因为每个表的总记录数将超过 100K(即大多数查询连接将跨表,每个表至少包含 100K 记录,目前最多为 300K)。

那么,在这种情况下,在哪里与非规范化划清界限呢?我假设复制名字,姓氏是可以的。一般来说,我喜欢数据的非重复/完整性,但我怀疑网站访问者更喜欢性能!

4

1 回答 1

2

首先想到的是,你确定你已经用尽了调整选项来获得良好的 SELECT 性能而不在这里进行非规范化吗?

在“没有神圣的奶牛”的意义上,我非常赞同你,并在必要时进行非规范化,但这听起来像是一个不应该太难获得体面性能的情况。

当然你们已经做了自己的探索,如果你已经排除了,那么个人意见是可以接受的,是的。

一个问题——如果玩家的名字改变了怎么办?它可以在您的系统中这样做吗?您会在一次 COMMIT 操作中使用事务来更新所有名册详细信息吗?对于历史记录 Db,这可能与您完全无关。

于 2012-04-26T13:30:35.027 回答