先决条件 – 关系模型中的键
主键是表的一列,它唯一标识该表中的每个元组(行)。主键对表强制执行完整性约束。一个表中只允许使用一个主键。主键不接受任何重复值和 NULL 值。表中的主键值很少更改,因此在更改很少发生的地方谨慎选择。一个表的主键可以被另一表的外键引用。
为了更好地理解主键,我们将表命名为 Student 表,具有 Roll_number、Name、Batch、Phone_number、Citizen_ID 等属性。
roll number 属性永远不能有相同和 NULL 值,因为在大学注册的每个学生都可以有唯一的 Roll_number,因此两个学生不能有相同的 Roll_number,并且表中的每一行都用学生的 roll number 唯一标识。因此,在这种情况下,我们可以将 Roll_number 属性作为主键。
唯一键约束还唯一标识关系或表中的单个元组。与主键不同,一张表可以有多个唯一键。唯一键约束只能接受一个列的 NULL 值。唯一约束也被另一个表的外键引用。当有人想要对一列和一组不是主键的列强制实施唯一约束时,可以使用它。
为了更好地理解唯一键,我们采用具有 Roll_number、Name、Batch、Phone_number 和 Citizen_ID 属性的 Student 表。
Roll number 属性已经分配了主键,Citizen_ID 可以有唯一的约束,其中 Citizen_ID 列中的每个条目都应该是唯一的,因为一个国家的每个公民都必须有他或她的唯一标识号,如 Aadhaar Number。但是如果学生在这种情况下迁移到另一个国家,他或她将没有任何 Citizen_ID 并且条目可能具有 NULL 值,因为唯一约束中只允许一个 NULL。
主键和唯一键的主要区别:
主键不接受 NULL 值,而唯一键可以接受 NULL 值。
- 一个表只能有主键,而一个表可以有多个唯一键。
- 定义主键时自动创建聚集索引,而唯一键生成非聚集索引。
对比图:
Paramenter | PRIMARY KEY | UNIQUE KEY |
---|---|---|
Basic | Used to serve as a unique identifier for each row in a table. | Uniquely determines a row which isn’t primary key. |
NULL value acceptance | Cannot accept NULL values. |
|
Number of keys that can be defined in the table | Only one primary key | More than one unique key |
Index | Creates clustered index | Creates non-clustered index |