Задать вопрос
Zonor
@Zonor
Начинающий веб программист

Можно ли в sql сделать поле isactive, чтобы активной единовременно могла быть только одна запись?

У меня есть переключение активных записей на фронте. Сейчас я делаю так, при получении запроса на активацию записи, на бэкенде даю запрос в бд на снятие активности в записях бд, и проставлении активности в нужной.
Получается два запроса в бд, и как то чувство что это неправильно. Может накручиваю себе, но думаю в sql уже есть какое то решение для этого? Или все делают это через два запроса?
Нагуглить не смог, не знаю как составить запрос чтобы выдало не инфу по настройкам, а именно по ситуации.
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 2
BorLaze
@BorLaze
Java developer
А это принципиально - иметь именно флаг?

Можно сделать по-другому - заводим поле типа DATE, называем его ACTIVATED (например), и при активации записи пишем в него текущую дату. Потом, когда нам нужно найти активную запись, просто ищем запись с самой старшей датой.

Установка активной записи, таким образом, получается единичным запросом, выборка - тоже, плюс бонусом получаем информацию, когда же эта запись стала активной.
Ответ написан
@gsaw
Ничего такого специального нету. База данных только свалка данных. Ты можешь указать по каким правилам их туда сваливать, но логику твоего приложения база данных не знает и лучше если не узнает. Так как тогда привяжешься навсегда к одному вендору.

А в данном случае можно обойтись одним запросом к базе, если я правильно понял. Типа того

update mytable set isactive = case when id = :active_id then 1 else 0 end where search_criteria = :filter


active_id это уникальный ключ, если id записи совпадает с заданным active_id, то isactive будет установленно в 1, для всех остальных записей удвлетворяющих условию в 0.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Я бы предложил использовать триггеры, но многим они не нравятся, т.к. бизнес-логика размывается между приложением и базой данных.
Но если вас не пугает сей факт, то решение очень даже хорошее: один раз настроили и забыли и можно не париться по поводу смены активности.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы