Kev*_*n Q 4 postgresql
我有一个两列应该引用另一个表中的两列。这两列不是主键。我想我不能使用外键,因为它只能引用主键。
gbn*_*gbn 6
Postgres 支持唯一索引的外键(主键是唯一键的特例)。从文档
被引用的列必须是被引用表中不可延迟的唯一或主键约束的列
Bil*_*hor 1
您不能使用外键。您的模型似乎没有标准化。检查您的数据模型并尝试使其达到第三范式。
如果这两列形成自然(且唯一)键,则添加包含这两个规则的唯一键。然后引用另一个表的主键。从表中删除需要引用列的列,并在需要列时使用联接
在上面的解决方案中,主键是两列的代理键。我通常对自然键由两个或多个字段组成的表使用代理键。如果自然键的任何部分可能发生变化,那么通常首选代理。
如果您要引用的两列在第二个表中不唯一,那么您可以将它们移动到它们唯一的第三个表中。然后使用两个表中的外键引用到新表。
归档时间:
14 年,5 月 前
查看次数:
7337 次
最近记录: