Разделение таблиц в MySQL
У меня необычная ситуация с разбиением таблицы БД; У меня есть таблица с именем 'message', содержащая информацию для сообщений, отправляемых по электронной почте:
Message Status
-------------------------------- -------------
id | subject | body | status_id status_id | caption
-------------------------------- ----------------------
1 random bla 3 1 draft
2 second hello 3 2 scheduled
15 subj ok 1 3 archived
Когда сообщение создано, его статус автоматически устанавливается на draft
, может быть scheduled
и, наконец, когда отправлено хотя бы одному контакту, его статус archived
,
Мой босс предлагает разделить сообщения three tables
названный
проект,
запланировано и
архив.
На практике почти каждый раз, когда вы ищете message
в БД для отправки (status is 'draft')
, таблица содержит большое количество ненужных данных (сообщения со статусом "заархивировано"). Но, если я разделю таблицу, каждый раз, когда я изменяю статус сообщения, я должен вставить его в соответствующую таблицу, и delete
от текущего status
Таблица.
Поскольку я не слышал о такой практике раньше, я прошу мнение. Это действительно для split
столы? заранее спасибо
2 ответа
Вам не нужно разделять таблицы для этого. Для оптимизированных запросов вы должны добавить больше индексов, в частности, вы можете использовать индекс в столбце status_id. Также я не вижу смысла в том, чтобы иметь статусы в отдельной таблице. если вам нужен заголовок, вы можете использовать его как status_id, в противном случае вы можете просто использовать обычное целое число.
На мой взгляд, это создает ненужные накладные расходы при обработке ваших сообщений. Использование status_id для фильтрации ваших результатов должно обеспечить то, что вам нужно, чтобы найти сообщения в состоянии "черновик". Пока у вас есть правильные индексы на вашей таблице, производительность не должна быть проблемой. В какой-то момент, в зависимости от объема, вы МОЖЕТЕ по-настоящему заархивировать эти сообщения в другую таблицу, но это чисто проектное соображение. Это зависит от того, нужно ли вам хранить записи этих сообщений в течение определенного периода времени.