我正在创建一个PostgreSQL表格,它具有引用自身的外键,因此它的结构类似于树形结构:
CREATE TABLE Person(
ID serial PRIMARY KEY,
Description text,
Name varchar(5),
ParentID serial,
FOREIGN KEY (ParentID) REFERENCES Person(ID)
);
问题在于ParentID自动设置为NOT NULL
,因此在这棵树中不能有根节点。如何使它可为空?
serial
基本上是一个宏,展开后变成integer default nextval('tablename_colname_seq')
并创建一个由表所拥有的序列。对于外键来说,你不需要或者不想要这个,它仅适用于自动生成的关键列。因此使用integer
。如果你使用\dt Person
检查基础表,你会看到在表创建后id
列实际上就是integer
类型。 - Craig Ringer