在我的数据库设计中,我需要一个具有递归外键关系的表,即外键引用同一个表。当我尝试使用一列时,它可以正常工作,但是当我使用两列时,它会出错。下面是示例代码和产生的错误。我们将非常感谢您的帮助。
CREATE TABLE categories (
categoryID integer ,
parentID integer ,
setID integer REFERENCES categories(categoryID,parentID),
name char(255) NOT NULL,
PRIMARY KEY(categoryID,parentID)
);
错误:外键不同意的引用和引用列数
当我使用
时setID integer REFERENCES categories(categoryID) and
PRIMARY KEY(categoryID)
然后它没有给出错误,但那不是我想要的。
答案 0 :(得分:7)
你可能想要这个:
CREATE TABLE categories (
categoryID integer,
parentID integer,
setID integer,
name char(255) NOT NULL,
PRIMARY KEY (categoryID, parentID),
FOREIGN KEY (categoryID, parentID) REFERENCES categories(categoryID, parentID)
);
CREATE TABLE categories (
categoryID integer,
parentID integer,
setID integer,
name char(255) NOT NULL,
PRIMARY KEY (categoryID, parentID),
UNIQUE (setID, parentID)
FOREIGN KEY (setID, parentID) REFERENCES categories(setID, parentID)
);
外键的目标需要某种唯一性约束。我引用manual:
引用的列必须是不可延迟的唯一列 或引用表中的主键约束。
答案 1 :(得分:3)
是的,不幸的是,你试图说一个数字字段应该相当于两个数字字段。不会真的发生。
考虑一下你对SetID的使用。你真的需要吗?
相反,请确保parentID是categoryID的外键(即表示parentID的任何值都作为parentID中的对应和现有值存在)。