关系键

维基百科,自由的百科全书
(重定向自外键
跳转至: 导航搜索

关系键关系数据库的重要组成部分。关系键是一个表中的一个或几个属性,用来标识该表的每一行或与另一个表产生联系。

主键[编辑]

資料庫理論中, 超鍵、候選鍵與主鍵之間的關係:
• 候選鍵是超鍵的一種:不含有多餘屬性的超鍵
• 某個候選鍵被選為主鍵

主键,又称主码英语primary key或unique key)。数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。

从技术的角度来看,primary key和unique key有很多相似之处。但还是有以下区别:

  1. 作为primary key的域/域组不能为Null。而unique key可以。
  2. 在一个表中只能有一个primary key,而多个unique key可以同时存在。
  3. 更大的区别在逻辑设计上。primary key一般在逻辑设计中用作记录标识,这也是设置primary key的本来用意。而unique key只是为了保证域/域组的唯一性。

超键[编辑]

超键(英语superkey),有的文献称“超码”,是在数据库关系模式设计中能够唯一标示多元組的属性集。

包含所有屬性的集叫做明顯超鍵

候选键[编辑]

关系模型中,候选键候选码英语candidate key)是某个关系变量的一组属性所组成的集合,它需要同时满足下列两个条件:

  1. 这个属性集合始终能够确保在关系中能唯一标识元组
  2. 在这个属性集合中找不出合适的子集能够满足条件(1)

满足第一个条件的属性集合称为超键,因此我们也可以把候选键定义为“最小超键”,也就是不含有多余属性的超键。

候选键的重要性是它们能够在关系中唯一标识出不同的元组,因此超键也是在设计数据库模式时需要指定的最重要的约束之一。由于在关系模型中,每个关系都是一个集合(没有重复的元素),所以每个关系都至少有一个候选键(因为所有属性组合必然是个超键)。但是在某些关系型数据库也能代表多重集,所以在每个关系中都显式地定义至少一个候选键是一条很重要的设计原则。数据库管理系统通常都需要将每个关系中的某个候选键定义为主键,亦即这个候选键是区分不同元组时首选的识别方式,例如外键通常就是引用主键而非其他候选键。

外键[编辑]

外鍵英语foreign key,中国大陆译作外键,台湾译作外来键),又称外部鍵。其实在關聯式資料庫中,每個資料表都是由關聯來連繫彼此的關係,父資料表(Parent Entity)的主鍵primary key)會放在另一個資料表,當做屬性以建立彼此的關聯,而這個屬性就是外來鍵。

比如,學生跟老師之間是教學的關聯,學生資料表會有個屬性叫指導老師(FK),而這個值就是對應到老師資料表的老師代號(PK),學生的指導老師就是外來鍵。

代理鍵[编辑]

关系型数据库设计中,代理鍵是在當資料表中的候選鍵都不適合當主鍵時,例如資料太長,或是意義層面太多,就會请一個无意义的但唯一的字段來代为作主鍵。

代理键是:

Surrogate (1) – Hall, Owlett and Codd (1976)
一个代理键值确定了外部世界的一个实体。代理键值是数据库生成的,从来不显示给用户或应用程序看。
Surrogate (2) – Wieringa and De Jonge (1991)
一个代理键值确定了数据库中的一个对象。代理键值是数据库生成的,用户或应用程序看不到它。

在实践中,代理键值通常是个自动递增的数字。在Sybase或SQL Server,用identity column标识代理键,PostgreSQL里用serial,Oracle里用SEQUENCE,在MySQL里用一个标记有AUTO_INCREMENT的字段。

何时使用代理键[编辑]

以中国大陆的十八位身份证号为例,从左往右为六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

一家公司想要将它的客户记入数据库,以客户的身份证号作为主键当然是可以的;但是这18位身份证号是用于标识大陆13多亿人口的,一家公司的客户显然没有这么多,所以用18位的数字作为主键有点浪费空间。

另外,身份证号中包含了地区、生日信息,若以身份证号为主键,要不要另开字段记录客户的地区、生日也是个问题。如果不另开字段,从主键(身份证号)中提取地区、生日有点麻烦;如果开字段,主键和地区、生日字段的数据存在冗余。

所以,一般的做法是,根本不记录客户的身份证号(除非有其他需求),用一个代理键作为主键,另开字段记录客户的地区、生日等信息。

自然键[编辑]

自然键与代理键相反,它是在自然生活中唯一确定一个事物的标识。身份证号就是一个自然键,用于确定一个人。

外部链接[编辑]


数据库管理系统(DBMS) (查看 · 讨论 · 编辑)

概念
数据库 · 数据模型 · 数据库存储结构英语Database storage structures · 关系 (数据库) · 关系模型 · 分布式数据库 · ACID ( 原子性英语Atomicity (database systems) · 一致性 · 隔離性 · 持久性英语Durability (database systems) ) · Null值
关系数据库 · 关系模型 · 数据库规范化 · 數據庫完整性 · 實體完整性 · 參照完整性英语Referential integrity · 关系数据库管理系统 
主键 · 外键 · 代理键 · 超键 · 候选键 

数据库组件
触发器 · 视图 · 数据库表 · 指标 (数据库) · 事务日志英语Transaction log · 数据库事务 · 并发控制 · 乐观锁 · 悲观锁 · 数据库索引 
存储程序 · 資料庫分割

SQL
分类: 数据查询语言 (DQL) - 資料定義語言 (DDL) - 資料操縱語言 (DML) - 資料控制語言 (DCL)
指令:SELECT · INSERT · UPDATE · MERGE · DELETE · JOIN · UNION · CREATE · DROP · Begin work · COMMIT · ROLLBACK · TRUNCATE · ALTER
安全: SQL資料隱碼攻擊 · 參數化查詢

数据库管理系统的实现

实现类型
关系数据库 · 檔案型資料庫 · Deductive · 維度化資料庫 · 階層式 · 圖形資料庫 · 对象数据库 · 物件關聯式資料庫 · Temporal · XML資料庫

数据库产品
对象型 (对比) · 关系型 (对比)

数据库组件
数据查询语言 · 查詢最佳化器 · 查詢計畫 · 嵌入式SQL · ODBC · JDBC · OLE DB