TL;博士
我想澄清这一点:aFOREIGN KEY是否需要另一方面的aUNIQUE CONSTRAINT,特别是在Postgres中,通常在关系数据库系统中?
也许,我可以测试这个,但是我会问,如果UNIQUE CONSTRAINT需要FOREIGN KEY如果我不创建它会发生什么?数据库会创建一个还是抛出一个错误?
我是怎么到那里的
早些时候,我创建了一个带有列username的表,在该表上施加了一个惟一的约束。然后,我创建了另一个表,其中一列bearer_name有一个FOREIGN KEY引用上一个表的列username;另一个表有一个UNIQUE CONSTRAINT
现在,我想从数据库中删除UNIQUE CONSTRAINT列上的username,因为我后来在同一列上创建了一个UNIQUE INDEX,直觉上我觉得它们有相同的用途,或者不是吗?但是数据库抱怨UNIQUE INDEX有一些依赖对象,所以不能删除它,除非我提供CASCADE作为一个选项,以便甚至删除依赖对象。它将第二个表中的FOREIGN KEYonbearer_name列标识为依赖对象。
是否可以将FOREIGN KEY指向UNIQUE INDEX而不是UNIQUE CONSTRAINT

最佳答案

我想澄清的是:外键是否需要在另一边有一个唯一的约束
不,它不仅需要UNIQUE CONSTRAINT。它可以是PRIMARY KEYUNIQUE INDEX
也许,我可以测试这个,但是我会问,如果外键需要唯一的约束,如果我不创建它会发生什么?数据库会创建一个还是抛出一个错误?

CREATE TABLE tab_a(a_id INT, b_id INT);
CREATE TABLE tab_b(b_id INT);

ALTER TABLE tab_a ADD CONSTRAINT fk_tab_a_tab_b FOREIGN KEY (b_id)
             REFERENCES tab_b(b_id);
ERROR:  there is no unique constraint matching given keys
        for referenced table "tab_b"

DBFiddle Demo
外键是否可能是指向唯一索引的点,而不是唯一约束?
是的,这是可能的。
CREATE UNIQUE INDEX tab_b_i ON tab_b(b_id);

DBFiddle Demo2

关于postgresql - 删除唯一约束-PostgreSQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50781584/

10-14 00:48