sql - SERIAL 外键可以设置为空吗?

标签 sql database postgresql

问题:我有一个包含几个外键的表。我想使两个外键可选(即,它们可以设置为 NULL)。当我尝试运行创建表的命令时,出现错误:

ERROR: conflicting NULL/NOT NULL declarations for column "activityid" of table "eventassociation"

如果我尝试在不为外键声明 NULL 的情况下创建表,这些外键将隐式变为 NOT NULL。

如何让外键activityIDroleID可以为空?

谢谢,

双氧水

额外信息:

我在 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/

相关文章:

php - 为什么这些查询这么慢?

java - 此版本的 sql server 不支持对数据库和/或服务器名称的引用

database - SetMaxOpenConns 和 SetMaxIdleConns

php - 没有显示数据 MySql php

postgresql - 使用嵌套选择优化查询

sql - 命名SQL表列的最佳实践

mysql - 错误代码 : 1822. 添加外键约束失败。缺少约束索引

mysql - 在一个表中定义多个多对多关系

php - 数据库触发器更新列后如何进行查询?

sql - 如何在 PostgreSQL/SQL 中使用结果的子串