Доступ со ссылочной целостностью

У меня есть две таблицы в базе данных доступа. Первая таблица называется «Программа», ее поля - «Идентификатор программы» и «Имя программы», идентификатор программы является первичным ключом для этой таблицы. Вторая таблица называется «Партнер», ее поля - «Идентификатор партнера» и «Имя партнера», идентификатор партнера - это первичный ключ для таблицы «Партнер». У меня есть еще одна таблица, которая представляет собой таблицу пересечений, в которой показаны все связи между программой и таблицами партнеров. В таблице пересечений есть поля «Идентификатор программы», «Название программы», «Идентификатор партнера» и «Имя партнера». У меня есть отношение «один-много» между таблицей программ и таблицей пересечений, а также отношение «один-несколько» между таблицей партнеров и таблицей пересечений. У меня также выбрана ссылочная целостность для обоих этих отношений (выбраны как обновление, так и удаление). Моя проблема: если я внесу какие-либо изменения в имя программы в таблице программ, я хочу, чтобы это изменение было обновлено и в поле имени программы таблиц пересечений. Аналогично для поля «Имя партнера». Я не могу этого сделать. Я попытался добавить поле имени программы к существующей связи в идентификаторе программы между программой и таблицей пересечений, но доступ не позволяет мне обеспечить ссылочную целостность, это дает ошибку: «Нет уникального индекса для указанного поля в первичном Таблица". Я также попытался создать уникальный индекс в поле имени программы (не первичный ключ). Может ли кто-нибудь посоветовать мне несколько вариантов. Спасибо.


person Ksagar    schedule 10.09.2013    source источник


Ответы (1)


Ваша таблица пересечений не должна включать Имена программы / партнера вообще, она должна включать только значения ID программы / партнера.

Сохраняя копии имен в таблице пересечений, вы денормализовали свои данные. Обычно это считается «плохим».

person Gord Thompson    schedule 10.09.2013
comment
Хорошо, я думаю, что могу удалить поля имени из таблицы пересечений. Но просто чтобы ответить на мой вопрос, есть ли способ обновить поле имени программы в таблице пересечений, если они были изменены в таблице программ. Если да, то как мне это сделать? - person Ksagar; 10.09.2013
comment
@Ksagar Если вы действительно хотите сохранить текущий (плохой) дизайн, вы можете создать уникальный индекс для полей [ProgramID] и [ProgramName], а затем обновить Relationship, чтобы включить оба из эти поля. Я просто попробовал очень простую настройку, и, похоже, у меня она сработала, но я настоятельно рекомендую НЕ хранить имена программ / партнеров в таблице пересечений. - person Gord Thompson; 10.09.2013