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

Sat*_*hya 4 database oracle database-design

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

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

我使用的是Oracle 10gR2.我想知道是否存在没有主键的表的副作用.

小智 9

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

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

select rowid from user$ where rownum <= 5;

AAAAAKAABAAAAFlAAC
AAAAAKAABAAAAFlAAD
AAAAAKAABAAAAFiAAD
AAAAAKAABAAAAFlAAE
AAAAAKAABAAAAFlAAF

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

亲切的问候,

作品


And*_*int 6

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

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

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

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

  • +1报价."如果它没有主键,它就不是*表!" :-) (2认同)

l0b*_*0b0 3

在我的脑海中,如果没有唯一键,就不可能有外键,因此无法将表链接到其他表。事后更改此设置并不是微不足道的,因为访问此表的所有代码都可能受到影响,要么因为引用移位而根本不工作,要么执行不同的操作。另外,我相信我们在大学了解到(但这是 5 年前的事了),唯一索引对性能更好,因为行是分段的,而不考虑其内容。