Como posso ter uma coluna em um banco de dados MySQL ser uma função de outras colunas?
Pergunta
Eu estou trabalhando com um banco de dados que mantém o controle de onde o leitor está em um livro. Eu faço isso por ter uma coluna de contagem de página e uma coluna de página atual.
Existe uma maneira de adicionar uma coluna de 'progresso', que seria igual a (currentPage / pagecount)?
Solução
Você tem duas opções. Você pode criar esse campo em SELECT
:
SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books;
Ou criar um VIEW
, o que permitirá que você consultá-lo sem declarar explicitamente a operação:
CREATE VIEW user_books_progress AS
(SELECT book_id, user_id, (currentpage/pagecount) AS progress FROM user_books);
Depois, é só consultar a sua vista como uma tabela normal:
SELECT book_id, user_id, progress FROM user_books_progress;
Mais informações sobre Arithmetic Operators and Views estão disponíveis na documentação:
11.5.1: Arithmetic Operators < br> 12.1.12. CREATE VIEW Sintaxe
Outras dicas
Você não pode definir uma coluna para ser uma função. Há pelo menos duas soluções para isso:
- Atualize seu coluna progresso usando um disparador BEFORE UPDATE, você vai precisar de um para BEFORE INSERT também.
- Use uma visão que calcula a coluna de progresso para você.