下面我详细讲解一下DBMS中的键(Key):
什么是键?
在关系数据库中,关系是通过一种方式表示出来的,这个方式就是关系模式。一个关系模式通常由一个包含一些列属性的集合构成,其中一个属性可能会被指定为关系的键。在数据库中,键是一个用来唯一标识每一条记录的属性或属性组合。它具有唯一性约束(Unique Constraint)和非空性约束(Not Null Constraint)两种基本的约束。
键的分类
主键(Primary Key)
主键是一张关系表中的一个属性组合,它可以唯一的标识一条记录。主键具有唯一性约束和非空性约束,主键的值是不允许重复的。一个关系表只能有一个主键,对于同一个关系表而言,主键一旦被设定不能修改。常见的主键类型有:自增长整数类型以及字符串类型。
例如,一个人员信息的表employee,它具有唯一的员工编号empno,那么empno就是这张表的主键,它具有唯一性,且不能为空。
CREATE TABLE employee (
empno INT NOT NULL auto_increment,
empname VARCHAR(20) NOT NULL,
age INT NOT NULL,
PRIMARY KEY (empno)
);
外键(Foreign Key)
外键是为了保持关系数据库中表格完整性而设定的一种约束,它用来绑定两个表格,在一个表格中出现的键值在另一个表格中必须存在。外键不是必备的,但当不使用外键时,需要由程序员自行维护数据完整性,加入外键后,会在数据库层面上对数据完整性进行强制约束。
例如,一个商品订单表orders中,有一个”购买者编号”的属性,它关联的一张名为customer的表中,”购买者编号”是它的”购买者编号”字段,用于说明这条记录的推销员,”购买者编号”同时是表customer的主键。则employee表的”购买者编号”是名为customer表的外键。
CREATE TABLE orders (
orderid INT NOT NULL auto_increment,
productName VACHAR(20) NOT NULL,
Customerid INT NOT NULL,
PRIMARY KEY (orderid),
FOREIGN KEY (Customerid) REFERENCES customer(customerid)
);
候选键(Candidate Key)
候选键是指能够唯一地标识一条记录,并且这个键也可以被设置为主键的属性集合。候选键可以有多个。在数据表上,可能存在多组键值都可以唯一标识该表中的记录,而任意一组键值均可被选作主键,那么这些键值列就都被称作候选键。
例如一个申请孵化指标申请表appli中,申请人编号ApplicantNo和申请编号ApplicationNo的所有组合都是唯一的。在这个表中就有两个候选键。
CREATE TABLE appli (
ApplicantNo INT NOT NULL,
ApplicationNo VARCHAR(20) NOT NULL,
Subject VARCHER(20) NOT NULL,
StartDate DATE NOT NULL,
PRIMARY KEY (ApplicationNo),
UNIQUE (ApplicantNo, ApplicationNo)
);
总结
键是DBMS重要的组成部分之一,不同的键类型具有如下不同的特点:
- 主键唯一标识整个表,确保行的唯一性。
- 外键用来连接两个关系表,从而建立表与表之间的关系。
- 候选键指能唯一地标识表中记录,并可以作为主键的属性集合。
正确的使用键,不仅可以提高数据访问的效率,还能保证数据的完整性,避免了数据的冗杂性和不一致性,减少了数据维护的难度和错误率。