我的 PostgreSQL 数据库中有四个表:
Company User(带有外键列company_id) Location(带有外键列company_id) UserLocations(关联表,具有外键列 user_id 和 location_id)本质上:
我想知道数据库是否有办法限制 UserLocations 关联表中的条目,以便引用的用户和位置必须具有相同的 company_id 值。我不希望 A 公司的用户拥有 B 公司的位置。
我可以在我的应用程序层(rails)检查这一点,但如果存在该选项,我有兴趣使其成为硬数据库级约束。
实现此目的的一种方法是使用外键引用和冗余。
因此,该UserLocations表将有UserId、LocationId、 和CompanyId。然后它将具有以下外键关系:
foreign key (UserId, CompanyId) references Users(UserId, CompanyId)
foreign key (LocationId, CompanyId) references Locations(LocationId, CompanyId)
Run Code Online (Sandbox Code Playgroud)
当然,您必须声明Users(UserId, CompanyId)和Locations(LocationId, CompanyId)作为唯一键以供参考。这有点多余,但它确实保证了与公司的匹配,而无需创建触发器。
| 归档时间: |
|
| 查看次数: |
3772 次 |
| 最近记录: |