DBMS中的键是用来唯一标识数据库中数据记录的一个或多个列。常见的键包括主键、候选键、外键等。
主键
主键是一种用于标识数据库表中唯一记录的键。在一个表中,每行数据都有一个不同的主键值。主键可以由单个列或多个列组成,但必须满足以下几个条件:
-
主键值不能为 NULL。
-
主键值必须唯一。
-
表中不能为空(i.e.不能存在两行或以上的记录值完全相同)。
例如,假设有以下一个用户表:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
);
在这个用户表中,主键是 id 列。每个 id 值必须是唯一的,并且不能为空。这样我们就可以使用主键来区分两个不同的用户记录。
候选键
候选键是指可以作为主键的一组列。与主键不同的是,候选键可以有多个,且不需要标记为主键。但是,每个候选键都必须满足唯一性和不为空的条件。通常,根据需求及性能来选择一个候选键作为主键。
以电影表为例,若以电影名和发行年份组合来标识表中的记录,可以这样定义:
CREATE TABLE movies (
title VARCHAR(50),
year INT,
director VARCHAR(50),
...
PRIMARY KEY (title, year)
);
在此例中,主键是以 title 和 year 列作为组合键,因为这意味着每个电影必须以年份、电影名这一对值来区分并且保证每部电影必定有这两个值。
外键
外键用于建立两个表之间的联系。外键可以把两张表联通并建立起关联关系。一个外键总是参照另一张表的主键或候选键,这样就可以使用 JOIN 等操作在表之间进行联接查询。例如下面的例子中,我们建立一个订单表,它引用一个客户表中的主键。这就意味着订单表中的每个记录都必须关联到客户表中的一条记录。
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE
);
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
在这个例子中,customer_id 列是一个外键,它引用了顾客表中的主键。我们可以使用这个外键来确保不会创建一个订单,其中客户不存在于顾客表中。
总结:
- 主键用来唯一标识数据库表中记录的键,它必须满足不为空,唯一性和稳定性的要求。
- 候选键一般不定义标志,但是必须满足唯一性和非空的要求。
- 外键用于建立两个表之间的联系,它将数据记录连接起来,使之成为一个逻辑整体。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:DBMS 中的键 - Python技术站