Привет! Есть такое приложение с базой mysql:
- Пользователь A регистрируется на сайте, импортирует свою записную книжку
- Если друг B из записной книжки регистрируется в приложении, то пользователю A придет уведомление вида "Твой контакт зарегистрировался в приложении! Скорее добавляй его в друзья"
- Пользователь A может отправить заявку в друзья пользователю B
С организацией друзей все плюс минус понятно - таблица friendships: id, date, userId, friendId, canWrite. При добавлении друга в эту таблицу сразу добавляется две записи: для пользователя A и для пользователя B.
А как лучше хранить список контактов в бд? Первое что пришло в голову - таблица contacts: id, date, userId, friendPhoneNumber, но смущает вот что:
1. 10.000 пользователей импортируют свои 100-200 контактов - в бд уже будет >1 млн записей
2. Если строк будет очень много, то будет ли тормозить обычный select? на userId и phoneNumber будут индексы
Что привлекает:
1. простой селект вида select userId from contacts where phoneNumber = '...', который позволит быстро получить всех юзеров, у которых есть нужный контакт
Поискав решения узнал, что в posgtresql есть тип колонки — массив. На первый взгляд это кажется хорошим решением: прям в таблице user храним contacts: varshar[], но нет уверенности как быстро будет осуществляться селект юзеров, у который есть определенный контакт.
Может есть еще какие-то оптимальные решения? Строгих ограничений по бд нет, можно с mysql уйти в postgresql, например