У меня есть база данных автомобильных объявлений.
По истечении 90 дней классифицированный листинг больше не может быть отображен (листинг истекает); однако я хочу сохранить список для архивных целей.
Вопрос: с точки зрения оптимальной практики проектирования баз данных, а также с точки зрения производительности запросов, что лучше сохранить старый листинг A) в той же таблице, что и текущий листинг, или B), переместить листинг с истекшим сроком действия в таблицу с истекшим сроком действия и удалить этот листинг из текущей таблицы листинга?
Другими словами,
Вариант А):
table_classified_listing:
car_id
expired = true | false
...
Вариант Б):
// only current listing in this table (expired = false)
table_classified_listing:
car_id
...
// only expired listing in this table (expired = true)
expired_table_classified_listing:
car_id
...
ОБНОВЛЕНИЕ:
Меня беспокоит вариант A в моей базе данных MySQL - когда я запускаю EXPLAIN
, он говорит, что использует expired
в качестве первичного ключа для индексации. Однако для производительности моего поиска по запросу более важным является использование поля price
, поскольку я выполняю поиск на основе price > X
. Поэтому я подумываю о выборе варианта Б.
A
, но я предлагаю не делать is_enabled, если это поле действительно не имеет значения, вместо этого записывать time_entered в БД и либо вычислять истекший интервал в коде, либо использовать представление. Я вижу случай использования, когда люди / хотят / просматривать секретные списки старше 30 дней. - person Evan Carroll   schedule 23.12.2009