PHP / MySQL PM Система с несколькими таблицами структуры получателей? - PullRequest
0 голосов
/ 07 ноября 2011

В настоящее время я разрабатываю систему PM для веб-сайта, на которой пользователи должны иметь возможность отправлять PM нескольким получателям. Естественно, это означает, что, если сообщение было отправлено пользователям A, B и C, пользователь C может удалить сообщение, а пользователи A и B - нет. Вопрос в том, какова будет лучшая структура таблицы базы данных для такой системы, конечно же, избегая нескольких копий одного сообщения. В настоящее время я думал об этой структуре таблицы:

msgid (int),
parentid (int),
timestamp (timestamp),
senderid (int),
recipients (varchar),
subject (varchar)
text (text),
deletedby (varchar),
readby (varchar)

Это будет единственная таблица. Потоки создаются на основе парентид (если парентид нет, сообщение является первым в цепочке) и упорядочиваются по метке времени. Получатели хранятся в одном столбце через запятую и проверяются с помощью WHERE userid IN (msg.recipients). Столбец deleteby содержит все идентификаторы (через запятую) пользователей, которые удалили сообщение, так же, как и столбец readby.

Однако я не уверен, что это идеальная структура таблицы. Прежде чем я начну кодировать, я хотел бы услышать ваши мысли по улучшению.

1 Ответ

4 голосов
/ 07 ноября 2011

Хранение значений CSV в одном поле неизменно является плохим дизайном и просто вызовет у вас сильную боль.Нормализуйте дизайн сейчас, прежде чем развернуть систему для производства: поместите список получателей в дочернюю таблицу и поместите «удаленную» плоскость в дочернюю запись, чтобы указать, удалил ли конкретный получатель сообщение или нет:

recipientsTable

messageID    int -> foreign key to messages table
recipientID   int -> foreign key to users table
read     bit - t = read, f = unread
deleted   bit - t = deleted, f = still there.
readON    date - timestamp of when recipient read message

... или что-то подобное.

...