1. 什么是辅助键
在RDBMS中,除了主键和唯一键,还有一个重要的键,那就是辅助键。
辅助键是指没有实际业务意义的、能够唯一标识一条记录的键。
相较于主键或唯一键,辅助键通常具有更高的可修改性,因为其并不涉及具体的业务规则,更多地作为数据库内部的管理工具使用。
下面将从以下几个方面介绍辅助键的相关知识。
2. 辅助键的应用场景
2.1 索引优化
在数据库中,由于数据量过大,对数据进行查询的效率往往会很低,为了提高查询效率,我们通常会在关键字段上建立索引。辅助键可以作为建立索引的对象,提升查询效率。
例如,在一个订单表中,订单号(order_id)是主键,但是很少作为查询条件进行使用。我们可以在创建订单表时,再添加一个不同于主键的辅助键,并在其上建立索引,使得查询效率更高。
CREATE TABLE orders (
order_id INT NOT NULL PRIMARY KEY,
order_no VARCHAR(50) NOT NULL UNIQUE,
customer_id INT NOT NULL,
...,
INDEX idx_order_no (order_no)
);
2.2 引用关系建立
在关系型数据库中,引用关系是非常重要的关系,而辅助键可以作为建立引用关系的方式。
例如,在一个订单表中,需要记录每个订单所属的客户信息。我们可以使用一个辅助键,将订单表与客户表建立引用关系,以便查询订单时能够同时获取客户信息。
CREATE TABLE orders (
order_id INT NOT NULL PRIMARY KEY,
order_no VARCHAR(50) NOT NULL UNIQUE,
customer_id INT NOT NULL,
...,
CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
);
3. 辅助键的特点
3.1 唯一性限制
辅助键和主键一样,也需要满足唯一性限制。每条记录的辅助键值都必须唯一,否则将无法使用辅助键作为引用关系建立的条件。
3.2 可以为NULL
与主键不同,辅助键可以为NULL。
在某些情况下,我们可能需要在某个字段上建立索引,但是由于业务上的限制,该字段的值不一定总是存在。这时,我们就可以使用辅助键来作为建立索引的对象,且其可以为NULL,建立索引时需要使用NULL值占位符。
3.3 可以是复合键
辅助键不仅可以是单字段,也可以是多个字段组合而成的复合键。
例如,在一个订单表中,可能会存在多条记录同时属于一个客户,这时我们就可以使用两个字段组合作为辅助键来避免重复数据。
CREATE TABLE orders (
order_id INT NOT NULL PRIMARY KEY,
order_no VARCHAR(50) NOT NULL UNIQUE,
customer_id INT NOT NULL,
customer_no VARCHAR(50) NOT NULL,
...,
INDEX idx_customer (customer_id, customer_no)
);
4. 总结
辅助键虽然没有主键和唯一键那么重要,但在一些场景下它确实十分实用。
通过本文的介绍,我们了解了辅助键的应用场景、特点以及如何设计辅助键。
需要注意的是,在建立辅助键时,要结合实际业务需求进行设计,避免过度使用或不恰当使用辅助键。