1

在我们的数据库中,我们有一个具有数百万行不断插入和更新的单一中心表。该表有一个作为唯一标识符的列,用于将该表的内容与具有一对多关系的多个表链接起来。

这意味着我们将条目插入到 USERS 表中,在同一个事务中, USERS_PETS 和 USERS_PARENTS(以及更多 10 个)将根据来自主表的相同唯一标识符填充多行。

由于使用此数据库的应用程序不断插入新条目并更新现有条目,因此这些表之间的关系仅保留在应用程序级别(即逻辑 ERD,而不是通过 FK/PK 减速处理)。

问题:

  1. 假设从纯性能的角度来看,这是最好的方法,这是正确的吗?
  2. 有没有办法在不影响性能的情况下设置这些键(以便数据库更具自我描述性)?
4

3 回答 3

4

这是最糟糕的方法,我保证您最终会遇到数据完整性问题。数据完整性远比性能更重要。这是愚蠢和短视的。

于 2011-02-18T16:22:07.853 回答
2
  1. 不,出于同样的原因,即使我们很匆忙,我们也会在汽车中使用安全带。差异可以忽略不计,完全不值得。
  2. 一些特定的 dbms 供应商可能会提供一种声明约束但不强制执行的方式。例如,在 Oracle 中,您可以将完整性约束状态指定为DISABLE NOVALIDATE.
于 2011-02-18T16:27:43.337 回答
2

您将数据完整性建立在希望之上。希望不能很好地扩展。

并且没有“纯粹的性能观点”这样的东西。除非,也就是说,您从未从数据库中读取过数据。如果你只插入,从不更新,从不删除,从不读取,你可以证明存在“纯粹的性能观点”。但是,如果您曾经更新、删除或读取,那么性能就不是一个点——它更像是一个表面或一个实体,您所能做的就是在插入、更新、删除和读取之间移动平衡点。

并且,因为阅读本文的人仍然无法理解,阅读性能最关键的部分是找回正确的答案。如果你不能保证正确的答案,明智的人不会关心你的插入速度有多快。

于 2011-02-18T16:55:43.547 回答