все зависит от того, как вы хотите использовать хранимые данные.
для пользовательской структуры, я бы порекомендовал сделать отношения (друг, заблокирован, ... что угодно) в отдельной таблице, т.е.
таблица «пользователь»: user_id, ник, имя, адрес электронной почты, статус, .... таблица «отношение»: user_id1, user_id2, тип_отношения
это более гибко, поскольку вы не ограничены количеством пользователейнаходятся на любой стороне отношения, но это также добавляет некоторую сложность.
относительно истории сообщений. Я бы записал каждое сообщение в таблицу как:
таблица "messages" message_id, send_by, send_to, timestamp,message_text
и выполните очистку сообщений старше ... Я полагаю, вам не нужна вся история в любом случае.
в отношении производительности это немного другой вопрос.Базы данных предназначены для обработки большого количества данных, но если вы не проиндексируете их должным образом, это будет медленно.Закончите свой дизайн стола в первую очередь.И подумайте об индексации позже - в зависимости от того, какой тип запросов вы будете выполнять.