Postgresql 9.0中的反向FK约束?

时间:2011-06-16 05:20:25

标签: sql database database-design postgresql

我知道我可以设置一个FK约束来确保Table1.ColA存在 Table2.Key,但是,如果我想反过来呢?

我想确保Table2.KolA在Table2.Key中不存在..我可以吗 这与任何类型的CHECK约束,触发器,自定义函数等?  谢谢!

编辑:

假设我有一个名为“姓名”的表:

1 Michael
2 David
3 William

现在我有一张名为“Nicknames”的表:

Mike -> 1
Mikey -> 1
Dave -> 2
Bill -> 3
Will -> 3

我想确保没有人将“Michael”行添加到“Nicknames”中,因为它已经存在于“Names”中。

2 个答案:

答案 0 :(得分:2)

在标准SQL中,您可以使用CREATE ASSERTION,但PostgreSQL不支持它。您可以在两个表的触发器中伪造它(例如UNION两个表,GROUP BY名称和测试COUNT(*) > 1或者只是测试逻辑inserted表值不会出现在另一个表中)或其他程序代码。

您可以使用一个表格和一个显式子类型“设计”问题并使用传统的UNIQUE约束,如@gbn所示。

答案 1 :(得分:1)

您是否考虑过使用一张

  • “名字类型”(primar,昵称)
  • “自我FK”的昵称

据我了解,您有一个应该是唯一的名称列表。

这将不再需要任何代码来维护“非FK”