如何将一组列约束为全部为 NULL 或全部为 NOT NULL

How to constrain a set of columns to all be NULL or all be NOT NULL

假设我有一个像这样的 table,

id | first name | middle name | last name

现在,name 列可以是 NULL,但是如果这三个中的任何一个,例如 first nameNOT NULL,那么这三个都必须是 NOT NULL.

我如何在 Oracle 中执行此操作?

说,

alter table your_table 
  add constraint set_of_column_chk
  check (nvl2(first_name, 1, 0) + nvl2(middle_name, 1, 0) + nvl2(last_name, 1, 0) in (0, 3));

您可以根据需要的逻辑编写检查约束。 例如:

alter table yourTable
  add constraint check_not_null check
    (   
        first_name  is not null and
        middle_name is not null and
        last_name   is not null
      OR
        first_name  is null and
        middle_name is null and
        last_name   is null
    );