Эффективно обрабатывать различные типы функции «Follow» в MySQL - PullRequest
0 голосов
/ 09 января 2020

Вот таблицы проекта

User
Car
CarPart

Таким образом, в проекте пользователь может использовать несколько типов элементов, таких как: другой пользователь, автомобиль, подмодель автомобиля, автомобильная деталь. Этот список может быть go длинным.

Технически, первая идея, которая приходит в голову, состоит в том, чтобы создать 3 сводные таблицы и использовать внешние ключи внутри:

FollowUserUser
FollowUserCar
FollowUserCarPart

Вопрос в том, правильный способ сделать это? Есть ли другой способ минимизировать количество таблиц, так как типы элементов могут увеличиться в функциональности?

1 Ответ

0 голосов
/ 09 января 2020

«Правильно» довольно субъективно.

Есть несколько альтернатив, у каждого из которых есть компромиссы.

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

Альтернативой может быть наличие одной таблицы «взаимосвязей»:

user_id
car_id
car_part_id
relationship_type

Это позволяет вам фиксировать взаимосвязи в одна таблица, но вам все равно понадобятся все объединения, чтобы узнать о пользователе, и это не так выразительно. Вы также не можете хранить пользовательские атрибуты отношений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...