Estava pesquisando na web sobre o tema e encontrei este artigo:
http://rfiume.blogspot.com/2007/04/relacionamento-many-to-many-entre.html
O artigo trata sobre como mapear um relacionamento M:N sem atributos. Questionei ao autor como seria o mapeamento caso a estrutura sofresse uma pequena alteração.
Antes:
CREATE TABLE curso
(
id int8 NOT NULL,
descricao text,
cargahoraria int4 NOT NULL,
nome varchar(100) NOT NULL,
CONSTRAINT curso_pkey PRIMARY KEY (id)
);
CREATE TABLE aluno
(
id int8 NOT NULL,
matricula date NOT NULL,
endereco varchar(255) NOT NULL,
nome varchar(50) NOT NULL,
CONSTRAINT aluno_pkey PRIMARY KEY (id)
);
CREATE TABLE curso_aluno
(
cursos_id int8 NOT NULL,
alunos_id int8 NOT NULL,
CONSTRAINT curso_aluno_pkey PRIMARY KEY (cursos_id, alunos_id),
CONSTRAINT fk_curso_aluno_alunos_id FOREIGN KEY (alunos_id)
REFERENCES aluno (id) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_curso_aluno_cursos_id FOREIGN KEY (cursos_id)
REFERENCES curso (id) ON UPDATE NO ACTION ON DELETE NO ACTION
);
Depois da alteração:
CREATE TABLE curso
(
id int8 NOT NULL,
descricao text,
cargahoraria int4 NOT NULL,
nome varchar(100) NOT NULL,
CONSTRAINT curso_pkey PRIMARY KEY (id)
);
CREATE TABLE aluno
(
id int8 NOT NULL,
matricula date NOT NULL,
endereco varchar(255) NOT NULL,
nome varchar(50) NOT NULL,
CONSTRAINT aluno_pkey PRIMARY KEY (id)
);
CREATE TABLE curso_aluno
(
cursos_id int8 NOT NULL,
alunos_id int8 NOT NULL,
data_matricula date not null,
CONSTRAINT curso_aluno_pkey PRIMARY KEY (cursos_id, alunos_id),
CONSTRAINT fk_curso_aluno_alunos_id FOREIGN KEY (alunos_id)
REFERENCES aluno (id) ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_curso_aluno_cursos_id FOREIGN KEY (cursos_id)
REFERENCES curso (id) ON UPDATE NO ACTION ON DELETE NO ACTION
);
Reparem que eu adicionei um novo atributo ao relacionamento. Como vocês resolveriam esta situação?