Построение схемы базы данных "многие ко многим" с использованием только непредсказуемого количества внешних ключей
Добрый день (по крайней мере где-то здесь),
У меня есть схема отношений "многие ко многим", и у меня возникают проблемы при построении. Основная проблема заключается в том, что я работаю только с первичными и внешними ключами (без varchars или перечислений, чтобы упростить вещи), и число отношений "многие ко многим" не предсказуемо и может увеличиться в любое время.
Я огляделся по разным вопросам и не смог найти то, что напрямую касалось этой проблемы.
Я разделил проблему пополам, и теперь у меня есть две схемы "один ко многим". Один решен, но другой дает мне приступы.
Давайте предположим, что таблица FOO - это стандартная скучная таблица с простым первичным ключом. Это один в отношениях один-ко-многим.
Таблица BAR может относиться к нескольким ключам FOO. Количество связанных ключей заранее неизвестно.
Пример:
- Из запроса FOO возвращает идентификаторы 3, 4, 5.
- BAR нужен уникальный ключ, который относится к 3, 4, 5 (хотя может быть любое количество возвращенных идентификаторов)
Обычная таблица соединений не работает:
Table FOO_BAR
primary_key | foo_id | bar_id |
Так как FOO возвращает 3 уникальных ключа, и здесь bar_id имеет непосредственное отношение с foo_id.
Наличие двух таблиц соединения, похоже, тоже не работает, так как по-прежнему нельзя сопоставить foo_ids 3, 4, 5 с одним bar_id.
Table FOO_TO_BAR
primary_key | foo_id | bar_to_foo_id |
Table BAR_TO_FOO
primary_key | foo_to_bar_id | bar_id |
Что я делаю неправильно? Я делаю вещи более сложными, чем они? Как мне подойти к проблеме? Большое спасибо за помощь.
1 ответ
FOO-BAR выглядит хорошо для меня. Почему ты не думаешь, что это работает?
Say FOO = 1,2,3
Say BAR = A,B,C
Then an everything to everything relation will look like:
FOOBAR = 1, A; 1, B; 1, C; 2, A; 2, B; 2, C; 3, A; 3, B; 3, C
Вы можете сделать первичный ключ foo_id, bar_id без отдельного ключа, если он вам действительно не нужен, и это позволит избежать дублирования отношений.