В настоящее время я создаю базу данных с большим количеством отношений "многие ко многим". Все отношения были смоделированы через таблицу ссылок. Пример:
У человека есть ряд рабочих мест, рабочие места выполняются рядом лиц. У человека есть несколько домов, дома заняты несколькими лицами. У человека есть несколько ресторанов, которые ему нравятся, в ресторанах есть несколько человек, которым нравится ресторан.
Сначала я сконструировал это следующим образом:
Таблицы: Person, Job, House, Restaurant, Person_Job, Person_House, Person_Restaurant.
Отношения 1 - n: Лицо → Person_Job, Person → Person_House, Person → Person_Restaurant, Job → Person_Job, House → Person_House, Restaurant → Person_Restaurant.
Это довольно быстро приводит к переполненной и сложной модели ER.
Пытаясь упростить это, я смоделировал его следующим образом:
Таблицы: персона, работа, дом, ресторан, персонализированные атрибуты
Отношения 1 - n: Person → Person_Attributes, Job → Person_Attributes, House → Person_Attributes, Restaurant → Person_Attributes
Таблица Person_Attributes должна выглядеть примерно так: PersonId JobId houseId restaurantId
Если существует связь между человеком и работой, я добавлю следующую запись:
P1, J1, NULL, NULL
Если отношения между людьми существуют, я добавлю следующую запись:
P1, NULL, H1, NULL
Таким образом, таблица атрибутов во втором примере будет иметь такое же количество записей, что и таблицы ссылок из приведенных первых примеров.
Это просто упрощает модель ER, и пока я создаю индексы для personId + jobId, personId + houseId и personId + restaurantId, я думаю, что не будет большого влияния на производительность.
Мои вопросы: Является ли второй метод правильным способом моделирования этого? Если нет, то почему? Правильно ли я влияю на производительность? Если нет, то почему?
Пример Workbench MySQL, что я имею в виду, можно найти здесь: