外键

外键

如果公共关键字在一个关系中是主关键字,那麽这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

  • 中文名称
    外键
  • 外文名称
    Foreign Key
  • 目    的
    控製存储在外键表中的资料
  • 作    用
    保持资料一致性,完整性

基本介绍

外键(Foreign Key)

如果公共关键字在一个关系中是主关键字,那麽这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键,通常在资料库设计中缩写为FK。

外键的作用

保持资料一致性,完整性,主要目的是控製存储在外键表中的资料。 使两张表形成关联,外键只能引用外表中的列的值或使用空值

使用实例

例如:

student(s#,sname,d#),即学生这个关系有三个属性:学号,姓名,所在系别。

dep(d#,dname),即院系有两个属性:系号、系名。

则s#、d#是主键,也是各自所在关系的唯一候选键,d#是student的外键。

建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。

指定外键关键字: foreign key(列名)

引用外键关键字: references <外键表名>(外键列名)

事件触发限製: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限製外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

例如:

outTable表 主键 id 类型 int

建立含有外键的表:

create table temp(

id int,

name char(20),

foreign key(id) references outTable(id) on delete cascade on update cascade);

说明:把id列 设为外键 参照外表outTable的id列 当外键的值移除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。

几个原则

1、 为关联栏位建立外键。

2、 所有的键都必须唯一。

3、避免使用复合键。

4、外键总是关联唯一的键栏位。

相关信息

主键表和外建表

使用设计介面建立外键时,出现主键表和外建表问题,上述使个人理解有误:

CREATE TABLE TABLE1

(

[ID] INT IDENTITY(1,1) PRIMARY KEY

)

GO

CREATE TABLE TABLE2

(

[ID] INT NOT NULL,

FOREIGN KEY ([ID]) REFERENCES [TABLE1]([ID])

)

GO

TABLE2 中引用了TABLE1,在此TABLE1为主键表,而TABLE2 为外键表。

总结:主键表是被引用的表,外键表是引用其他表的表。

外键的有效性

有很多时候,程式员会发现栏位缺少、多余问题或者是建立外键以后就不能增加没有受约束的行[特殊情况下是有必要的],这个时候不想对表结构进行操作,就可以使用约束失效。

以 Northwind 为例:想给产品表【Products表】增加一条不受种类表【Categories表】限製的资料。可以使产品表中的 Categories 约束失效。

写法:ALTER TABLE dbo.Products NOCHECK CONSTRAINT FK_Products_Categories

增加完成后再使其有效:

ALTER TABLE dbo.Products CHECK CONSTRAINT FK_Products_Categories

这样就完成不受某表约束的资料增加了。

还有一个好处是:如上述例子。修改 Categories 表时 增加栏位时 要把所有引用 Categories 表的外键给失效。等给 Categories 表增加栏位完成后再使所有套用 Categories 表的外键恢复有效性即可。

相关词条

相关搜索

其它词条