Mail-таблицы в SQL: разделять или не разделять? - PullRequest
1 голос
/ 05 марта 2012

У меня есть таблица Mails, в которой хранятся письма (кто бы мог подумать ...;)).

С крошечным MailStatus Я решаю, является ли это SentMail, Draft или ReceivedMail.

Теперь мне стало интересно, не будет ли более подходящим Table-Split, и сказал:

MailsSent

MailsDraft

MailsReceived

Вместо крошечного-флажка MailStatus.

Но это также означало бы, что мне нужно перемещать строки (вставлять в одну таблицу, удалять в другой), когда пользователь удаляет или перемещает почту, а не просто переключать int-значение.

Что вы думаете об этом?

Ответы [ 3 ]

2 голосов
/ 05 марта 2012

Лично я бы сохранил флаг и проиндексировал его.Таким образом, даже с огромной таблицей вы сможете извлечь информацию из таблицы достаточно быстро.Вы можете изменить флаг, только если почта переместилась из одной папки в другую, что уменьшит нагрузку на сервер и файл журнала.

2 голосов
/ 05 марта 2012

С точки зрения кода намного проще обрабатывать перечисление, чем обрабатывать различные типы.

И с точки зрения БД причины хранения этих очень похожих данных в разных таблицах:

  • проблемы с производительностью
  • проблемы с размером (одна таблица становится слишком большой)
  • проблемы нормализации в дБ (нулевые значения для поля SentDateTime и т. Д.)

В большинствеВ таких случаях вы никогда не столкнетесь с проблемами размера / производительности, поэтому вопрос в том, насколько нормализованы ваши данные.Если вас это не волнует, не усложняйте ситуацию: Оставьте ее в одной таблице и используйте перечисление (int) в таблице для разграничения статуса.

2 голосов
/ 05 марта 2012

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

Затем используйте внешний ключ в таблице Mail для MailFolders. Некоторые папки можно назначить системными, а другие - пользовательскими (и включать внешний ключ пользователя).

Опять же, все зависит от дизайна вашего приложения и требований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...