Sobes.tech
Junior

O que é uma relação muitos-para-muitos?

sobes.tech IA

Resposta da IA

A relação muitos-para-muitos (many-to-many) é um tipo de relação entre duas entidades (tabelas numa base de dados relacional), na qual uma linha de uma entidade pode estar relacionada com muitas linhas de outra entidade, e vice-versa, uma linha da outra entidade pode estar relacionada com muitas linhas da primeira.

Para implementar uma relação muitos-para-muitos em bases de dados relacionais, geralmente é utilizada uma tabela intermédia (de ligação). Esta tabela contém chaves estrangeiras (Foreign Keys) para ambas as entidades relacionadas, formando uma chave primária composta (composite primary key).

Um exemplo pode ser a relação entre "Estudantes" e "Cursos":

  • Um estudante pode frequentar vários cursos.
  • Um curso pode ser frequentado por muitos estudantes.

Implementação na base de dados:

  1. Tabela students:

    • id (Chave Primária)
    • name
  2. Tabela courses:

    • id (Chave Primária)
    • title
  3. Tabela intermédia student_course (ou enrollments):

    • student_id (Chave Estrangeira para students.id)
    • course_id (Chave Estrangeira para courses.id)
    • (student_id, course_id) — é uma chave primária composta, garantindo a unicidade do par "estudante-curso".

Em ORM (por exemplo, SQLAlchemy ou Django ORM), a relação muitos-para-muitos é frequentemente abstraída, e a criação explícita da tabela intermédia pode estar oculta.

// Exemplo de modelo Django ORM para relação muitos-para-muitos
from django.db import models

class Student(models.Model):
    name = models.CharField(max_length=100)
    courses = models.ManyToManyField('Course') // Definição da relação "muitos-para-muitos"

class Course(models.Model):
    title = models.CharField(max_length=100)
    // Os estudantes estarão acessíveis através de course.student_set

A tabela student_course neste caso será criada automaticamente pelo Django ORM.