0

我对 RDBMS 中的这些术语感到非常困惑:键和索引:它们是同一个概念吗?例如:

CREATE TABLE FOO_TABLE (
    THE_KEY INTEGER PRIMARY KEY
    FOO INTEGER NOT NULL,
    BAR INTEGER NOT NULL,
    QUZ INTEGER UNIQUE,
    CONSTRAINT UNQ_FOO UNIQUE (FOO, BAR)
);

在这个表中,哪个是键?哪个可以称为索引?此表中是否有“非主键”?他们如何提高搜索效率?谢谢。

4

2 回答 2

0

密钥用于唯一标识一条记录。主键是识别给定表中记录的主要方式,应该存在于数据库的每个表中。唯一键是附加键。

索引用于加速查询。通常会为每个键自动创建一个索引,因为使用键作为搜索条件非常常见。

在您的示例中,您有一个名为“THE_KEY”的单列主键和一个由“FOO”和“BAR”列组成的两列唯一键。您也应该有两个索引,每个键一个。

于 2013-03-28T10:15:26.310 回答
-1

从我之前的回答复制到一个不同但相关的问题。

  1. 由于 Date、Codd 等人设计的用于描述概念模型(即实体、属性、关系、键)的术语已被供应商用来描述该模型的物理实现的属性(表、列),因此出现了混淆、记录、索引)。在我们讨论这个问题时,理解这两个域保持独立和可识别是至关重要的。
  2. 第一范式表明每个关系在概念模型中都有一个主键。仅存在于物理模型中的人工密钥不符合条件;但请注意,一些所谓的人工钥匙不在物理模型中,而实际上在概念模型中。(这方面的一个例子是美国和加拿大的 SSN/SIN,因为没有它,概念模型中的唯一性就无法保证。)下面将详细介绍这一点,但为了避免混淆,我以后将概念模型中的主键称为自然钥匙。(多个候选者将是候选自然键。)
  3. 当前 RDBMS 实现中的主键约束有多种用途。一种是对物理记录施加唯一性约束,以允许不属于此(物理)主键约束的所有字段就地更新;当自然键的字段可能随时间变化时,因此必须确保没有这样的字段成为物理模型中主键约束的一部分。
  4. 主键约束的另一个用途是启用从相关表中的外键查找,这通过尽可能窄的主键约束来最有效地解决。为此,自然键对主键约束做出了糟糕的选择,因为它们通常太宽(人类可理解)而无法获得最佳索引大小和高度。
  5. 由此我推断出一个推论:从概念模型到自然键的物理模型的最有效转换通常是唯一性约束与独特且不相交的人工主键约束相结合。请注意,在自然密钥需要具有人工组件的情况下(例如 SSN/SIN),需要有一个额外的人工主密钥约束,该约束完全驻留在物理模型中;这是因为有必要允许更改和/或重新分配外部可见的人工编号。(有多少人知道美国 SSN 在死后几个月会被重新使用?)
于 2013-03-28T10:13:16.403 回答