[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как хранить сообщения в таблице
Страницы: 1, 2
Миша
Как организовать хранение сообщений, переписка между пользователями.

Какая структура?

_____________
Принимаю заказы, писать в ЛС
fghjk
Как в темах на форуме хранятся сообщения, так и в ЛС так сделай.
Только доступ к конкретному диалогу должны иметь написавший первое сообщение и адресат.
Миша
А как на форуме? Ещё не делал подобного.

_____________
Принимаю заказы, писать в ЛС
FatCat
Минимальный функционал обеспечивается такой структурой таблицы:
  • Айдишник отправителя;
  • Айдишник получателя;
  • Время отправки сообщения;
  • Текст сообщения.
При необходимости можно добавить новые плюшки: статус (прочитано / не прочитано), папка для хранения и т.д.

_____________
Бесплатному сыру в дырки не заглядывают...
stump
И еще айдишник самого сообщения!

_____________
Трус не играет в хокей
Миша
Например как устроено на этом форуме, все сообщения в темах, в одной таблице? Или разные разделы, разные таблицы.

_____________
Принимаю заказы, писать в ЛС
AllesKlar
Не знаю, как на этом форуме, но вот тебе вполне логичная структура:
Таблица разделов
category
c_id
c_name
c_sort

Таблица пользователей
users
u_id
u_name
u_еще_что_то

Таблица тем форума
topics
t_id
t_subject
t_datetime // время создания
t_lastupdate // последнее обновление
u_id // Автор темы
с_id // категория, в которой создана тема
t_еще_что_то

Таблица сообщений в темах форума
topics_messages
tm_id
t_id // тема, которой принадлежит сообщение
tm_datetime
tm_text
u_id // пользователь, запостивший что-либо в теме

Таблица ПМ (сообщения между пользователями)
messages
m_id
m_datetime
m_text
u_sender// ID отправителя
u_receiver // ID получателя
m_status // 0 - не прочитано, 1 - прочитано Может быть битовой маской, если нужны разные статусы для получателя и отправителя

_____________
[продано копирайтерам]
Миша
т.е. получается, что таблица с сообщениями будет одна на весь сайт?

_____________
Принимаю заказы, писать в ЛС
kaww
Цитата (Медведь @ 23.03.2015 - 04:50)
т.е. получается, что таблица с сообщениями будет одна на весь сайт?

Если когда-то она станет слишком большой и медленной, то есть такая штука как партицирование (для приведенной AllesKlar схемой по u_receiver, чтобы можно было получить список входящий из одной партиции. т.к. с большой долей вероятности этот запрос будет преобладать)
AllesKlar
Медведь
Получается так.
Имеет смысл разбивать на несколько таблиц (партиций) только тогда, когда у тебя огромное количество записей, и поиск записи в таблице начинает тормозить.
Но это еще рано smile.gif Как будет пара милионов записей, тогда сделаешь.
Раз ты на стадии проектирования, то тебе не помешает узнать про нормальные формы
Например, тут можно почитать http://habrahabr.ru/post/193756/

-----
пока писал, kaww уже ответил

_____________
[продано копирайтерам]
FatCat
Цитата (Медведь @ 23.03.2015 - 07:05)
Например как устроено на этом форуме

Например для простоты личные письма (темы форума намного сложней):
  `msg_id` int(10) NOT NULL auto_increment, 
`msg_date` int(10) default NULL, /* дата юниксштамп */
`read_state` tinyint(1) default NULL, /* состояние прочитано/не прочитано */
`title` varchar(128) default NULL, /* заголовок */
`message` text, /* текст */
`from_id` mediumint(8) NOT NULL default '0', /* айдишник отправителя */
`vid` varchar(32) default NULL,
`member_id` mediumint(8) NOT NULL default '0', /* айдишник получателя */
`recipient_id` mediumint(8) NOT NULL default '0', /* айдишник кому отправлялось */
`cc_users` text, /* айдишники получателей копий сообщения */
`attach_type` tinyint(128) default NULL, /* миме-тип аттача */
`attach_file` tinyint(128) default NULL, /* файл аттача */
`tracking` tinyint(1) default '0', /* отслеживание прочтения отправителем */
`read_date` int(10) default NULL, /* дата прочтения */
`groups` int(10) NOT NULL, /* идентификатор группировки писем */
PRIMARY KEY (`msg_id`),
KEY `member_id` (`member_id`),
KEY `vid` (`vid`),
KEY `groups` (`groups`)


_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.