Oracle - 在表上没有主键有什么影响吗?

时间:2009-07-01 11:32:41

标签: database oracle database-design

我们在表格上使用序列号作为主键。 有些表我们并不真正使用主键进行任何查询。 但是,我们在其他列上有索引。这些是非唯一索引。 查询在WHERE条件中使用这些非主键列。

所以,我真的没有看到在这些表上使用主键的任何好处。 我对SQL 2000的经验是,它用于复制具有一些主键的表。 否则就不会。

我正在使用Oracle 10gR2。我想知道是否有任何这样的副作用 拥有没有主键的表。

3 个答案:

答案 0 :(得分:9)

表格不需要主键。对数据库没有任何影响,因为表没有显式键,因为数据库中的每一行都有一个Oracle用于存储和某些内部引用的隐式唯一数据点。那是ROWID伪列。 ROWID是一个唯一标识数据库中每一行的数据 - 有一些值得注意的例外。

我的数据库上的以下查询返回显示的数据:

select rowid from user$ where rownum <= 5;

AAAAAKAABAAAAFlAAC
AAAAAKAABAAAAFlAAD
AAAAAKAABAAAAFiAAD
AAAAAKAABAAAAFlAAE
AAAAAKAABAAAAFlAAF

桌子上没有钥匙是非常必要的。我刚查询的Oracle10g数据库有569个没有主键或唯一键的系统表。 DBA和开发人员决定如何在数据库表上创建密钥。我的项目中的开发人员总是创建主键,无论其有用性还是健全性。作为一名DBA,我只在有意义的地方创建密钥。

亲切的问候,

作品

答案 1 :(得分:6)

  

有些表我们并不真正使用主键进行任何查询。

如果你从未使用它,为什么你会有一个序列呢? 每个表必须具有唯一标识记录的内容,它不必是人工增量序列(又名surrogate key),它可以是natural key的组合。总是存在通过某种唯一键(候选键)访问的查询,这意味着您肯定需要一个索引,并且您也可以使索引唯一。

对所有持久(非临时)表强制执行PK约束还有其他好处:

  1. 确保您永远不会有重复的值(您的应用程序将无法破坏数据库)
  2. 帮助外部工具执行自动ER建模
  3. 最后但并非最不重要 - 允许FK约束!

答案 2 :(得分:3)

在我的脑海中,没有唯一键就不能拥有外键,因此无法将表链接到其他表。在事实之后改变这一点并不简单,因为访问该表的所有代码都可能受到影响,或者由于移位引用而根本不工作,或者通过不同的方式执行。另外,我相信我们在uni(但这是5年前)学到了独特的索引对性能更好,因为行是分段的而不考虑它们的内容。