我有一个带有版本控制数据行的数据库方案,例如:
表格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
)是唯一的时才有效...
答案 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