DBMS 中的键

  • Post category:database

下面我详细讲解一下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重要的组成部分之一,不同的键类型具有如下不同的特点:

  • 主键唯一标识整个表,确保行的唯一性。
  • 外键用来连接两个关系表,从而建立表与表之间的关系。
  • 候选键指能唯一地标识表中记录,并可以作为主键的属性集合。

正确的使用键,不仅可以提高数据访问的效率,还能保证数据的完整性,避免了数据的冗杂性和不一致性,减少了数据维护的难度和错误率。