Я сделаю это следующим образом,
Message Table
ID
FromUserID int FK
ToUserID nullable int FK
Title
MessageBody
Здесь, когда ToUserID равен нулю, тогда сообщение предназначено для всех.В противном случае это личное для ToUserID.Запросы также просты,
Чтобы отобразить все сообщения для одного пользователя и пользователей, которым вы транслируете,
Context.Messages.Where(
x=> x.ToUserID == null ||
x.ToUserID == currentUserID
);
При таком подходе вы не будете хранить несколько сообщений для широковещания.Но если вы хотите, чтобы пользователь удалил это сообщение, у вас нет другого выбора, кроме как вставить все записи для каждого пользователя.