Oi pessoal tudo bom? Hoje é dia de colocar a mão na massa, ou melhor, no código, e como ultimamente tenho falado bastante do Opencart, vou continuar no assunto, mas antes leia alguns dos artigos que já fiz sobre a plataforma.
- Tags x Meta-tags no Opencart em 3 minutos!
- 4 plugins para Opencart indispensáveis!
- 5 coisas que você não sabia sobre o Opencart
O problema com o banco de dados do Opencart
Nesse período de mais de dois anos que venho trabalhando diariamente com o Opencart, consegui conhecer algumas de suas vantagens e desvantagens, e posso dizer com tranquilidade que um dos maiores problemas da plataforma está em seu banco de dados, mas esse problema pode ser minimizado aplicando algumas pequenas alterações no banco.
Vamos a elas?
Índices, sim eles existem
Por incrível que pareça, o pessoal que desenvolveu o Opencart não teve muita preocupação com a criação de índices, e a grande maioria das tabelas possui apenas um único em índice que contempla apenas a chave primária.
Quem já lidou com grandes bancos de dados sabe da importância dessa prática e o quanto ela reduz o tempo das consultas.
Você pode criar índices em todas as tabelas do banco de dados, mas vou listar aqui as que julgo mais importantes e o comando para você criar os índices:
Tabela de Produtos (product)
# Índice para fabricantes
[sql]
CREATE INDEX manufacturer ON `oc_product` (`manufacturer_id`)
[/sql]
# Índice para status de estoque
[sql]
CREATE INDEX stock_status ON `oc_product` (`stock_status_id`)
[/sql]
# Índice para o status
[sql]
CREATE INDEX status ON `oc_product` (`status`)
[/sql]
Tabela de Pedidos (order)
# Índice para loja
[sql]
CREATE INDEX store ON `oc_order` (`store_id`)
[/sql]
# Índice para cliente
[sql]
CREATE INDEX customer ON `oc_order` (`customer_id`)
[/sql]
Chaves estrangeiras, elas podem ajudar
Outra boa prática é a criação de chaves estrangeira e que tenham remoção de dados em cascata. Dessa forma, se você remover um produto diretamente no banco, todos os dados vinculados ao produto em outras tabelas serão também removidos.
Esse é um processo longo e um pouco mais complexo, pois envolve mexer em diversas tabelas, no caso de produto são 16 tabelas vinculadas, mas pode ter certeza de que o esforço vai valer a pena, pois sua base de dados vai ficar sempre homogênea.
Veja abaixo o exemplo da criação da chave na tabela product_to_category, que é responsável por vincular os produtos as categorias do sistema.
O primeiro passo é alterar as tabelas envolvidas pra o tipo Innodb:
[sql]
ALTER TABLE `product` ENGINE=InnoDB ALTER TABLE `product_to_category` ENGINE=InnoDB
[/sql]
# Cria a chave estrangeira com a tabela produto
[sql]
ALTER TABLE `oc_product_to_category` ADD CONSTRAINT `product_id` FOREIGN KEY ( `product_id` ) REFERENCES `oc_product` ( `product_id` ) ON DELETE CASCADE ON UPDATE CASCADE ;
[/sql]
Não altere o banco!
Por fim, a última dica que eu tenho sobre melhorar o desempenho do banco de dados é: não altere o banco de dados, e quando falo em alterar estou falando de criar campos, renomear colunas etc.
Fazendo isso, você pode quebrar referências e prejudicar e muito sua loja Opencart, além de dificultar e muito o processo de atualização.
Se precisar crie novas tabelas, mas não altere as tabelas do sistema.
É isso, pessoal, essas foram algumas dicas que podem melhorar o desempenho da base de dados do Opencart e, consequentemente, aumentar a velocidade e os resultados de sua loja Opencart.
Até a próxima!