@3des

Правильно ли выбрана архитектура базы данных и подход к решению задачи?

Здравствуйте!

Есть приложение, в котором присутствует сущность "Заявка" Данная сущность при поступлении в базу данных имеет статус Создано. Так же возможны статусы Получено (Если срок действия Заявки еще не наступил), Действует (Срок действия наступил и еще не истек) и Закрыто (Если срок действия истек). Все Заявки хранятся в одной таблице “zayavka”. Раз в минуту производится выборка из базы (читай из таблицы "zayavky") Заявок в статусах Создано, Получено, Действует и проверка сроков действия, для перевода в следующий статус. Если срок действия Заявки истек то Заявка получает статус Закрыта и, по сути, больше не используется, лежит в базе на случай если кто то ее захочет посмотреть. У заявки есть ссылки в обе стороны на другие таблицы - как то журналы действий, пользователи и т.д.

Получается, что в таблице "zayavka" накапливаются заявки в статусе Закрыто и ежеминутно с целью выбрать Заявки в статусах требующих обработки приходится лопатить всю таблицу - а когда таблица раздуется - может получится так, что минуты не будет хватать на выборку. Мне данная архитектура кажется не оптимальной, и я думаю имеет ли смысл перемещать Заявки в статусе Закрыто в другую таблицу, таким образом сокращая время опроса таблицы "zayavka". Как вообще правильно было бы поступить в таком случае и при каком количестве записей в таблице стоит ожидать проблем.

Спасибо, что прочитали!
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
BojackHorseman
@BojackHorseman
...в творческом отпуске...
чтобы не лопатить все записи придумали индексы
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AlexanderKirshinDev
@AlexanderKirshinDev
Правильно расставьте индексы, создайте отдельное представление для выборки чтобы не ходить напрямую в таблицы
Ответ написан
Mikhail_E
@Mikhail_E
1С, SQL
Структура вполне себе жизнеспособная, если ей правильно пользоваться.
Чтобы не "Лопатить всю таблицу", в которой через некоторое время будет много "Закрытых" заявок, необходимо добавить индекс по полю "Статус".
Таким образом при выполнении запроса-выборки, если вы накладываете фильтр на эту колонку, лишние значения будут отсекаться (чтение будет сначала происходить по индексу, а затем уже строки из таблицы, которые подходят под критерии отбора).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы