2012-04-08 87 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 2012-04-08 16:19:12

+2

@Jimmy - 我可能会分解成2个单独的约束条件。一个用于“状态”,另一个用于“优先级”。 – 2012-04-08 16:21:24

2

我觉得两个约束会更好:增加的粒度就意味着你可以给用户,即提供更多有意义的反馈他们需要修改Status值或是它的值是Priority是什么问题?给每个约束一个有意义的名字将有助于这个例如“前端”的编码器。

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