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.

 

Vejamos mais um exemplo: 

  • Migração da Tabela posts

 

A linha $table->foreign('user_id')->references('id')->on('users')->onDelete('set null'); nas migrações de Laravel define uma chave estrangeira para o campo user_id que faz referência ao campo id da tabela users e estabelece uma regra específica para o que acontece quando o registo relacionado na tabela users é eliminado.

 

  1. $table->foreign('user_id'):

    • Cria uma chave estrangeira na coluna user_id.
    • Esta chave estrangeira será usada para garantir que os valores inseridos em user_id existam na coluna id da tabela relacionada (users), criando assim um relacionamento entre a tabela atual e a tabela users.
  2. references('id'):

    • Especifica que o campo user_id faz referência ao campo id da tabela relacionada.
    • O valor de user_id deve corresponder a um valor existente na coluna id da tabela users.
  3. on('users'):

    • Indica que a coluna user_id faz referência à tabela users.
    • Este é o nome da tabela onde está a chave primária id que é referenciada.
  4. onDelete('set null'):

    • Define a ação que ocorrerá quando um registo associado na tabela users for eliminado.
    • O comportamento set null indica que, se um utilizador for eliminado da tabela users, o campo user_id nos registos relacionados será atualizado para null.
    • Isto é útil quando queremos manter os registos na tabela atual (por exemplo, posts), mas não precisamos manter a referência ao utilizador eliminado.

 

Post AnteriorPost Seguinte