我有一张 table :

CREATE TABLE ProjectCreationTasks
(
    Id           text NOT NULL PRIMARY KEY,
    ProjectName  text,
    ProjectCode  text,
    DenialReason text
);

管理员可以批准或拒绝项目创建请求。为了批准,管理员设置了 ProjectName 和 ProjectCode;要拒绝,管理员设置 DenialReason。

如何添加约束,以便:
  • Name , Code , Reason 可以同时为空
  • 如果 NameCode 都有值,则 Reason 必须为 null
  • 如果 Reason 有值,则 NameCode 都必须为 null

  • 先感谢您。

    最佳答案

    您可以使用 CHECK constaint 来实现这种逻辑:

    CREATE TABLE ProjectCreationTasks (
    Id                  text NOT NULL PRIMARY KEY,
    ProjectName         text,
    ProjectCode         text,
    DenialReason        text,
    CONSTRAINT my_constraint CHECK
    ((ProjectName IS NULL AND ProjectCode IS NULL AND DenialReason IS NULL)
     OR(ProjectName IS NOT NULL AND ProjectCode IS NOT NULL AND DenialReason IS NULL)
     OR(DenialReason IS NOT NULL AND ProjectName IS NULL AND ProjectCode IS NULL))
    );
    

    DBFiddle Demo

    关于sql - 根据其他列中的值添加 PostgreSQL 列约束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52120290/

    10-11 03:21
    查看更多