Oracle外键约束-检查约束语法?

时间:2018-08-10 01:17:21

标签: oracle key constraints

我在oracle中有一个子表,该子表有两个外键列,分别与两个不同的父表有关。我想创建一个约束,规定孩子必须至少有一个父母(例如,父母)。

ALTER TABLE table_name
ADD CONSTRAINT constraint_name
   FOREIGN KEY (column1)
   REFERENCES parent_table (column1)
   OR
   FOREIGN KEY (column2)
   REFERENCES parent_table_2 (column1)

这不适用于外键约束,因为它只能与一个父表相关-可以用检查约束来代替吗?

2 个答案:

答案 0 :(得分:0)

外键约束确保引用完整性,而不是强制值。 我认为您必须将FK约束和其他检查约束分开,如下所示:

alter table table_name 
    add constraint c_check_cols 
        check(column1 is not null or column2 is not null);

答案 1 :(得分:0)

您可以在约束条件下做到这一点:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name_1
   FOREIGN KEY (column1)
   REFERENCES parent_table (column1);

ALTER TABLE table_name
ADD CONSTRAINT constraint_name_2
   FOREIGN KEY (column2)
   REFERENCES parent_table_2 (column1);

ALTER TABLE table_name
ADD CONSTRAINT constraint_name_3
        check (COALESCE(column1, column2) IS NOT NULL);

当然,对于column1column2列,您必须允许NULL值。