A resposta simples é não; nunca armazene a idade de uma pessoa. Ele muda para cada pessoa anualmente, mas, como você diz, você deve verificar diariamente se está correto para cada pessoa.
Armazene apenas a data de nascimento e, em seguida, calcule a idade ao selecionar no banco de dados. É apenas
today - date of birth
então não leva quase nenhuma CPU. EDITAR:
Para expandir meu comentário em resposta do ManseUK há também a possibilidade de falha. O que acontece se o seu servidor/banco de dados estiver inativo? Ou sua atualização não é executada no horário especificado? Ou alguém vem e executa manualmente depois que a atualização já foi executada para essa data? Ou alguém desliga seu agendador? Não há perigo de isso acontecer se você calcular
Age
conforme você seleciona no banco de dados. Para selecionar onde a idade está entre 25 e 30 anos e assumindo uma coluna DATE
dateofbirth
sua consulta seria algo como:select *
from users
where dateofbirth between date_add( curdate(), interval -30 year )
and date_add( curdate(), interval -25 year )
Garanta que os
users
está indexado em dateofbirth
.