#sql #database #oracle #foreign-keys #foreign-key-relationship
#sql #База данных #Oracle #внешние ключи #foreign-key-relationship
Вопрос:
у меня есть эти таблицы :
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
это внешний ключ в дочерней таблице, который ссылается на родительскую таблицу (p1)?
заранее спасибо.
Ответ №1:
Вы не можете. Внешний ключ ссылается на первичный ключ. Возможно, то, что вы хотите сделать, это включить t1 во внешний ключ child_table? Или же, если вам действительно нужно что-то вроде p1, чтобы быть FK в child_table, возможно, вам нужна еще одна таблица, только для p1, с уникальными значениями? Тогда p1 как в родительской, так и в дочерней таблицах является FK, указывающим на эту дополнительную таблицу.
Комментарии:
1. пожалуйста, что вы имели в виду
Perhaps what you want to do is to include t1 in the foreign key to child_table?
, вы имеете в виду в том же ограничении внешнего ключа (с p1), если это так, как это возможно, если два ключа принадлежат разным таблицам?2. @youzking — они не принадлежат разным таблицам. (t1, p1) в ссылках на дочернюю таблицу (t1, p1) в родительской таблице — даже если ни только t1, ни только p1 не являются PK для родительской таблицы. Пара ЯВЛЯЕТСЯ первичным ключом, и вам разрешено ссылаться на нее из child_table.
3. о да, конечно, поскольку t1 был первым первичным ключом в t_table, я полагаю, что он принадлежит t_table , я забыл, что это было то же самое имя в child_table. большое вам спасибо.
Ответ №2:
это невозможно, вы должны ссылаться на первичный ключ