Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не получается подключить таблицу со составным первичным ключом к двум разным таблицам

Иван Ртов Знаток (383), на голосовании 5 месяцев назад
Используется Microsoft SQL Server. В общем, у меня есть 4 таблицы. Таблица GroupsTeachers является промежуточной между Groups и Teachers и должна связывать их, что она и делает. Однако, мне также нужно, чтобы в таблице Teachers был еще один первичный ключ для того, чтобы соединить его с другой промежуточной таблицей DisciplinesTeachers. Но когда я создаю в таблице Teachers составной первичный ключ, чтобы иметь два первичных ключа и соединить эту таблицу в обе стороны, у меня пишет ошибку. Однако, когда я использую по одному первичному ключу, то все работает. Из этого я делаю вывод, что почему то составной первичный ключ в Teachers не работает.
Голосование за лучший ответ
Татьяна Просветленный (36377) 6 месяцев назад
Ваша проблема связана с использованием составных первичных ключей в таблице Teachers, что приводит к ошибкам при попытке соединения с другими таблицами. Составные первичные ключи могут создавать сложности, особенно при настройке связей между таблицами.

Рассмотрим ваш случай более детально. У вас есть таблицы:

Groups
Teachers
GroupsTeachers - промежуточная таблица для связи Groups и Teachers
DisciplinesTeachers - таблица для связи Teachers с Disciplines
Если вы хотите создать составной первичный ключ в таблице Teachers, вам нужно убедиться, что этот составной ключ правильно используется в связях.

Шаги для настройки:
Проверьте структуру таблицы Teachers:

Убедитесь, что столбцы, которые вы хотите использовать в составном первичном ключе, уникальны и могут быть использованы для связи с другими таблицами.
Определите составной первичный ключ в таблице Teachers:
 ALTER TABLE Teachers 
ADD CONSTRAINT PK_Teachers PRIMARY KEY (ID_Teacher, idTeacherGroup);
Настройте внешние ключи в промежуточных таблицах:

В таблице GroupsTeachers установите внешний ключ для связи с таблицей Teachers:
 ALTER TABLE GroupsTeachers 
ADD CONSTRAINT FK_GroupsTeachers_Teachers
FOREIGN KEY (id_GroupsTeachers) REFERENCES Teachers(ID_Teacher, idTeacherGroup);
В таблице DisciplinesTeachers установите внешний ключ для связи с таблицей Teachers:
 ALTER TABLE DisciplinesTeachers 
ADD CONSTRAINT FK_DisciplinesTeachers_Teachers
FOREIGN KEY (ID_Teacher) REFERENCES Teachers(ID_Teacher, idTeacherGroup);
Проверьте все связи и убедитесь, что нет ошибок:

Убедитесь, что все связи корректно настроены и таблицы могут взаимодействовать друг с другом.
Если вы все сделали правильно, но все равно получаете ошибку, возможно, проблема связана с тем, что составные ключи не поддерживаются в текущей версии вашего SQL Server или есть другая структурная проблема в базе данных.

Альтернативное решение:
Если проблемы продолжаются, можно рассмотреть вариант использования суррогатных ключей (например, уникальных идентификаторов), чтобы упростить связи между таблицами. Это может помочь избежать проблем с составными первичными ключами.
Похожие вопросы