![]() |
1
9
表不需要主键。表没有显式键对数据库没有任何影响,因为数据库中的每一行都有一个隐式的唯一数据点,Oracle将其用于存储和某些内部引用。这是rowid伪列。rowid是唯一标识数据库中每一行的一段数据,但有一些明显的例外。 我的数据库上的以下查询返回显示的数据: select rowid from user$ where rownum <= 5; AAAAAKAABAAAAFlAAC AAAAAKAABAAAAFlAAD AAAAAKAABAAAAFiAAD AAAAAKAABAAAAFlAAE AAAAAKAABAAAAFlAAF 严格来说,没有必要把钥匙放在桌子上。我刚才查询的oracle10g数据库有569个系统表,它们没有主键或唯一键。dba和开发人员决定如何在数据库表上创建密钥。我的项目中的开发人员总是创建主键,而不管它们是否有用或健全。作为dba,我只在有意义的地方创建键。 谨致问候, 作品 |
![]() |
2
6
那你为什么要有一个序列,如果你从来没有用过呢? 每个表都必须具有唯一标识记录的内容 ,它不必是一个人工增量序列(又称a surrogate key ,可能是 natural key )中。总有一些查询是通过某种唯一键(候选键)进行访问的,这意味着您肯定需要一个索引,您也可以使索引唯一。 对所有持久(非临时)表强制pk约束还有其他好处:
|
![]() |
3
3
在我看来,如果没有唯一的密钥,就不能有外键,因此无法将表链接到其他表。事后更改这一点并不容易,因为访问此表的所有代码都可能受到影响,可能是由于移位引用而根本无法工作,或者是由于执行的方式不同。此外,我相信我们在uni(但这是5年多以前的事了)了解到,独特的索引对性能更好,因为行是不考虑其内容而分段的。 |
![]() |
developer · 带外键的SQL表设计 7 月前 |
![]() |
relatively_random · 确保两个表之间一致的共同参考 9 月前 |
![]() |
b126 · 在两种不同的Oracle模式上执行相同查询的速度差异很大 1 年前 |
![]() |
robertspierre · 在多对多关系中自动删除未引用的行 1 年前 |
![]() |
Michael Samuel · MYSQL在以下情况下自动创建索引 7 年前 |