问题:我有一个包含几个外键的表。我想使两个外键可选(即,它们可以设置为 NULL)。当我尝试运行创建表的命令时,出现错误:
ERROR: conflicting NULL/NOT NULL declarations for column "activityid" of table "eventassociation"
如果我尝试在不为外键声明 NULL 的情况下创建表,这些外键将隐式变为 NOT NULL。
如何让外键activityID
和roleID
可以为空?
谢谢,
双氧水
额外信息:
我在 ubuntu 12.04 上运行 postgreSQL(apt-get 上的版本)。
这是有问题的表格:
CREATE TABLE eventAssociation (
associationID SERIAL PRIMARY KEY,
studentID VARCHAR(12) references volunteers(studentID),
eventID SERIAL references events(eventID),
activityID SERIAL references activities NULL,
roleID SERIAL references roles(roleID) NULL,
coordinatorConfirmed BOOLEAN,
userRevokeable BOOLEAN
)
作为引用,这里是 activities
表的架构。除了字段名称不同外,角色表几乎完全相同。
CREATE TABLE activities (
activityID SERIAL PRIMARY KEY,
eventID integer references events(eventID),
name varchar(128),
description TEXT
)
最佳答案
将 FK 列定义为 serial
没有任何意义。这意味着无论何时您不提供值,都会生成 - 我无法想象任何有意义的情况。
我认为您实际上想将这些列定义为 integer
:
CREATE TABLE activities
(
activityID SERIAL PRIMARY KEY,
eventID <b><i>INTEGER</i></b> REFERENCES events,
name VARCHAR(128),
description TEXT
);
CREATE TABLE eventAssociation
(
associationID SERIAL PRIMARY KEY,
eventID <b><i>INTEGER</i></b> REFERENCES events,
activityID <b><i>INTEGER</i></b> REFERENCES activities,
coordinatorConfirmed BOOLEAN,
userRevokeable BOOLEAN
);
关于sql - SERIAL 外键可以设置为空吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883982/