2012-04-08 2 views
1

일부 테이블을 생성 할 때 정말 간단한 오류가 발생하며 그저 바보 같지만 여기에 게시하여 정렬해야합니다.제약 조건 확인 테이블 생성시 오류 반환

저는 PostgreSQL을 사용하고 있습니다.

(이 테이블은 많은 사람들의 하나에 불과하지만 나에게 문제를주고 하나입니다)

CREATE TABLE Ticket 
(
    ID  INTEGER NOT NULL PRIMARY KEY, 
    Problem VARCHAR(1000), 
    Status VARCHAR(20) NOT NULL DEFAULT 'open', 
    Priority INTEGER NOT NULL, 
    LoggedTime TIMESTAMP NOT NULL, 
    CustomerID INTEGER NOT NULL, 
    ProductID INTEGER NOT NULL, 
    FOREIGN KEY (ProductID) REFERENCES Product(ID), 
    FOREIGN KEY (CustomerID) REFERENCES Customer(ID), 
    CHECK (status='open' OR 'closed' AND priority = 1 OR 2 OR 3) 
); 

오류 :

ERROR: invalid input syntax for type boolean: "closed"

아무도 나에게 일을 더 나은 방법을 제공 할 수 있습니다 또한 경우 확인 :

CHECK (status='open' OR 'closed' AND priority = 1 OR 2 OR 3) 

그렇다면 정말 고맙겠습니다!

답변

3

사용

CHECK (Status IN ('open','closed') AND Priority IN (1,2,3)) 

또한 내가 두 가지 제약 조건이 더 좋을 거라 생각

(Status ='open' OR Status ='closed') AND 
     (Priority = 1 OR Priority = 2 OR Priority = 3) 
+0

도움을 주셔서 감사합니다. 정확히 내가 무엇을 찾고 있었는지 :) – Jimmy

+2

@ 지미 - 나는 아마도 이것을 2 개의 분리 된 제약으로 분해 할 것이다. 하나는 '상태'이고 다른 하나는 '우선 순위'입니다. –

2

를 사용할 수는 : 단위는 사용자에게 즉,보다 의미있는 피드백을 줄 수있는 의미 증가 그들은을 개정해야합니까 Status 값 또는 문제가되는 Priority 값입니까? 각 제약을 의미있는 이름을 부여하는 것은이 예에서 '프런트 엔드'코더를 도울 것이다.

... 
CONSTRAINT ticket_status__invalid_value 
    CHECK (Status IN ('open' , 'closed')), 
CONSTRAINT ticket_priority__invalid_value 
    CHECK (Priority IN (1 , 2 , 3)), 
...