powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как создать связь многие-ко-многим (+)
4 сообщений из 4, страница 1 из 1
Как создать связь многие-ко-многим (+)
    #33243207
Kezya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем здравствуйте.
Есть проект производства (таблица Project). Для производства зарезервированы определенные комплектующие (табл. ProjectComponents). Производство состоит из нескольких этапов (табл. ProjectStage). Комплектующие из набора для производства необходимо "распределить" по этапам, чтобы знать, на каком этапе какие комплектующие и в каком количестве потребуются. Между таблицами ProjectStage и ProjectComponents надо создать связь многие-ко-многим. Причем хотелось бы еще и целостность сохранить, чтобы в ассоциативной таблице (Processing) были этапы только из определенных для данного производства этапов, и с комплектующими то же самое. Но создать связи между таблицами ProjectStage-Processing и ProjectComponents-Processing я не могу, т.к. в таблице ProjectStage внешний ключ ID_TypeStage уникален только в пределах одного проекта, и в таблице ProjectComponents внешний ключ ID_Cmp уникален только в пределах одного проекта. Поэтому ссылаться на них из таблицы Processing я не могу :(
Подскажите, пожалуйста, как лучше это реализовать?
Спасибо.
...
Рейтинг: 0 / 0
Как создать связь многие-ко-многим (+)
    #33243223
Фотография Castor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ввести доп. таблицы "переходов", содержащие ключи
...
Рейтинг: 0 / 0
Как создать связь многие-ко-многим (+)
    #33243287
Shr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня примерно так вполне работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table Processing (
  ID_Project integer not null,
  ID_TypeStage integer not null,
  ID_Cmp integer not null,
  ...
  primary key (ID_Project, ID_TypeStage, ID_Cmp
);

alter table Processing add constraint fk_processing_ps
 foreign key (ID_Project, ID_TypeStage) references ProjectStage(ID_Project, ID_TypeStage);

alter table Processing add constraint fk_processing_pc
 foreign key (ID_Project, ID_Cmp) references ProjectComponent(ID_Project, ID_Cmp);
Т.е поле ID_Project участвует и в первичном и во внешних ключах. Заодно поддерживается целостность, которую при полностью суррогатных ключах (ID в таблицах-ассоциациях) пришлось бы поддерживать триггерами.
...
Рейтинг: 0 / 0
Как создать связь многие-ко-многим (+)
    #33243741
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ограничение "Тот же родитель" просто реализуется при идентифицирующей миграции ключа из родителя Project в промежуточные таблицы - ProjectStage и ProjectComponents (как у вас и сделано). Естественный он или суррогатный -не важно. Далее в Processing поле ID_Project не обязан быть частью первичного ключа Processing, достаточно двух внешних ключей с участием ID_Project (как в посте Shr - но первичный ключ может быть и другим).
Классификация и применение ключей
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как создать связь многие-ко-многим (+)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]