我在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)
这不适用于外键约束,因为它只能与一个父表相关-可以用检查约束来代替吗?
答案 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);
当然,对于column1
和column2
列,您必须允许NULL
值。