0

У меня есть эти таблицы:ссылается внешний ключ, который является первичным ключом с другим ключом на родительской таблице

create table t_table(t1 int, constraint tprim primary key(t1)); 

create table parent_table(t1 int, p1 int, p2 int, constraint pprim primary key(t1, p1)); 

create table child_table(t1 int, c1 int, p1 int, constraint cprim primary key(t1, c1), constraint fchild foreign key (p1) references parent_table(p1)); 

я получаю эту ошибку при создании второй таблицы:

ORA-02270: no matching unique or primary key for this column-list 

p1 в parent_table не уникален, поэтому я не могу сделать его уникальным для решения проблемы.

В этом случае, как сказать, что p1 является внешним ключом в дочерней таблице, которая ссылается на parent_table (p1)?

благодарит заранее.

ответ

2

Вы не можете. Внешний ключ ссылается на первичный ключ. Возможно, вы хотите включить t1 в внешний ключ в child_table? Или, если вам действительно нужно что-то вроде p1 быть FK в child_table, возможно, вам нужна еще одна таблица, только для p1, с уникальными значениями? Затем p1 в parent_table и child_table - это FK, указывающий на эту дополнительную таблицу.

+0

пожалуйста, что вы имели в виду 'Может быть, то, что вы хотите сделать, это включить t1 внешнего ключа к child_table?', Вы имеете в виду в том же ограничение внешнего ключа (с p1), если это так, как это возможно, если два ключа принадлежат к разным таблицам? –

+0

@ youzking - они не принадлежат к разным таблицам. (t1, p1) в ссылках child_table (t1, p1) в parent_table - даже если ни один t1 сам по себе, ни p1 не являются PK для parent_table. Пара первичного ключа IS и что вам разрешено ссылаться на child_table. – mathguy

+0

о да, конечно, потому что t1 был первым первичным ключом в t_table, я представляю себе, что он принадлежит t_table, я забыл, что это было одно и то же имя в child_table. большое спасибо. –

0

это не возможно, вы должны ссылаться на первичный ключ

Смежные вопросы