Рассмотрим модель сопоставления клиентов и услуг. Клиенты могут быть как поставщиками, так и потребителями услуг в разное время. Клиентами могут быть отдельные лица или группы (компании), причем последние имеют несколько контактов. Контакты могут иметь несколько адресов, телефонов, e-mail. Некоторые из этих отношений будут отношениями «один к одному» (например, услуга поставщику), но большинство из них будут отношениями «один ко многим» или «многие ко многим» (несколько контактов в компании будут иметь один и тот же адрес).
В этой модели обычно существует несколько ассоциативных таблиц, например, client_contact, contract_addr, contact_phone, contact_email, service_provider, service_consumer и т. д.
Скажем, вы делаете простой запрос контактной информации для потребителей данной услуги. В дополнение к шести таблицам сущностей, содержащим данные, соединения будут ссылаться на пять ассоциативных таблиц. Конечно, ничего особенно интересного в такого рода запросах — мы делаем это каждый день.
Однако мне пришло в голову: почему бы не иметь единую «главную» ассоциативную таблицу, содержащую все ассоциации? Потребуется, чтобы эта главная таблица имела «тип ассоциации» в дополнение к двум ПК, и чтобы все ПК были одного типа (целые, GUID и т. д.).
С одной стороны, запросы стали бы более сложными, потому что для каждого соединения нужно было бы указывать тип и PK. С другой стороны, все соединения будут иметь доступ к одной и той же таблице, и при соответствующем индексировании и кэшировании производительность может значительно возрасти.
Я предположил, что может быть шаблон (или анти-шаблон), описывающий этот подход, но ничего не нашел в Интернете. Кто-нибудь пробовал? Если да, то масштабируется?
Любые ссылки, которые вы можете предоставить, будут оценены.