Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как создать связь многие-ко-многим (+) / 4 сообщений из 4, страница 1 из 1
31.08.2005, 12:41
    #33243207
Kezya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать связь многие-ко-многим (+)
Всем здравствуйте.
Есть проект производства (таблица Project). Для производства зарезервированы определенные комплектующие (табл. ProjectComponents). Производство состоит из нескольких этапов (табл. ProjectStage). Комплектующие из набора для производства необходимо "распределить" по этапам, чтобы знать, на каком этапе какие комплектующие и в каком количестве потребуются. Между таблицами ProjectStage и ProjectComponents надо создать связь многие-ко-многим. Причем хотелось бы еще и целостность сохранить, чтобы в ассоциативной таблице (Processing) были этапы только из определенных для данного производства этапов, и с комплектующими то же самое. Но создать связи между таблицами ProjectStage-Processing и ProjectComponents-Processing я не могу, т.к. в таблице ProjectStage внешний ключ ID_TypeStage уникален только в пределах одного проекта, и в таблице ProjectComponents внешний ключ ID_Cmp уникален только в пределах одного проекта. Поэтому ссылаться на них из таблицы Processing я не могу :(
Подскажите, пожалуйста, как лучше это реализовать?
Спасибо.
...
Рейтинг: 0 / 0
31.08.2005, 12:45
    #33243223
Castor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как создать связь многие-ко-многим (+)
ввести доп. таблицы "переходов", содержащие ключи
...
Рейтинг: 0 / 0
31.08.2005, 13:05
    #33243287
Shr
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
31.08.2005, 15:21
    #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]