PostgreSQL可空外键

11

我正在创建一个PostgreSQL表格,它具有引用自身的外键,因此它的结构类似于树形结构:

CREATE TABLE Person(
    ID serial PRIMARY KEY,
    Description text,
    Name varchar(5),
    ParentID serial,
    FOREIGN KEY (ParentID) REFERENCES Person(ID)
    );
问题在于ParentID自动设置为NOT NULL,因此在这棵树中不能有根节点。如何使它可为空?
1个回答

19

您可能希望将ParentID的类型更改为整数,这是序列的基础类型。

CREATE TABLE Person(
    ID serial PRIMARY KEY,
    Description text,
    Name varchar(5),
    ParentID integer,
    FOREIGN KEY (ParentID) REFERENCES Person(ID)
);

整数和序列的数据类型文档在这里:http://www.postgresql.org/docs/current/static/datatype-numeric.html


9
简单解释一下:serial基本上是一个宏,展开后变成integer default nextval('tablename_colname_seq')并创建一个由表所拥有的序列。对于外键来说,你不需要或者不想要这个,它仅适用于自动生成的关键列。因此使用integer。如果你使用\dt Person检查基础表,你会看到在表创建后id列实际上就是integer类型。 - Craig Ringer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接