SQL Server中的外键约束

时间:2011-04-16 10:15:47

标签: sql-server foreign-keys

我有一个带有版本控制数据行的数据库方案,例如: 表格Person包含

id (int, PK)
name (String)
current (Bool)
firstid (int)

Current对于先前数据为0,对于最新条目为1。同一实体的所有行都具有相同的FirstID,它指向集合的第一个ID

使用相同的原则引用表:Adress

id (int, PK)
street (String)
person_id (int)
current (Bool)
firstid (int)

Person_id指向patient.firstid。因此firstid永远不会是唯一的,只有current=1

我的问题是:我想在我的表中添加引用完整性,但这仅在引用的列(patient.firstid)是唯一的时才有效...

2 个答案:

答案 0 :(得分:1)

您应该考虑重构表结构。但要保持当前结构,请向人员添加自引用外键

第一次引用人(id)

然后,从地址表中引用“基础人”

address.person_id引用person(id) - 它应该只存储第一个id的链接

答案 1 :(得分:0)

  

FOREIGN KEY约束没有   仅链接到PRIMARY KEY   另一个表中的约束;它可以   也可以定义参考   UNIQUE约束的列   另一张桌子。一把外国钥匙   约束可以包含空值;   但是,如果是复合材料的任何列   FOREIGN KEY约束包含null   价值观,然后验证   将跳过FOREIGN KEY约束。

即使表之间没有定义PRIMARY KEY或FOREIGN KEY约束,也可以组合来自两个相关表的数据,但两个表之间的外键关系表明这两个表已经过优化,可以在使用的查询中组合密钥作为其标准。

参考http://msdn.microsoft.com/en-us/library/aa933117(v=sql.80).aspx