跨多个表的列的 SQL 唯一约束
Posted
技术标签:
【中文标题】跨多个表的列的 SQL 唯一约束【英文标题】:SQL Unique Constraint with columns spanning multiple tables 【发布时间】:2021-12-13 10:39:18 【问题描述】:我有一个场景,我需要使用来自 2 个不同表的列添加唯一约束。 我有 2 张桌子。第一个表是这样的,
TABLE MODEL(
ID PRIMARY_KEY,
KEY
)
第二个表为,
TABLE OWNERS(
ID PRIMARY_KEY,
MODEL_ID FOREIGN_KEY REFERENCES MODEL.ID,
USER
)
我的要求是MODEL.KEY + OWNERS.USER
的组合应该是唯一的。
我们怎样才能做到这一点?
注意: 我使用 Postgres 作为数据库。 无法将 OWNERS.USER 添加到 MODEL 表中。
【问题讨论】:
“MODEL.KEY + OWNERS.USER 的组合应该是唯一的”是什么意思?在什么表/行集合中?模型交叉加入所有者?所有者的模型交叉连接投影的投影? (相同。)请通过编辑而不是 cmets 进行澄清。 How to Ask minimal reproducible example PS 使用 SQL 声明性约束,您可以将其作为基表并声明适当的 UNIQUE 和 FK 约束。当然,更新必须是适当的。 PS SQL 中的通用约束实施需要触发器。 PS你的研究表明了什么? PS您对架构更改给出了一些限制,但最终允许的shema更改是什么? 【参考方案1】:您的数据模型无法做到这一点。您必须有一个额外的表 owner_key
或这样才能保存 key
(作为主键)并被其他两个表引用。
避免为列或表使用类似user
的名称,因为这是保留的 SQL 关键字。
【讨论】:
嗨 @Laurenz,我需要 MODEL.KEY + OWNERS.USER 的唯一性。假设我在模型表中有 2 个条目,其中包含一个键“销售”。使用您所说的方法,单个用户可以有重复的条目,因为 id 对于相同的键条目是唯一的。 我明白了。我已经修改了我的答案。以上是关于跨多个表的列的 SQL 唯一约束的主要内容,如果未能解决你的问题,请参考以下文章