我们在表上使用序列号作为主键。有些表我们并不真正使用主键进行任何查询。但是,我们在其他列上有索引。这些是非唯一索引。查询在WHERE条件中使用这些非主键列。
所以,我真的没有看到在这些表上使用主键的任何好处。我对SQL 2000的经验是,它用于复制具有一些主键的表。否则它不会。
我使用的是Oracle 10gR2。我想知道是否存在没有主键的表的副作用。
表不需要主键。对数据库没有任何影响,因为表没有显式键,因为数据库中的每一行都有一个Oracle用于存储和某些内部引用的隐式唯一数据点。那是ROWID伪列。 ROWID是一个唯一标识数据库中每一行的数据 - 有一些值得注意的例外。
我的数据库上的以下查询返回显示的数据:
select rowid from user$ where rownum <= 5; AAAAAKAABAAAAFlAAC AAAAAKAABAAAAFlAAD AAAAAKAABAAAAFiAAD AAAAAKAABAAAAFlAAE AAAAAKAABAAAAFlAAF
桌子上没有钥匙是非常必要的。我刚查询的Oracle10g数据库有569个没有主键或唯一键的系统表。 DBA和开发人员决定如何在数据库表上创建密钥。我的项目中的开发人员总是创建主键,无论其有用性还是健全性。作为一名DBA,我只在有意义的地方创建密钥。
亲切的问候,
作品
有些表我们并不真正使用主键进行任何查询。
如果你从来没有使用它,为什么你有一个序列呢?每个表必须具有唯一标识记录的东西,它不必是人工增量序列(也称为surrogate key),它可以是natural key的组合)。总是存在通过某种唯一键(候选键)访问的查询,这意味着您肯定需要一个索引,并且您也可以使索引唯一。
在所有持久(非临时)表上强制执行PK约束还有其他好处:
如果没有唯一的密钥,你就无法拥有一个外键,因此没有办法将表链接到其他表。在事实之后改变这一点并不简单,因为访问该表的所有代码都可能受到影响,或者由于移位引用而根本不工作,或者通过不同的方式执行。此外,我相信我们在uni(但这是5年前)学到了独特的索引对性能更好,因为行是分段的而不考虑它们的内容。