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