«Правильно» довольно субъективно.
Есть несколько альтернатив, у каждого из которых есть компромиссы.
Для описываемого вами дизайна требуется одна таблица для каждого отношения, что означает, что количество соединений для извлечения информации о (например) пользователе увеличивается с количеством отношений. Это не проблема с точки зрения производительности, но может сделать ваши запросы сложными. Дизайн делает ссылки очень явными, что обычно полезно для будущих разработчиков, и позволяет добавлять пользовательские данные в каждое отношение - «пользователь следует за пользователем» может иметь атрибут «роль» (начальник, коллега, друг и т. Д. c). ), что не относится к «пользователь следует за машиной».
Альтернативой может быть наличие одной таблицы «взаимосвязей»:
user_id
car_id
car_part_id
relationship_type
Это позволяет вам фиксировать взаимосвязи в одна таблица, но вам все равно понадобятся все объединения, чтобы узнать о пользователе, и это не так выразительно. Вы также не можете хранить пользовательские атрибуты отношений.