DB Fk / Pk键性能

时间:2011-02-18 16:17:20

标签: database database-design architecture erd

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

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

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

问题:

  1. 这是正确的,假设从纯粹的表演角度来看,这是最好的方法吗?
  2. 有没有办法设置这些密钥(以便数据库更具自我描述性)而不会影响性能?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

  1. 不,出于同样的原因,即使我们匆忙,我们也会在汽车上使用安全带。差异是疏忽的,完全不值得。
  2. 某些特定的dbms供应商可能会提供一种在不强制执行约束的情况下声明约束的方法。例如,在Oracle中,您可以将完整性约束状态指定为DISABLE NOVALIDATE

答案 2 :(得分:2)

您希望以数据完整性为基础。希望不能很好地扩展。

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

而且,因为阅读此内容的人仍然无法得到它,读取表现的最关键部分正在取回正确答案 。如果你不能保证得到正确的答案,那么明智的人不会关心你的插页有多快。