Q

Foreign key referencing only part of composite primary key

If you refer a composite primary key of a master table, you have to refer all the fields of the composite primary key. But how to partially refer the composite primary key in a child table?

If you refer a composite primary key of a master table, you have to refer all the fields of the composite primary...

key. But how to partially refer the composite primary key in a child table? For example, if Table1 has primary key (A,B,C), how to create a foreign key in Table2 which will refer only (A,B) fields of Table1?

This may or may not be possible, depending on whether all combinations of column values for (A,B) are unique.

For example, consider the following data for Table1:

A  B   C
2  PQ  9
2  PQ  37
3  AB  21
4  BC  55

In this case, you cannot define a foreign key relationship to (A,B), simply because the various combinations of values for A and B are not unique in Table1.

On the other hand, if (A,B) are unique, then you can define a foreign key relationship, but it must be on a separate unique key, and not on the primary key.

create table Table1
( A integer not null
, B char(2) not null
, C integer not null
, primary key (A,B,C)
, unique (A,B)
);
create table Table2
( M integer not null
, N char(2) not null
, Z datetime
, foreign key (M,N) references Table1 (A,B)
)

Here you can see that the foreign key in Table2 refers to Table1, by specifying the exact columns that it relates to. This will fail unless there is a unique key on those columns in Table1.

Just as an observation, if Table1 has a primary key of (A,B,C) as well as a unique key of (A,B), then (A,B) could just as easily be the primary key instead. Furthermore, if Table1 has a primary key of (A,B,C) as well as a unique key of (A,B), then it is possible that there exists some other table, let's call it Table0, which has (A,B) as its primary key, and then (A,B) in Table1 could also be a foreign key to the primary key of Table0. In fact, perhaps your Table2 is actually Table0, and the foreign key should not be from Table2 to Table1, but from Table1 to Table2!!

This was last published in September 2005

Dig Deeper on Oracle and SQL

PRO+

Content

Find more PRO+ content and other member only offers, here.

Have a question for an expert?

Please add a title for your question

Get answers from a TechTarget expert on whatever's puzzling you.

You will be able to add details on the next page.

Join the conversation

4 comments

Send me notifications when other members comment.

By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Please create a username to comment.

Very interesting topic, good work.
Cancel
useful and very informative
Cancel
This is a very important article, I think must be read by all the beginners, coz at some point of time every one has to stumble upon such issues as the one addressed here. thanks alot i will keep this webpage in my favourites for ever. Thanks again
Cancel
this is very helpful.
Cancel

-ADS BY GOOGLE

SearchDataManagement

SearchBusinessAnalytics

SearchSAP

SearchSQLServer

TheServerSide

SearchDataCenter

SearchContentManagement

SearchFinancialApplications

Close