«Основная» ассоциативная таблица?

Рассмотрим модель сопоставления клиентов и услуг. Клиенты могут быть как поставщиками, так и потребителями услуг в разное время. Клиентами могут быть отдельные лица или группы (компании), у последних несколько контактов. Контакты могут иметь несколько адресов, телефонов, электронной почты. Некоторые из этих отношений будут взаимно-однозначными (например, между услугами и поставщиком), но большинство будут отношениями «один ко многим» или «многие ко многим» (несколько контактов в компании будут иметь один и тот же адрес).

В этой модели обычно существует несколько ассоциативных таблиц, например client_contact, contract_addr, contact_phone, contact_email, service_provider, service_consumer и т. Д.

Допустим, вы выполняете простой запрос контактной информации для потребителей данной услуги. Помимо шести таблиц сущностей, содержащих данные, объединения будут ссылаться на пять ассоциативных таблиц. Конечно, ничего особенно интересного в этом типе запросов нет - мы делаем это каждый день.

Мне пришла в голову мысль: почему бы не создать единую «главную» ассоциативную таблицу, содержащую все ассоциации? Это потребовало бы, чтобы эта главная таблица имела "тип ассоциации" в дополнение к двум PK, и чтобы все PK были одного типа (целые числа, GUID и т. Д.).

С одной стороны, запросы станут более сложный, потому что для каждого соединения нужно будет указать тип и PK. С другой стороны, все объединения будут обращаться к одной и той же таблице, и при соответствующем индексировании и кэшировании производительность может резко повыситься.

Я предположил, что может существовать шаблон (или анти-шаблон), описывающий этот подход, но не нашел ничего в сети. Кто-нибудь пробовал? Если так, это масштабируется?

Мы будем признательны за любые ссылки, которые вы можете предоставить.

9
задан joelt 4 December 2010 в 23:44
поделиться