Правильный способ хранения запросов в базе данных Mysql (или любой другой) - PullRequest
2 голосов
/ 30 августа 2011

Каков «правильный» (наиболее нормализованный?) Способ хранения запросов в базе данных?Например, пользователь отправляет статью.Эта статья должна быть рецензирована и одобрена до публикации на сайте.

Что является более правильным способом:

A) сохраните его в таблице «Статьи» с полем «Утверждено», равным 0, 1, 2 (отклонено, одобрено, ожидает рассмотрения)

ИЛИ

B) Наличие таблицы ArticleRequests, которая имеет те же поля, что и Статьи, и после утверждения переместите данные строки из ArticleRequests в Статьи.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 30 августа 2011

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

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

EDIT : причины сохранения полей в связанных таблицахявляются:

  • Если связанное поле не всегда применимо или часто может быть null.
  • Если связанное поле необходимо только в редких случаях и лучше описать с помощьювнешний ключ в связанной таблице связанных атрибутов.

В вашем случае вышеуказанные причины не применяются.

2 голосов
/ 30 августа 2011

Определенно сделайте 'A'.

Если вы сделаете B, вы создадите новую таблицу с теми же полями, что и у другой, и это означает, что вы делаете что-то неправильно.Ты повторяешься.

1 голос
/ 30 августа 2011

Я думаю, что лучше хранить данные в основной таблице с определенным статусом. Потому что нет необходимости перемещать данные между таблицами, если эта таблица утверждена и статья появится на сайте одновременно. Если вы не хотите хранить отклоненные статьи, вы должны создать скрипт cron, который удалит ненужные данные или переместит их в архивную таблицу. В этом случае у вас будет меньше загрузки вашей базы данных, потому что вы можете отрегулировать правильное время для удаления старых статей, например, ночью.

Относительно проблемы с использованием статуса подтверждения в каждом запросе: если вы планируете иметь очень популярный сайт с высокой нагрузкой для поиска или составления списка статей, вы будете использовать автономный сервер, такой как sphinx или solr (mysql не является хорошим решением для этих целей ), и вы добавите к ним данные со статусом «Одобрено». Использование дельта-индексации помогает поддерживать ваши данные в актуальном состоянии.

...