Oracle SQL开发人员示例HR用户中的PK/UK索引

Oracle SQL开发人员示例HR用户中的PK/UK索引,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,在Oracles sql数据库11g上,我有一个示例DB。除了PK/UK索引意味着什么(我知道这个快捷键代表什么)以及模式中包含的每个关系为什么会出现在子表中:“country\u c\u id\u PK”之外,我什么都懂。 如果DB的每个关系中都有相同的数据,那么这个字段是什么? 第一张图显示了整个表和其他一些关系的属性 http://i.stack.imgur.com/CxGS0.jpg:总体视图 http://i.stack.imgur.com/Y9AvS.png http://i.sta

在Oracles sql数据库11g上,我有一个示例DB。除了PK/UK索引意味着什么(我知道这个快捷键代表什么)以及模式中包含的每个关系为什么会出现在子表中:“country\u c\u id\u PK”之外,我什么都懂。 如果DB的每个关系中都有相同的数据,那么这个字段是什么? 第一张图显示了整个表和其他一些关系的属性

http://i.stack.imgur.com/CxGS0.jpg
:总体视图

http://i.stack.imgur.com/Y9AvS.png

http://i.stack.imgur.com/B51Xs.png


http://i.stack.imgur.com/JL1qa.png

好的,你知道PK是什么意思,UK是什么意思。下一个问题-数据库如何维护这些约束

如果您有一个包含1'000'000'000条记录的表,并且您希望插入另一条记录,那么从头到尾扫描它并检查“这里是否有相同的id?”是非常令人伤心的。这样做很可悲。相反,当任何人创建PK或UK时,数据库检查表中这些列上是否有索引。若索引存在-数据库使用它来检查ID的存在。如果找不到合适的索引,数据库会自动创建它

此属性显示将使用的索引

下一个问题是为什么这里所有的表都有相同的值。我想这只是一只虫子。千万个SQLDeveloper bug中的一个。如果你想知道真相,执行以下命令:

select
  t.TABLE_NAME,
  c.CONSTRAINT_NAME,
  c.INDEX_NAME
from
  user_tables t,
  user_constraints c
where
  t.TABLE_NAME = c.TABLE_NAME and
  c.CONSTRAINT_TYPE = 'P'
在大多数情况下,约束名称和索引名称相同,这意味着自动创建索引。但在某些情况下,开发人员首先创建索引,然后约束使用此索引,若开发人员同时命名了这两个索引,则名称可能会有所不同