举个例子吧:有这样一个简单的学生成绩数据库:
 表A:学生信息表: 学号,姓名,性别。
表B:课目信息表:课目ID,课目名称,学分。
表C:学生成绩表:ID,学号(外键),课目ID(外键),成绩。注意上面表C中的学号和课目ID就是外键。
它的用途主要是维护数据库的逻辑完整性。
也就是说:如果你向表C中insert记录时,数据就会查看你的学号和课目ID是否在表A或B中。如果没有,则拒绝insert. 还有,当你删除表B或表A中的记录时,数据库也会检测该ID是否在表C中有记录。如果有,拒绝删除。建立方法,可以在建表时建,也可以建好以后再修改。数据库之间情况不同。
效率,可能受一些影响。
与触发器关系,呵呵,不大,只有一种情况下有点联系:当你要同时删除表B(A)和表C中的记录时,你可以只删除一个表的记录,而让触发器去删除其它表的记录。呵呵,明白没?给分吧。 顺便看看那个有关外键约束的贴子。