Я создаю веб-приложение с дополнительным мобильным приложением. Скажем, для целей вопроса, что веб-приложение используется для создания сообщений, которые отправляются всем или подмножеству пользователей мобильных приложений. Я пытаюсь определить лучший способ сохранить эти сообщения.MySQL - Сохранение сообщений, отправленных большому числу пользователей
В настоящее время у меня он настроен с одной таблицей messages
, которая хранит сообщения и другую таблицу recipients
, которая хранит запись для каждого получателя за сообщение.
Например, если у меня есть сообщение с идентификатором 1
, который посылается три пользователей alex, bill, chris
, то recipients
таблица будет выглядеть следующим образом:
recipients_id | message_id | username
1 | 1 | alex
2 | 1 | bill
3 | 1 | chris
message_id
является первичным ключом messages
и username
это поле в таблице users
(я на самом деле использую INT PK, но просто использую строку для вопроса).
Теперь просто представьте, что вместо трех пользователей сообщение отправляется нескольким сотням или даже нескольким тысячам пользователей. Это все еще жизнеспособно? Я знаю, что таблицы MySQL могут обрабатывать миллионы записей, но мне просто интересно, является ли это наиболее эффективным методом.
Почему ** имя пользователь ** колонку? Лучше всего использовать только два столбца, message_id из таблицы сообщений и recipient_id из таблицы пользователей, а также временную метку отправленного сообщения. – datelligence
Поле имени пользователя, как я объяснял (или скорее подразумевал) в вопросе, просто для иллюстративных целей. Я также опускаю эти тривиальные поля, такие как созданные и измененные временные метки. Если у меня нет auto-incrementing PK для таблицы получателей, должен ли идентификатор пользователя быть идентифицирующим? – Bobe
О да, я забыл. Причина, по которой я не просто использую message_id и user_id в качестве составного ключа, состоит в том, что пользователи фактически находятся в двух разных таблицах (два типа пользователей) и поэтому будут дублироваться user_ids. – Bobe