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)
);

错误:

错误:布尔类型的无效输入语法:“关闭”

另外,如果有人可以给我一个更好的检查方法:

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

那将不胜感激!

4

2 回答 2

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)
于 2012-04-08T16:11:47.090 回答
2

我认为有两个约束会更好:增加粒度意味着您可以向用户提供更有意义的反馈,即他们是否需要修改Status值或者Priority问题是值?给每个约束一个有意义的名称将有助于“前端”编码器,例如

...
CONSTRAINT ticket_status__invalid_value
    CHECK ( Status IN ( 'open' , 'closed' ) ), 
CONSTRAINT ticket_priority__invalid_value 
    CHECK ( Priority IN ( 1 , 2 , 3 ) ), 
...
于 2012-04-10T09:42:51.153 回答