Skip to content Skip to sidebar Skip to footer

Foreign Key For Either-or Column?

Is it possible to have a foreign key that requires either column A or column B to have a value, but not both. And the foreign key for column A matches Table 1 and the foreign key

Solution 1:

A check constraint can handle this. If this is SQL Server, something like this will work:

createtable A (Id intnotnullprimary key)
go
createtable B (Id intnotnullprimary key)
go
createtable C (Id intnotnullprimary key, A_Id intnull, B_Id intnull)
go
altertable C addconstraint FK_C_A
foreign key (A_Id) references A (Id)
go
altertable C addconstraint FK_C_B
foreign key (B_Id) references B (Id)
go
altertable C addconstraint CK_C_OneIsNotNull
check (A_Id isnotnullor B_Id isnotnull)
go
altertable C addconstraint CK_C_OneIsNull
check (A_Id isnullor B_Id isnull)
go

Solution 2:

It depends on which database you're working with. If you want a table Foo that has FK relationships to Table1 and to Table2 but only one at a time, then you'll need to set up either some sort of trigger (my links assume SQL Server, but the ideas's the same) or Constraint to enforce your rule that only one column have a value.

Solution 3:

it is not necessary that a column have values in it at that time of applying foreign key,but the column name would be same and the data types as well.

Post a Comment for "Foreign Key For Either-or Column?"