Sql 串行外键是否可以设置为空?

Sql 串行外键是否可以设置为空?,sql,database,postgresql,Sql,Database,Postgresql,问题:我有一张带几把外键的桌子。我想让其中两个外键成为可选的(也就是说,它们可以设置为NULL)。当我尝试运行命令创建表时,出现错误: 错误:表“eventassociation”的列“activityid”的NULL/notnull声明冲突 如果我尝试在没有外键NULL声明的情况下创建表,那么这些外键将隐式变为notnull 如何使外键activityID和roleID为空 谢谢 海波兹 额外信息: 我正在ubuntu 12.04上运行postgreSQL(apt get版本) 这是有问题的表

问题:我有一张带几把外键的桌子。我想让其中两个外键成为可选的(也就是说,它们可以设置为NULL)。当我尝试运行命令创建表时,出现错误:

错误:表“eventassociation”的列“activityid”的NULL/notnull声明冲突

如果我尝试在没有外键NULL声明的情况下创建表,那么这些外键将隐式变为notnull

如何使外键
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
)
以下是
活动
表的模式供参考。roles表几乎相同,只是字段名不同

CREATE TABLE activities (
  activityID SERIAL PRIMARY KEY,
  eventID integer references events(eventID),
  name varchar(128),
  description TEXT
)

将FK列定义为
serial
没有任何意义。这意味着,每当你不提供一个值时,就会生成一个新的id,我无法想象在任何情况下这都是有意义的

我认为您实际上希望将这些列定义为
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
);
创建表活动
(
activityID串行主键,
eventID整数引用事件,
名称VARCHAR(128),
描述文本
);
创建表事件关联
(
associationID串行主键,
eventID整数引用事件,
activityID整数引用活动,
坐标确认布尔值,
用户可撤销布尔

);啊,我的印象是
SERIAL
integer
的同义词。我认为我错了,serial实际上是指带序列的整数?@64bit\u twitchyliquid您可以在这里阅读有关
serial
的详细信息: