问题:我有一张带有几个外键的表。我想让两个外键可选(也就是说,它们可以设置为NULL)。当我尝试运行命令来创建表时,我收到错误:
错误:表“eventassociation”的列“activityid”的NULL / NOT NULL声明冲突
如果我尝试创建没有外键的NULL声明的表,那些外键隐式变为NOT NULL。
我怎样才能使外键activityID
和roleID
为空?
谢谢,
hypoz
额外信息:
我在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
)
答案 0 :(得分:6)
将FK列定义为serial
没有任何意义。这意味着每当你不提供一个值时,一个新的id将生成 - 我无法想象任何形成sens的情况。
我认为您确实希望将这些列定义为integer
:
CREATE TABLE activities
(
activityID SERIAL PRIMARY KEY,
eventID INTEGER REFERENCES events,
name VARCHAR(128),
description TEXT
);
CREATE TABLE eventAssociation
(
associationID SERIAL PRIMARY KEY,
eventID INTEGER REFERENCES events,
activityID INTEGER REFERENCES activities,
coordinatorConfirmed BOOLEAN,
userRevokeable BOOLEAN
);