当我创建一些表时非常简单的错误,这可能只是我愚蠢但我宁愿在这里发布并将其排序。
我正在使用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)
);
错误:
错误:类型为boolean的输入语法无效:“closed”
另外,如果有人能给我一个更好的方法来做CHECK:
CHECK (status='open' OR 'closed' AND priority = 1 OR 2 OR 3)
然后真的很感激!
答案 0 :(得分: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)
答案 1 :(得分:2)
我认为两个约束条件会更好:增加粒度意味着您可以向用户提供更有意义的反馈,即他们是否需要修改Status
值,或者是Priority
值是问题?赋予每个约束一个有意义的名称将有助于“前端”编码器在此例如
...
CONSTRAINT ticket_status__invalid_value
CHECK ( Status IN ( 'open' , 'closed' ) ),
CONSTRAINT ticket_priority__invalid_value
CHECK ( Priority IN ( 1 , 2 , 3 ) ),
...