Он довольно старый, но проблема возникает очень часто, и эта тема появляется на поисковых машинах (кто-то сказал мне;))
Хорошая возможность преодолеть эту проблему - использовать «вспомогательную таблицу» для связи с другими таблицами.
Пример:
Статья Table связана с множеством других таблиц по разным причинам. Также ей может понадобиться много внешних ключей для себя. Такие таблицы очень часто выходят из возможных индексов. У меня также есть три или четыре из них в моих самых больших проектах.
Чтобы почти удвоить число возможных объединений / индексов RI, вы можете работать с вспомогательной таблицей, которая имеет RI-соединение 1: 1 к таблице tblArticle с уникальным идентификатором как поле. Я называю это так же, как и шортлет fk перед ним, как обычно. Давайте назовем это tblArticleLinker.
Каждая таблица, которая получает внешний ключ от tblArticle, например, Order-Position, получает свое соединение от tblArticleLinker.
-> Вы не потеряете индекс для всех этих ссылок, только один для Linkertable
Единственное, что вам нужно убедиться, это то, что вы всегда добавляете ключ в таблицу ссылок при сохранении, в противном случае невозможно использовать запись.
С моей таблицей, по моему опыту, гораздо проще справиться, чем с обычным подходом разбивать поля на разные таблицы. В запросах вам особенно не нужна вспомогательная таблица (иногда запросы выполняются быстрее), вы можете напрямую ссылаться на таблицу. Это просто не выполняется автоматически, как обычно.
Типп: Тот же подход можно использовать и для того, чтобы убедиться, что пользователь может использовать только «выпущенные» записи. Или просто использовать в качестве жесткого фильтра. Это помогает преодолеть возможные программные ошибки, которые не следуют логике, которой они должны.