RDBMS中的键,索引,主键和聚簇键之间有什么关系?

时间:2013-03-28 09:58:43

标签: sql database-design relational-database rdbms

我对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)
);

在这张表中,哪个是关键?哪个可以称为索引?这张表中有'非主键'吗?它们如何提高搜索效率? 感谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:-1)

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

  1. 混乱的产生是因为Date,Codd等人设计的术语描述了概念模型(即实体,属性, 关系,密钥)后来被供应商所采用来描述 该模型的物理实现的属性(表, 列,记录,索引)。理解这一点至关重要 当我们讨论这两个领域时,两个领域应保持独立和可识别 问题。
  2. First Normal Form声明每个关系都有一个主键 概念模型。仅存在于人体密钥中的人工密钥 物理模型不符合条件;但要注意一些所谓的 人工钥匙不在物理模型中,但实际上在物理模型中 概念模型。 (这方面的一个例子是美国的SSN / SIN和 加拿大,在概念模型中无法保证唯一性 没有它。)更多关于这一点,但为了避免混淆,我会 从此以后,将概念模型中的主键称为 自然键。 (多个候选人将成为候选自然钥匙。)
  3. 当前RDBMS实现中的主键约束服务 几个目的。一种是对...施加唯一性约束 物理记录,允许更新所有不属于的字段 这个(物理)主键约束;什么时候有可能 因此,随着时间的推移,自然键的领域是必不可少的 没有这样的字段成为主键约束的一部分 物理模型。
  4. 主键约束的另一个用途是启用外键 从相关表中查找,最有效地解决了这一问题 通过最窄的主键约束。以此目的 自然键对主键约束的选择很差,因为 它们通常太宽(人为可靠)以获得最佳指数 尺寸和高度。
  5. 由此我推断出一个推论:即最有效的翻译 从概念模型看自然键的物理模型 通常是一个唯一性约束与一个独特的和 不相交的人工主键约束。请注意,在情况下(例如 作为SSN / SIN),其中自然键需要具有人工 组件,希望有一个额外的人工初级 密钥约束完全驻留在物理模型中;这个 因为有必要允许外部可见 要更改和/或重新分配的人工编号。 (有多少人知道 美国SSN在死后几个月被重复使用?)