2014-09-17 4 views
1

질문 : 두 개의 외래 키가있는 테이블이 있습니다. 두 개의 외래 키를 선택적으로 만들고 싶습니다 (즉, NULL로 설정할 수 있습니다). 나는 시도하고 외래 키에 대한 NULL 선언하지 않고 테이블을 작성하는 경우, 그 외부 키가 암시 적으로 NOT NULL이 될SERIAL 외래 키를 null로 설정할 수 있습니까?

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

: 나는 테이블을 생성하는 명령을 실행하려고하면, 나는 오류가 발생합니다.

외래 키 activityIDroleID이 null 일 수 있도록하려면 어떻게해야합니까?

감사합니다,

hypoz

추가 정보 :

내가 PostgreSQL을 실행하고 (는 apt-get 버전) 우분투 12.04에.

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 
) 

답변

4

FK 인 열을 serial으로 정의하는 것은 의미가 없습니다. 즉, 값을 제공하지 않을 때마다 이 생성되고이 생성됩니다. 나는 그것이 어떤 상황에서 일어날 지 상상할 수 없습니다.

나는 당신이 실제로 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 
);
+0

아, 나는'SERIAL'는'integer'의 동의어 이었다는 것을 인상이었다. 나는 그것을 잘못 받아 들인다. 그리고 연속은 실제로 연속열을 가진 정수를 의미한다? –

+0

이 솔루션은 완벽하게 작동했습니다. –

+0

@ 64bit_twitchyliquid'SERIAL'에 대한 자세한 정보는 다음에서 볼 수 있습니다 : http://www.postgresql.org/docs/current/static/datatype-numeric.html –

관련 문제