Простой ответ заключается в том, что они оба.
ssn, org_code
должен быть первичным ключом person_organization
.
ssn
должен быть внешним ключом обратно в лицо иorg_code
должен по внешнему ключу вернуться в organization
.
Чтобы отделить себя от ответа северного полюса Я на самом деле не согласен с аргументом суррогатного ключа, в данном случае это не таккажется, что это необходимо, так как он больше нигде не будет использоваться.
К сожалению, проблема с этим (хорошим) решением связи «многие ко многим» заключается в том, что часто необходимо иметь два уникальных ключа в таблице, ssn, org_code
и org_code, ssn
и выберите один из них в качестве первичного ключа.
Поскольку вы используете Oracle, синтаксис создания таблицы будет
create table person_organization
( ssn number(9)
, org_code varchar2(60)
, constraint person_organization_pk primary key (ssn, org_code)
, constraint person_organization_ssn_fk foreign key ( ssn )
references person ( ssn )
, constraint person_organization_oc_fk foreign key ( org_code )
references organization ( org_code )
);
В вашем оригинальном скрипте создания таблицы у вас было ssn
как numeric(9)
, что должно быть number(9)
.Возможно, вы захотите не ограничивать размер этого типа данных.У вас также было org_code
как varchar
, это, вероятно, должно быть varchar2
.
Технология в сети - действительно хороший ресурс для изучения синтаксиса.