Невозможно установить связь между составным ключом первичного ключа и внешним ключом - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть две таблицы: «Проекты», которые имеют три (3) поля.Один составной ключ из двух (2) полей: Donor_Source & Project_Number и Название проекта Project table design view

Обратите внимание, что поле Donor_Source проиндексировано как Да (Дубликаты ОК), а поле Project_Number проиндексировано какДа (Нет Дубликатов).Так должно быть, потому что донор может поддерживать несколько проектов.

Наконец, есть также таблица PRF_Table, в которой много полей, но, поскольку я хочу связать ее с таблицей проекта, я создал два поля, которые используютсяв качестве внешних ключей таблицы Projects: PRF_Table

Обратите внимание, что оба поля внешнего ключа проиндексированы как: NO.Поскольку я пытался связать две таблицы, мне удалось связать поле проекта из обеих таблиц, но я не смог связать поле источника-донора обеих таблиц: Relations between tables

Как может бытькак видно из рисунка выше, мне удалось получить много: 1 отношение между PRF_Table & Project, и это правильно.PRF_Table может иметь много записей о конкретном проекте, но этот проект перечисляется только один раз в таблице проектов.

Проблема возникает при попытке связать поле Donor_Source: я всегда получаю неопределенное отношение (то, чего я хочу избежать).Я предполагаю, что проблема может заключаться в том, что поле Donor_Source в таблице Project, хотя и проиндексировано, но может содержать дубликаты и, конечно, дубликаты в таблице PRF_Table.

Что нужно сделать, чтобы получить много: 1отношение (PRF_Table: проекты)?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

От вас не требуется создавать поле для Agrmnt_ID в вашем PRF_Table, чтобы иметь ссылочную целостность.То, что вы делаете до сих пор между PRF_Table и PRF-PO_Junction_Table, в порядке.

Что касается связи между Projects и PRF_Table, то кажется, что ваши намерения состоят в том, чтобы каждая запись в Projects быламожет относиться к нескольким записям в PRF_Table.Если это так, то ваше решение состоит в том, чтобы изменить ваш первичный ключ в Projects и, следовательно, в ваших отношениях между двумя таблицами.

  1. В таблице Projects удалите текущий составной первичный ключ исоздайте одно поле AutoNumber (то есть с именем ProjectID) в качестве вашего первичного ключа.

  2. Теперь в таблице Projects создайте свой уникальный индекс для Donor_Source и * 1024.* поля (составной, уникальный индекс), который даст вам тот же эффект, что и ваш текущий составной сценарий первичного ключа, каждый донор может участвовать в нескольких проектах, но один и тот же донор не может быть в одном и том же проекте более одного раза.

  3. Теперь вы создадите то же поле в PRF_Table, которое вы создали в качестве нового первичного ключа в Projects с шага 1 (т. Е. ProjectID)

  4. Создайте отношения между новым первичным ключом в Projects и новым полем в PRF_Table.Это позволит каждой записи проекта / донора в Projects иметь несколько записей в PRF_Table.

Составные первичные ключи наиболее полезны в таблицах соединений, например, как вы используете один сPRF-PO_Junction_Table.Тем не менее, в любой другой ссылке вы должны попытаться использовать одно поле первичного ключа и использовать только уникальный составной индекс для обеспечения уникальности в двух или более полях.

0 голосов
/ 23 сентября 2018

Все поля в составном ключе должны быть адресованы для создания ссылочной целостности .

Таким образом, вы должны:

  1. Создайте поле Agrmnt_ID в PRF_Table и включите его в отношение к соединительной таблице.

  2. Включите поле Donor_Source в PRF_Table в отношении таблицы Projects.

...