Relacionamento entre tabelas.

article featured image

Quando estamos a criar uma base de dados, é crucial ter em consideração a integridade de entidade e referência. Para garantir um funcionamento eficiente, é essencial estar atento às relações entre as diversas entidades do sistema.

Ao editar o ficheiro da tabela que estamos a preparar para migrar, é importante, após definir os campos, identificar e estabelecer corretamente as relações existentes com outras entidades. Este passo é vital para assegurar a coerência e a integridade dos dados no contexto do sistema.

Vamos considerar um exemplo onde temos três tabelas: Produto, Encomenda e ItemsEncomenda. Vamos supor que cada encomenda pode ter vários produtos e que um produto pode estar presente em várias encomendas. Neste caso, estamos a lidar com uma relação muitos-para-muitos, o que significa que podemos ter vários produtos numa encomenda e, inversamente, um produto pode pertencer a várias encomendas. Vamos utilizar um relacionamento de tabela pivot para representar esta relação.

Aqui está um exemplo de migração para essas tabelas usando o Laravel:

  • Migração da Tabela Produto:

  • Migração da Tabela Encomenda:

  • Migração da Tabela ItemsEncomenda:

Neste exemplo, a tabela items_encomenda serve como uma tabela pivot para as tabelas produtos e encomendas. Os campos produto_id e encomenda_id são chaves estrangeiras que referenciam os IDs das tabelas produtos e encomendas, estabelecendo assim a relação muitos-para-muitos. A coluna quantidade poderia representar a quantidade de um determinado produto na encomenda.

 

É crucial criar as tabelas mestre antes das tabelas que fazem uso de chaves estrangeiras. Deve ter em mente que os ficheiros de migração são criados e ordenados pela data de criação, sendo executados seguindo essa ordem. Portanto, não é possível estabelecer relações entre campos de tabelas que ainda não foram criadas. Esta ordem de execução é fundamental para garantir a integridade referencial e o correto funcionamento do sistema.

Post AnteriorPost Seguinte