Я пишу приложение, которое отображает сообщения, как простая система форума. Сообщения могут быть отмечены как срочные для пользователей при отправке сообщения, но модератор должен утвердить "срочный" статус. Сообщение будет по-прежнему отображаться, даже если оно не было утверждено как срочное, но будет выглядеть как обычная почта, пока модератор не одобрит срочный статус, после которого сообщение получит специальное лечение.
Я рассмотрел два подхода для этого:
1) имеют два флага в таблицах сообщений. Один из них сказал, что пользователь запросил срочный статус, а второй указал, одобрил ли администратор срочный статус. Только если оба они верны, пост будет показан как срочный.
2) имеют две таблицы. Запрошенная таблица ожидания, в которой хранятся все ожидающие срочные разрешения. После того, как администратор утвердит срочный статус, я удалю запрос из ожидающей таблицы и обновит таблицу сообщений, чтобы поле срочности стало истинным для этой записи.
Я не уверен, что любой подход лучше, чем другой.
Первое решение означает, что у меня есть только одна таблица, о которой нужно беспокоиться, но в ней больше полей. Не уверен, что это фактически делает запрос медленнее или нет, учитывая, что таблица сообщений будет самой запрашиваемой таблицей в приложении.
Второе решение сохраняет таблицу сообщений более компактной, чем реклама другой таблицы (не так сложно).
Я склоняюсь к второму решению, но задаюсь вопросом, не перестаю ли я анализировать позы и усложнять жизнь, чем это должно быть. Совет?
Определенно 1). Дополнительный стол просто разбирает вещи. Достаточно одного дополнительного поля состояния со значениями: 0 = нормальный, 1 = срочный_захват, 2 = срочный_приобретенный, например.
Вы можете запросить статус = 1 для запросов, требующих утверждения, и если вы закажете по статусу desc, вы, естественно, получите срочные сообщения вверх.
Я думаю, что вариант 1 лучший. Единственное, что вам нужно сделать, это сделать индекс с двумя полями. Опция 2 добавляет слишком много сложности
У меня есть запрос mysql только для таких вещей. Я отправлю его, как только я запомню/найду правильный синтаксис
Есть другое решение, которое приходит в голову:)
У вас может быть таблица с статусами сообщений, а в вашей таблице Posts вы будете иметь столбец, который ссылается на статус.
Этот apporach имеет несколько преимуществ - например, вы можете легко добавлять в будущем больше статусов.. или вы даже можете иметь другие правила хранения таблиц, как можно изменять статусы (рабочий процесс).
Второй подход является самым чистым с точки зрения дизайна, и он, вероятно, в конечном итоге будет использовать меньше дискового пространства. Первый подход менее "чист", но с точки зрения обслуживания и кодирования он проще; поэтому я бы пошел с таким подходом.
Кроме того, здорово видеть, что кто-то думает о дизайне, прежде чем они уйдут и напишутся коды кода.:) Не могу сказать, сколько запутанных проектов я видел, где один час размышлений о дизайне спас бы много часов усилий для всех, кто участвует...