我有一个设计问题,在rails应用程序中处理postgres数据库上的唯一性约束。
我有:
companies
表,其中包含firm_id
和name
列- 一个
firms
表,包含一个group_id
列(id
链接到companies.firm_id
) groups
表(id
链接到firms.group_id
)
我想确保company.name
+ company.firm.group_id
的唯一性,所以在两个表中有某种多列唯一索引。
这可能吗
我不知道/认为我们如何/是否可以在本地使用postgres索引,所以我看到的解决方案是:
- 在
companies
表上复制冗余的group_id
列,这会导致这2列之间的数据同步/可靠性维护问题。这就是我现在所做的,它并不理想。 - 不使用数据库索引,只依赖rails验证,这可能是查询繁重的,并且在大规模更新时会遇到竞争条件
我不是特别喜欢这些解决方案,有人想到我们可以做些什么吗?
1条答案
按热度按时间e1xvtsh31#
常规的
constraint
不能跨多个表,但是您可以使用constraint trigger
来强制执行完全任意的约束逻辑。x
的数据